盒模型,就是瀏覽器為頁面中的每個 html 元素生成的矩形盒子。
這些盒子們都要按照可見版式模型(visual formatting model)在頁面上排布。可見的頁面版式主要由三個屬性控制: position 屬性、 display 屬性和 float 屬性。其中,position 屬性控制頁面上元素間的位置關係, display 屬性控制元素是堆疊、併排,還是根本不在頁面上出現, float 屬性提供控制的方式,以便把元素組成成多欄布局。
盒子屬性分三組:
可以這麼理解盒子屬性:外邊距是邊框向外推其他元素,而內邊距是從邊框向內推元素的內容。css 為邊框、內邊距和外邊距分別規定了簡寫屬性。在每個簡寫宣告中,屬性值的順序都是上、右、下、左(順時針旋轉)。示例:
margin:5px 10px 12px 8px;
注意:4 個值之間有空格,但不能是其他分隔符(比如逗號之類的)。甚至,你都不用把 4 值示例:全都寫出來——如果哪個值沒有寫,那就使用對邊的值。
margin:12px 10px 6px;
說明:缺少最後乙個值(左邊),使用對邊(右邊)的值(10px
),即:margin:12px 10px 6px 10px
。
示例:margin:12px 10px;
說明:缺少最後兩個值(下邊和左邊),使用上邊(12px
)和右邊(10px
),即:margin:12px 10px 12px 10px;
示例:margin:12px;
說明:只寫乙個值,那麼4個邊都去這個值。即:margin:12px 12px 12px 12px;
內邊距(padding)用來設定盒子內容區與邊框的間距。在沒有設定內邊距的情況下,內容會緊挨著邊框。
外邊距(margin)用來設定盒子與相鄰元素的間距。
說明:這條規則把所有元素預設的外邊距和內邊距都設定為零。把這條規則放到樣式表裡後,所有預設的外邊距和內邊距都會消失。然後,你可以為那些真正需要外邊距的元素再新增外邊距。不同瀏覽器預設的內邊距和外邊距也不一樣,特別是對表單和列表等復合元素。在這種情況下,用這條規則中和預設值,然後再根據需要新增,則會在各瀏覽器上獲得一致的效果。
垂直方向上的外邊距會疊加,這可是你必須得知道的一件事。
in css, the adjoining margins of two or more boxes (which might or might not be siblings) can combine to form a single margin. margins that combine this way are said to collapse, and the resulting combined margin is called acollapsed margin.在css中,兩個或多個毗鄰(父子元素或兄弟元素)的普通流中的塊元素垂直方向上的 margin 會發生疊加。這種方式形成的外邊距即可稱為外邊距疊加(collapsed margin)。
根據經驗,為文字元素設定外邊距時通常需要混合使用不同的單位。比如說,乙個段落的左、右外邊距可以使用畫素,以便該段文字始終與包含元素邊界保持固定間距,不受字型大小變大或變小的影響。而對於上、下外邊距,以 em 為單位則可以讓段間距隨字型大小變化而相應增大或縮小。
示例:p
浮動和清除是用來組織頁面布局的一柄利劍,這柄劍的劍刃就是浮動,可以想象把元素從常規文件流中拿出來。浮動元素脫離了常規文件流之後,原來緊跟其後的元素就會在空間允許的情況下,向上提公升到與浮動元素平起平坐。float
和clear
屬性。
如果浮動元素後面有兩個段落,而你只想讓第一段與浮動元素並列(就算旁邊還能放第二段,也不想讓它上來),可以使用clear
屬性來清除第二段,然後它就會乖乖地呆在浮動元素下面了。
浮動最常見的作用:
注意:三種方法各有利弊,看情況使用。css 布局的核心是
position
屬性,對元素盒子應用這個屬性,可以相對於它在常規文件流中的位置重新定位。position
屬性有 4 個值:static
、relative
、absolute
、fixed
,預設值為static
。
static
在靜態定位的情況下,每個元素都處於常規文件流中。要突破這種布局元素的方式,就必須把盒子的position
屬性改為其它三個值。
relative
相對定位,相對的是它原來在文件流中的位置(或者預設位置)。設定之後,可以使用top
、right
、bottom
和left
屬性來改變它的位置。多數情況下,只用top
和left
就可以實現我們想要的效果。
使用相對定位的關鍵就是要考慮到元素原來的空間。因為使用了相對定位的元素只是相對於原始位置挪動了一下,頁面沒有任何變化,即元素原來佔據的空間沒有動,其他元素也沒動。
absolute
絕對定位會把元素徹底從文件流中拿出來,然後相對於其他元素(預設是定位上下文body
)定位。同樣可以通過top
和left
設定偏移值來決定位置。
fixed
從完全移出文件流的角度說,固定定位與絕對定位類似。但不同之處在於,固定定位元素的定位上下文是視口(瀏覽器視窗或手持裝置的螢幕),因此它不會隨頁面滾動而移動。
定位上下文,指的是定位元素所相對偏移的元素。
事實上,只要把元素的外邊距和內邊距設定好,多數情況下只用靜態定位就足以實現頁面布局了。很多剛開始接觸 css 的初學者都會錯誤地設定所有元素都有position
屬性,最終才發現從文件流中挪出來的這些元素一點也不好控制。因此,除非真需要那麼做,否則不要輕易修改元素預設的position
屬性。
position
屬性,也有display
屬性。
display
屬性有三個值:block
、inline
和none
。
把塊級元素變成行內元素(或者相反):
/*預設為 block*/
p /*預設為 inline*/
a
把元素的display
設定為none
,則該元素及所有包含在其中的元素,都不會在頁面顯示,它們原先佔據的空間也不會被**,就好像相關標記根本不存在一樣。與此相對的元素是visibility
屬性,屬性值為:visible
(預設值)和hidden
。如果設定為hidden
,元素會被隱藏,但其佔據的頁面空間會被保留。
參考資料
元素定位 14元素定位position
1 定義 position 屬性指定了元素的定位型別。這個屬性定義建立元素布局所用的定位機制。任何元素都可以定位,不過絕對或固定元素會生成乙個塊級框,而不論該元素本身是什麼型別。相對定位元素會相對於它在正常流中的預設位置偏移。元素可以使用的頂部,底部,左側和右側屬性定位。然而,這些屬性無法工作,除非...
0036元素定位class
usr bin python vim set fileencoing css定位 selenium極力推薦使用css定位,而不是xpath定位,原因是css定位比xpath定位速度快,語法也更加簡潔 css常用的定位方法 1.find element by css selector 2.id id選...
CSS學習6(元素框)
所有文件元素都生成乙個矩形框,這稱為元素框 element box 它描述了乙個元素在文件布局中所佔的空間大小,因此,每個框影響著其他元素框的位置和大小。預設地,乙個可以顯示的文件由多個矩形框組成,這些矩形框分布開,從而不會相互重疊 一般情況下 另外,根據某些限制,這些框要盡可能地少佔空間,同時還要...