簡單瞭解CSS3的all屬性

 

http://www.zhangxinxu.com/wordpress/2016/03/know-about-css3-all/ @張鑫旭css

1、兼容性

一些CSS文章,或者CSS文檔,兼容性什麼的都是放在最後。html

又不是什麼見不得人的事情,來,直接開篇就亮刺刀。css3

兼容性還行, 除了IE不支持,其餘瀏覽器基本上都綠油油,目前自娛自樂,內網項目什麼的都是能夠用用的。瀏覽器

2、all是幹嗎用的

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會讓背景色什麼的,都繼承父級,相信這不是你但願看到的。

表情

3、語法和區別

語法以下:

all: initial;
all: inherit;
all: unset;

/* CSS4特性,無視之 */
all: revert;

支持三個CSS通用屬性值,initialinheritunset. 這三個屬性值分別表示什麼意思呢?

您能夠狠狠地點擊這裏: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
    initial值效果

     

    initial是初始值的意思,也就是,article元素下面全部的第一級子元素都除了unicode-bididirection之外的CSS都使用初始值。

    例如,<h6><p>元素瀏覽器內置的display:block直接拜拜了,都變成了inline元素,所以在一行顯示:
    瀏覽器內置CSS被幹掉

    font-size也使用了瀏覽器軟件自己設置的大小16pxcolor顏色也變成了瀏覽器軟件自己的黑色。例如,在瀏覽器設置中改變字號,從中變成大:
    字號瀏覽器變化

    會看到顯示的文字內容也變大了:
    內容文字也變大

    因爲咱們只是對相鄰層級子元素進行了initial設置,所以,<li>元素不受影響,可是,因爲在父元素不明的狀況下,<li>元素的默認是打點,所以,這裏從數字變成了點,list-style-typelist-style-position都變化了。

  • inherit
    繼承效果

     

    inherit是繼承的意思,也就是,article元素下面全部的相鄰子元素都除了unicode-bididirection之外的CSS都繼承了<article>元素的CSS。

    所以,<h6><p>元素仍是塊狀的,background-color都是<article>元素的背景色,color顏色也跟<article>同樣,是綠色(文本域的紅色被幹掉了)。

    不只上面這些CSS,padding/margin也都繼承了,只是默認是0, 看不出來,咱們稍微修改下,例如給<article>元素來個margin值:
    article增長margin

    結果,那些子元素都開花了:
    全部子元素都有間距

  • unset
    unset效果截圖

     

    unset是取消設置的意思,也就是,article元素下面全部的相鄰子元素除了unicode-bididirection之外的CSS都幹掉都不要,不要了那用什麼呢?unset值的特性以下,當前元素瀏覽器或用戶設置的CSS忽略,而後若是是具備繼承特性的CSS,如color, 則使用繼承值;若是是沒有繼承特性的CSS屬性,如background-color, 則使用初始值。

    所以,<h6><p>元素的display屬性值使用了initial初始值,所以變成了inline元素,兩個同一行顯示了;而這些元素的color顏色使用了inherit繼承值,所以都是綠色,<textarea>的背景色background-color不具備繼承特性,所以使用的是initial初始值,也就是transparent透明,所以,就是截圖所示效果。

3、結語

動手寫文章以前,還覺得這個CSS屬性會有意想不到的妙用,最後結果是,表現確實意想不到,至於妙用,我只能科科一下。

all所牽扯的CSS實在是太多了,我目前仍是想不出有什麼場景,就是要用這個CSS屬性。或者說何時,但願特殊的元素一會兒變成普通元素,例如,input輸入框外面一個div,來個input{all:inherit;},貌似還真有這樣的場景,輸入框不須要border不須要background不須要padding不須要margin, 恩,不錯,不枉寫此文了!

相關文章
相關標籤/搜索