每日兩道前端面試題 - 20190202
塊級元素與行內元素,怎麼用CSS控制它們、以及如何合理的使用它們
它們的定義
1.塊級元素:每個塊級元素預設佔一行高度,若有塊級元素則同行無法再新增其他元素(float浮動除外)
特點:
高度行高以及外邊距內邊距都可控制
寬度預設100%
可以容納內聯元素及塊元素
2.行內元素:可以和其他元素都在一行上.
特點:
寬度就是它的文字或圖片的寬度,不可改變
內聯元素只能容納文字或者其他的內聯元素
設定寬度width無效
設定高度height無效,可通過line-height來設定
設定margin只有左右有效,上下無效
設定padding只有左右padding有效,上下無效
3.行內塊狀元素:綜合了行內元素與塊狀元素的特性,但是各有取捨
特點:
不自動換行
能夠識別寬高
預設排列方式從左到右
4.塊級元素有哪些:
div | dl(定義列表) | h1(h開頭系列) | hr | menu | ol | p | table | ul
5.行內元素有哪些:
a | b | br | em | i | img | input | label | select | span | strong
sub | textarea | u
6.行內塊狀元素有哪些:
button | del | iframe | ins | map | object
塊級元素與行內元素,怎麼用CSS控制它們、以及如何合理的使用它們,通俗講解
1.首先要知道,div是塊級元素,在頁面中獨佔一行,自上而下排列,也是傳說中的流
由此可以看出,即使div1的寬度很小,頁面中一行可以容下div1和div2,div2也不會排在div1後面,顯然標準流已
經法滿足需求,這就要用到浮動
浮動可以理解為讓某個div元素脫離標準流,漂浮在標準流之上,和標準流不是一個層次。
假設上圖中的div2浮動,那麼它將脫離標準流,但是div1,div3,div4仍然在標準流當中所以div3會自動向上移動,佔據div2的位置,重新組成一個流。
從圖中可以看出,div2不再屬於標準流,div3自動上移頂替div2的位置,div1,div3,div4依次排列,成為新的流,又因為浮動是漂浮在標準流上面的,所以div2擋住了一部分的div3,所以div3看起來變矮了。
如果把div2右浮動,我們看的是這個效果:
下面我們把div2和div3都加上左浮動,效果如圖:
同理,由於div2,div3浮動之後,div3會跟隨在div2之後,但是從以上的每個例子中,div2都是浮動的,但是卻沒有跟在div1之後,因此可以得到一個重要結論:
div元素A是浮動的,如果A元素上一個元素也是浮動的,那麼A元素會跟隨在上一個元素的後邊(若是一行放不下的情況,則會被擠到下一行);如果A元素上一個元素是標準流中的元素,那麼A的相對垂直位置不會改變,也就是說A的頂部是和上一個元素的底部對齊。
假如我們把div2,和div4左浮動,效果圖如下:
結論依然是:div2,div4浮動,脫離了標準流,因此div3將會自動上移,與div1組成標準流。div2發現上一個元素是標準流的元素,因此div2相對垂直位置不變,與div1底部對劉。div4發現上一個元素div3也是標準流中的元素,因此div4的頂部與div3的底部對齊。
恭喜你已經掌握了新增浮動.
現在我們來聊一下清除浮動,有上邊的基礎清除浮動非常理解
語法:clear: none | left | right | both
none:允許兩邊都有可以有浮動物件
left:不允許左邊有浮動物件
right:不允許右邊有浮動物件
both:不允許有浮動物件
根據上邊的基礎,假如頁面中只有兩個元素div1,div2,他們都是左浮動,場景如下:
這時候使用清除浮動,根據官方定義,讀者可能會嘗試這樣寫,在div1中的樣式中新增clear:right,理解為不允許div1的右邊有浮動元素,由於div2是浮動元素,因此會自動下移一行來滿足規則。
其實這種理解是不正確的,這樣做沒有任何效果。
對於CSS的清除浮動(clear),一定要牢記:這個規則只能影響使用清除的元素本身,不能影響其他元素。
怎麼理解呢?就拿上邊的例子來說,我們是想讓div2移動,但我們卻是在div1元素的CSS樣式中使用了清除浮動,試圖通過清除div1右邊的浮動元素 (clear:right;)來強迫div2下移,這是不可行的,因為這個清除浮動是在div1中呼叫的,它只能影響div1,不能影響div2。
根據定論,要想讓div2下移,就必須在div2的CSS樣式中使用浮動。本例中div2的左邊有浮動元素div1,因此只要在div2的CSS樣式中使用clear:left;來指定div2元素左邊不允許出現浮動元素,這樣div2就被迫下移一行。
對於右浮動也亦是如此。