http://www.zhangxinxu.com/wordpress/2016/03/know-about-css3-all/ @張鑫旭css
一些CSS文章,或者CSS文檔,兼容性什麼的都是放在最後。html
又不是什麼見不得人的事情,來,直接開篇就亮刺刀。css3
兼容性還行, 除了IE不支持,其餘瀏覽器基本上都綠油油,目前自娛自樂,內網項目什麼的都是能夠用用的。瀏覽器
all
屬性其實是全部CSS屬性的縮寫,表示,全部的CSS屬性都怎樣怎樣,可是,不包括unicode-bidi和direction這兩個CSS屬性。app
爲何會有這個CSS屬性呢?wordpress
咱們可能知道,有些CSS屬性值基本上全部CSS屬性都有,比方說繼承inherit
!字體
咱們CSS reset輸入框的時候,是否是有相似這樣的代碼(實際多是具體值,做用相似):spa
input, textarea { color: inherit; font-size: inherit; font-family: inherit; }
由於這類輸入控件自身有內置的大小和字體,須要重置。3d
此時,你們就會發現,這些屬性值都是inherit
, 要是能夠合併就行了!code
喲喲喲,說到點子上了,CSS all
屬性就是用來合併的。
input, textarea { all: inherit; }
喔噢,三合一,頓時一陣春風拂面之感。可是,這裏僅僅是展現做用,其實是不會這麼用的,由於,all:inherit
會讓背景色什麼的,都繼承父級,相信這不是你但願看到的。
語法以下:
all: initial; all: inherit; all: unset; /* CSS4特性,無視之 */ all: revert;
支持三個CSS通用屬性值,initial
, inherit
, unset
. 這三個屬性值分別表示什麼意思呢?
您能夠狠狠地點擊這裏:CSS3 all屬性演示demo
默認的HTML和CSS是這樣的,一個傳統的標籤內容,有標題有列表:
<article> <h6>標題</h6> <p>p變文字</p> <ol> <li>有序列表1</li> <li>有序列表2</li> <li>有序列表3</li> </ol> <textarea>文本域</textarea> </article>
article { background-color: #f0f3f9; color: green; } article > textarea { border: 1px solid #34538b; background-color: #ffffe0; color: red; }
這盛世,如你所見:
顏色啊,間距啊,以及文本域狀態都是咱們認爲的樣子顯示。
如今,點擊demo的下拉,選擇對應的all
屬性值,實現下面CSS效果:
.initial > * { all: initial; } .inherit > * { all: inherit; } .unset > * { all: unset; }
結果:
initial是初始值的意思,也就是,article
元素下面全部的第一級子元素都除了unicode-bidi
和direction
之外的CSS都使用初始值。
例如,<h6>
, <p>
元素瀏覽器內置的display:block
直接拜拜了,都變成了inline
元素,所以在一行顯示:
font-size
也使用了瀏覽器軟件自己設置的大小16px
,color
顏色也變成了瀏覽器軟件自己的黑色。例如,在瀏覽器設置中改變字號,從中變成大:
會看到顯示的文字內容也變大了:
因爲咱們只是對相鄰層級子元素進行了initial
設置,所以,<li>
元素不受影響,可是,因爲在父元素不明的狀況下,<li>
元素的默認是打點,所以,這裏從數字變成了點,list-style-type
和list-style-position
都變化了。
inherit是繼承的意思,也就是,article
元素下面全部的相鄰子元素都除了unicode-bidi
和direction
之外的CSS都繼承了<article>
元素的CSS。
所以,<h6>
, <p>
元素仍是塊狀的,background-color
都是<article>
元素的背景色,color
顏色也跟<article>
同樣,是綠色(文本域的紅色被幹掉了)。
不只上面這些CSS,padding
/margin
也都繼承了,只是默認是0
, 看不出來,咱們稍微修改下,例如給<article>
元素來個margin
值:
結果,那些子元素都開花了:
unset是取消設置的意思,也就是,article
元素下面全部的相鄰子元素除了unicode-bidi
和direction
之外的CSS都幹掉都不要,不要了那用什麼呢?unset
值的特性以下,當前元素瀏覽器或用戶設置的CSS忽略,而後若是是具備繼承特性的CSS,如color
, 則使用繼承值;若是是沒有繼承特性的CSS屬性,如background-color
, 則使用初始值。
所以,<h6>
, <p>
元素的display
屬性值使用了initial初始值,所以變成了inline
元素,兩個同一行顯示了;而這些元素的color
顏色使用了inherit繼承值,所以都是綠色,<textarea>
的背景色background-color
不具備繼承特性,所以使用的是initial初始值,也就是transparent
透明,所以,就是截圖所示效果。
動手寫文章以前,還覺得這個CSS屬性會有意想不到的妙用,最後結果是,表現確實意想不到,至於妙用,我只能科科一下。
all
所牽扯的CSS實在是太多了,我目前仍是想不出有什麼場景,就是要用這個CSS屬性。或者說何時,但願特殊的元素一會兒變成普通元素,例如,input
輸入框外面一個div
,來個input{all:inherit;}
,貌似還真有這樣的場景,輸入框不須要border
不須要background
不須要padding
不須要margin
, 恩,不錯,不枉寫此文了!