css知多少(10)——display
1. 引言
網頁的所有元素,除了“塊”就是“流”,而且“流”都是包含在“塊”裡面的(最外層的body就是一個“塊”)。在本系列一開始講《瀏覽器預設樣式》的時候,大家也都看到了瀏覽器預設樣式中規定了html元素哪些屬於“塊”(剩下的就是“流”)。這部分知識非常重要也非常基礎,因此在所有的前端面試題中,都會問道哪些元素是“塊”哪些元素是“流”。
其實,這部分知識都囊括在display這個樣式設定中。在網上查詢出display所有的屬性,你會發現它有很多,但是不是每個都常用,甚至大部分你都沒有用過。這個沒關係,學以致用,用不到的就可以先不學,知道就行,什麼時候用,什麼時候再去詳細學——前提是你知道有這麼個東西,否則無從下手。
看上圖。常用的屬性有:none、block、inline、inline-block、inherit,其中inherit是繼承父元素的樣式,不用多說,其他的幾個會在下文詳解。其他的都不常用,但是有一些還是需要點出來,其實這些已經在《瀏覽器預設樣式》一節講到了,這裡簡單描述一下,詳細的可以參考瀏覽器預設樣式一節。
- list-item:通過它可以模擬li列表樣式;
- table:也是一個“塊”,但和block相比,table具有包裹性;
- 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富文字編輯器
————————————————————————————————————-
相關文章
- css之displayCSS
- css display 屬性CSS
- css display 總結CSS
- css知多少(11)——positionCSS
- css26 CSS Layout - The display PropertyCSS
- CSS display: flex佈局CSSFlex
- css知多少(9)——float下篇CSS
- css知多少(12)——目錄CSS
- css知多少(8)——float上篇CSS
- css知多少(2)——學習css的思路CSS
- css中的display屬性CSS
- CSS3 display:box 用法CSSS3
- css display屬性詳解CSS
- css知多少(7)——盒子模型CSS模型
- css知多少(5)——選擇器CSS
- CSS3 display:flex和display:box有什麼區別?CSSS3Flex
- 有趣的CSS題目(11):reset.css 知多少?CSS
- CSS:彈性佈局(display:flex)CSSFlex
- css32 CSS Layout - display: inline-blockCSSS3inlineBloC
- CSS 屬性篇(七):Display屬性CSS
- 深入理解CSS的display屬性CSS
- css知多少(1)——我來問你來答CSS
- CSS之Display、Visbility和Opactity的區別CSS
- css中visibility與display的區別CSS
- CSS display:none和visible:hidden區別CSSNone
- CSS屬性中Display與Visibility的不同CSS
- css知多少(6)——選擇器的優先順序CSS
- jQuery使用css()方法設定元素的display屬性值jQueryCSS
- CSS之使用display:inline-block來佈局CSSinlineBloC
- css知多少(4)——解讀瀏覽器預設樣式CSS瀏覽器
- css知多少(3)——樣式來源與層疊規則CSS
- 淺談CSS3中display屬性的Flex佈局CSSS3Flex
- CSS 中 display:inline-block 屬性使用詳解CSSinlineBloC
- js獲取css屬性知多少?客官來擼就知曉!JSCSS
- display:flex與display:box 區別Flex
- display:flex和display:box的區別Flex
- CSS3實現瀑布流佈局(display: flex/column-coCSSS3Flex
- 淺談CSS3中display屬性的Flex佈局(轉)CSSS3Flex