摘要:后兩個屬性可選。此元素會根據上下文作為塊級元素或內聯元素顯示柵格模型,類似柵格模型,類似
原文地址:http://zhanfang.github.io/2016/07/22/display屬性詳解
轉載請注明地址及作者: zhanfang
最近瞎忙了好長一段時間,一直沒時間寫文章,想深入學習一下css的相關屬性,所以有了這篇文章,如有錯誤請指針。
display的所有屬性/* CSS 1 */ display: none; display: inline; display: block; display: list-item; /* CSS 2.1 */ display: inline-block; display: table; display: inline-table; display: table-cell; display: table-column; display: table-column-group; display: table-footer-group; display: table-header-group; display: table-row; display: table-row-group; display: table-caption; /* CSS 2.1 */ /* CSS 3 */ display: inline-list-item; display: flex; display: box; display: inline-flex; display: grid; display: inline-grid; display: ruby; display: ruby-base; display: ruby-text; display: ruby-base-container; display: ruby-text-container; /* CSS 3 */ /* Experimental values */ display: contents; display: run-in; /* Experimental values */ /* Global values */ display: inherit; display: initial; display: unset;
下面就display的重要屬性進行講解,并配合一些相關的例子
基本屬性 display: nonenone 是 CSS 1 就提出來的屬性,將元素設置為none的時候既不會占據空間,也無法顯示,相當于該元素不存在。
該屬性可以用來改善重排與重繪,同時我也經常用它來做模態窗等效果。
display: inlineinline也是 CSS 1 提出的屬性,它主要用來設置行內元素屬性,設置了該屬性之后設置高度、寬度都無效,同時text-align屬性設置也無效,但是設置了line-height會讓inline元素居中
同時從上圖可以看到兩個inline標簽之間出現了奇怪的間隔,改間隔的原因是div換行產生的換行空白,解決辦法
將兩個inline標簽寫到一行
123123
或者使用一點技巧
JS Bin html{ -webkit-text-size-adjust:none;/* 使用webkit的私有屬性,讓字體大小不受設備終端的調整,可定義字體大小小于12px */ } .main{ font-size:0; *word-spacing:-1px;/* 使用word-spacing 修復 IE6、7 中始終存在的 1px 空隙,減少單詞間的空白(即字間隔) */ } .test{ display:inline; width: 10000px; height:10000px; border:1px solid; font-size:12px; letter-spacing: normal;/* 設置字母、字間距為0 */ word-spacing: normal; /* 設置單詞、字段間距為0 */ }zhan123
實測chome49瀏覽器只用設置父元素的font-size為0即可。
display: block目前有很多原生的元素都是inline的,span、a、label、input、 img、 strong 和em就是典型的行內元素元素。
鏈接:http://www.css88.com/archives...
設置元素為塊狀元素,如果不指定寬高,默認會繼承父元素的寬度,并且獨占一行,即使寬度有剩余也會獨占一行,高度一般以子元素撐開的高度為準,當然也可以自己設置寬度和高度。
在設計的過程中有時需要設計一個div寬高都是整個屏幕,整個時候寬度很好設置,可是高度一般很難設置,因為頁面一般都是可以滾動的,所以高度一般可變,所以這個時候可以使用一個小技巧,如下。
JS Bin html{ height: 100%; } body{ height: 100%; padding: 0; margin:0; } .main{ background: red; width: 100%; height: 100%; }
display: list-item基本原理:div繼承的是父元素body的高度,body是繼承html的高度,html是繼承的瀏覽器屏幕的高度。
此屬性默認會把元素作為列表顯示,要完全模仿列表的話還需要加上 list-style-position,list-style-type
JS Bin 111111 222222 333333
div{ padding-left:30px; } span{ display:list-item; list-style:disc outside none; }
效果圖如下:
通過上面樣式設置,就能仿出一個類似的列表,一定要在div上加padding,因為默認的列表之前的·在box外面
display: inline-blockinline-block為 CSS 2.1 新增的屬性。 inline-block既具有block的寬高特性又具有inline的同行元素特性。 通過inline-block結合text-align: justify 還可以實現固定寬高的列表兩端對齊布局,如下例子:
JS Bin 111111222222333333111111222222333333
body{ margin:0; padding:0; } .main{ text-align:justify; } .col{ display: inline-block; margin-top:10px; width:100px; height: 100px; text-align: center; line-height: 100px; color: #fff; } .col1{ background: red; } .col2{ background: green; } .col3{ background: blue; } .fix{ height:0; padding:0; overflow:hidden; }
效果圖如下:
text-align: justify 屬性會使行內元素兩端對齊,但是要求這些行內元素總寬度至少占滿一行,所以在總寬度不足一行的時候這個屬性沒用,因此在最后需要加上一些占位符。
詳情可以查看 張鑫旭老師的博客
Tip: inline-block會形成一個BFC
display: tabletable 此元素會作為塊級表格來顯示(類似table),表格前后帶有換行符。CSS表格能夠解決所有那些我們在使用絕對定位和浮動定位進行多列布局時所遇到的問題。例如,display:table的CSS聲明能夠讓一個HTML元素和它的子節點像table元素一樣。使用基于表格的CSS布局,使我們能夠輕松定義一個單元格的邊界、背景等樣式, 而不會產生因為使用了table那樣的制表標簽所導致的語義化問題。
利用table的特性,我們能夠輕易的實現三欄布局,并且能夠兼容IE8,如下是使用table屬性,實現三欄布局的例子:
JS Bin head1head2head3123123123
.main{ display: table; width:100%; border-collapse: collapse;/*為表格設置合并邊框模型:*/ } .tr{ display: table-row; border-color: inherit; } .tr1 .td{ height:50px; vertical-align: middle; } .td{ display: table-cell; border: 1px solid; } .td:nth-of-type(1){ width: 100px; } .td:nth-of-type(3){ width: 100px; }
效果如下圖:
CSS2.1表格模型中的元素,可能不會全部包含在除HTML之外的文檔語言中。這時,那些“丟失”的元素會被模擬出來,從而使得表格模型能夠正常工作。所有的表格元素將會自動在自身周圍生成所需的匿名table對象,使其符合table/inline-table、table-row、table-cell的三層嵌套關系。
所以在一般情況下我們也可以不寫外面的table-row元素以及table元素。
display: inline-list-item我在MDN上面看到有這個屬性,但是我實際嘗試發現這個屬性是不能使用的,在 http://caniuse.com/#search=in... 上面也沒有找到這個元素的兼容性,所以應該是不能使用的,支持度全無。
display: flexflex是一種彈性布局屬性
注意,設為Flex布局以后,子元素的float、clear和vertical-align屬性將失效。
主要屬性有兩大類:容器屬性和項目的屬性
flex-direction: 屬性決定主軸的方向(即項目的排列方向)。
flex-wrap: 默認情況下,項目都排在一條線(又稱"軸線")上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。
flex-flow: 屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值為row nowrap。
justify-content: 屬性定義了項目在主軸上的對齊方式。
align-items: 屬性定義項目在交叉軸上如何對齊。
align-content: 屬性定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。
項目屬性order: 定義項目的排列順序。數值越小,排列越靠前,默認為0。
flex-grow: 定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大。
flex-shrink: 屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。
flex-basis: 屬性定義了在分配多余空間之前,項目占據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多余空間。它的默認值為auto,即項目的本來大小。
flex: 屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選。
align-self: 屬性允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同于stretch。
以上關于flex的基礎知識基本是從阮一峰老師那copy過來的,有興趣的同學,可以到阮一峰老師的博客深入閱讀
http://www.ruanyifeng.com/blo...
http://www.ruanyifeng.com/blo...
目前我有一個需求,有一個列表頁,左側固定,右側固定,總寬度固定,但是左側的內容可能會增加,右側的內容也可能會增加,要求平時一行展示,增加的時候兩行展示,左側兩行,右側還是一行,并且都居中。
先上效果圖,不然可能會迷糊:
為了實現上述效果,代碼如下
JS Bin
- 累積的分為:123
123 x 10- 累積的分為:1234
x 10
.main{ height: 200px; width: 300px; border: 1px solid; } ul{ padding: 0px; margin-top: 10px; } li{ display: flex; justify-content: space-between; align-items: center; padding: 10px 0; margin-bottom: 10px; border: 1px solid; } button{ height: 20px; vertical-align: middle; border:0; background: green; outline:none; } img{ width:30px; vertical-align: middle; } .col2-span{ vertical-align: middle; } .col1{ width: 130px; padding-left:8px; } .col2{ padding-right: 8px; vertical-align: middle; }display: -webkit-box
由于某X5瀏覽器某些版本還不支持最新版的flex布局,所以為了保證良好的運行,建議還是使用display: box,box和flex布局的主要差別如下:
display: box
該顯示樣式的新值可將此元素及其直系子代加入彈性框模型中。Flexbox 模型只適用于直系子代。
box-orient
值:horizontal | vertical | inherit
框的子代是如何排列的?還有兩個值:inline-axis(真正的默認值)和 block-axis,但是它們分別映射到水平和垂直方向。
box-pack
值:start | end | center | justify
設置沿 box-orient 軸的框排列方式。因此,如果 box-orient 是水平方向,就會選擇框的子代的水平排列方式,反之亦然。
box-align
值:start | end | center | baseline | stretch
基本上而言是 box-pack 的同級屬性。設置框的子代在框中的排列方式。如果方向是水平的,該屬性就會決定垂直排列,反之亦然。
box-flex
值:0 | 任意整數
該子代的彈性比。彈性比為 1 的子代占據父代框的空間是彈性比為 2 的同級屬性的兩倍。其默認值為 0,也就是不具有彈性。
基本只修改了容器元素li的屬性,如下所示
li{ display: -webkit-box; -webkit-box-orient:horizontal; -webkit-box-pack: justify; -webkit-box-align: center; padding: 10px 0; margin-bottom: 10px; border: 1px solid; }display: inline-flex
我發現在chrome條件下設置了inline-flex,其子元素全部變成了inline模式,設置flex并沒有什么用,不知道是不是我寫的有問題,目前沒找到這個屬性的用法
JS Bin 123123
.main{ display: -webkit-inline-flex; justify-content: center; } .sp1{ flex:1; }其他
以下屬性是實驗性質的,支持度都很低,不建議使用,知道就行。
run-in: 此元素會根據上下文作為塊級元素或內聯元素顯示;
grid: 柵格模型,類似block
inline-grid: 柵格模型,類似inline-block
ruby, ruby-base, ruby-text, ruby-base-container, ruby-text-container
contents
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/49942.html
摘要:從上面的這個分析,也不難理解為什么下,對塊元素設置屬性無法實現的效果。這時塊元素僅僅是被觸發了,而它本就是行布局,所以觸發后,塊元素依然還是行布局,而不會如中塊元素呈遞為內聯對象。display:block就是將元素顯示為塊級元素 block元素的特點是: 總是在新行上開始; 高度,行高以及頂和底邊距都可控制; 寬度缺省是它的容器的100%,除非設定一個寬度 , , , , 和...
摘要:在中,和就是典型的行內元素元素。內聯元素不單獨占一行,給他設置寬高是沒有用的。在中和就是塊級元素。此元素會根據上下文作為塊級元素或內聯元素顯示。此元素會作為塊級表格來顯示類似,表格前后帶有換行符。 display屬性 首先,所有主流瀏覽器都支持 display 屬性。其次,我們都知道display 屬性規定元素應該生成的框的類型。默認值:inline 我們常用的display屬性值...
摘要:如果項目只有一根軸線,該屬性不起作用。后兩個屬性可選。彈性比為的子代占據父代框的空間是彈性比為的同級屬性的兩倍。其默認值為,也就是不具有彈性。此元素會根據上下文作為塊級元素或內聯元素顯示柵格模型,類似柵格模型,類似轉自屬性詳解作者 display的所有屬性 {/* CSS 1 */ display: none; display: inline; display: block; disp...
摘要:如果項目只有一根軸線,該屬性不起作用。后兩個屬性可選。彈性比為的子代占據父代框的空間是彈性比為的同級屬性的兩倍。其默認值為,也就是不具有彈性。此元素會根據上下文作為塊級元素或內聯元素顯示柵格模型,類似柵格模型,類似轉自屬性詳解作者 display的所有屬性 {/* CSS 1 */ display: none; display: inline; display: block; disp...
摘要:后兩個屬性可選。此元素會根據上下文作為塊級元素或內聯元素顯示柵格模型,類似柵格模型,類似 原文地址:http://zhanfang.github.io/2016/07/22/display屬性詳解轉載請注明地址及作者: zhanfang 最近瞎忙了好長一段時間,一直沒時間寫文章,想深入學習一下css的相關屬性,所以有了這篇文章,如有錯誤請指針。 display的所有屬性 /* CSS ...
閱讀 2020·2023-04-25 22:50
閱讀 2834·2021-09-29 09:35
閱讀 3390·2021-07-29 10:20
閱讀 3153·2019-08-29 13:57
閱讀 3356·2019-08-29 13:50
閱讀 3032·2019-08-26 12:10
閱讀 3530·2019-08-23 18:41
閱讀 2634·2019-08-23 18:01