css知多少(10)——display

傑克.陳發表於2015-03-09
原文:css知多少(10)——display

1. 引言

  網頁的所有元素,除了“塊”就是“流”,而且“流”都是包含在“塊”裡面的(最外層的body就是一個“塊”)。在本系列一開始講《瀏覽器預設樣式》的時候,大家也都看到了瀏覽器預設樣式中規定了html元素哪些屬於“塊”(剩下的就是“流”)。這部分知識非常重要也非常基礎,因此在所有的前端面試題中,都會問道哪些元素是“塊”哪些元素是“流”。

  

  其實,這部分知識都囊括在display這個樣式設定中。在網上查詢出display所有的屬性,你會發現它有很多,但是不是每個都常用,甚至大部分你都沒有用過。這個沒關係,學以致用,用不到的就可以先不學,知道就行,什麼時候用,什麼時候再去詳細學——前提是你知道有這麼個東西,否則無從下手。

  

  看上圖。常用的屬性有:none、block、inline、inline-block、inherit,其中inherit是繼承父元素的樣式,不用多說,其他的幾個會在下文詳解。其他的都不常用,但是有一些還是需要點出來,其實這些已經在《瀏覽器預設樣式》一節講到了,這裡簡單描述一下,詳細的可以參考瀏覽器預設樣式一節。

  1. list-item:通過它可以模擬li列表樣式;
  2. table:也是一個“塊”,但和block相比,table具有包裹性;
  3. table-cell:最新的多列布局解決方案;

2. inline

  常用的inline就是文字和圖片,其實inline真沒什麼好說的,大家可以把它想象成一個杯子裡的水,它是“流”,是沒有大小和形狀的,它的寬度取決於父容器的寬度。

  因此,針對inline的標籤,你設定寬度和高度是無效的,通過監控可以知道,該元素實際的寬度和高度都是auto,並不是我們設定的值。

  

      

  一個很基礎的問題:如何把inline元素轉換成“塊”元素?相信絕大部分人的回答是display:block,但是你應該知道這不是一個唯一的答案。至少我設定display:table也是可以的吧?

       還有兩種情況你應該去了解(如果你不知道的話):

       第一,對inline元素設定float

       還是剛才那個例子,我們對span元素新增一個float:left,執行看看效果,你就會大吃一驚。從顯示的效果和監控的結果上看來,span元素已經“塊”化。注意,上一節剛剛講完float,不要忘記float的“破壞性”、“包裹性”,在這裡同樣適用。

  

       第二,對inline元素設定position:absolute/fixed

       還是有同一個例子做演示,這次在span元素上加上absolute/fixed,效果大家應該能猜到,和加上float的效果相同。至於absolute/fixed有什麼特性,會在下一節介紹position時提到。

  

3. block

  本系列有一節重點講解了《盒子模型》,不知道大家看沒看過,或者說你已經很瞭解盒子模型了。

  其實對於block,我覺得就是“盒子模型”。一個元素設定了block,它就必須遵循盒子模型的規則。因此,這裡也不再去詳細寫它了,大家可以去盒子模型那一節好好看看,就那麼點內容。

4. inline-block

  這個話題還得從《瀏覽器預設樣式》這一節開始。瀏覽器預設樣式中規定了幾個html元素為display:inline-block,回顧一下。

  

  初學者對於inline-block可能比較陌生,沒關係,一步一步來。首先,你應該知道inline是什麼樣子的,就是一般的文字、圖片;其次,你應該知道block是什麼樣子的,一般的div就是;最後,inline-block顧名思義,它既有inline的特性,又有block的特性,大家可以想想一般的button、input是什麼樣子的。

  那button舉例子。我們在頁面中輸入若干個<button>,發現它們是“流”式排列的(可以對比一下若干個<div>的排列方式)。但是針對一個button,我們還可以自定義修改它的形狀,這樣就有“塊”的特徵。

      

  因此,inline-block的特點可以總結為:外部看來是“流”,但是自身確實一個“塊”。不知道大家理解也無?

5. 總結

  我看《css設計指南》書中關於display的內容就寫了不到一頁,側面反映出display的內容不是很多,但是也看你怎麼去理解和應用,如果詳細品味起來,還是很有意思的。大家有意見的可以留言交流。

————————————————————————————————————-

歡迎關注我的教程:從設計到模式深入理解javascript原型和閉包系列》《微軟petshop4.0原始碼解讀視訊》《json2.js原始碼解讀視訊

也歡迎關注我的開源專案——wangEditor,簡潔易用的web富文字編輯器

————————————————————————————————————-


相關文章