@layer支援度:Can I Use)
大家一定都遇過CSS怎樣都蓋不過,打架的問題,最後只能使出大絕!important
(小孩子不要學)。@layer
就可以解決這個問題,@layer
可以將CSS樣式分層,控制CSS樣式的priority。
@layer
顧名思義就是可以將CSS樣式分為不同的層,幫助開發者更方便的控制CSS樣式。層
排序,層中的樣式就會按照該層的順序進行疊加,從前到後。@layer
通常解決以下問題:樣式衝突/樣式重複出現/樣式優先級。@layer
定義樣式:排序在後的樣式會覆蓋掉前面的,優先序:B>A,所以結果會是@layer B
的樣式/* excample 1 */
.container{
width:100px;
height:100px;
border:1px solid red;
}
@layer A {
.container{
background-color:white;
}
}
@layer B {
.container{
background-color:black;
}
}
@layer
優先序@layer B,A;
,後面的優先序大於前面的,所以優先序:A>B,所以最後會呈現@layer A
的樣式/* excample 2 */
@layer B,A;
.container{
width:100px;
height:100px;
border:1px solid red;
}
@layer A {
.container{
background-color:white;
}
}
@layer B {
.container{
background-color:black;
}
}
@layer
包住的樣式和沒@layer
包住的樣式,沒@layer
包住的樣式>@layer
包住的樣式,優先序:沒@layer
包住的樣式>B>A,/* excample 3 */
.container{
width:100px;
height:100px;
border:1px solid red;
background-color:blue;
}
@layer A {
.container{
background-color:white;
}
}
@layer B {
.container{
background-color:black;
}
}
@layer
和定義好名字的@layer
優先序呢?一樣後面的優先序大於前面,優先序:匿名@layer
>B>A,/* excample 4 */
.container{
width:100px;
height:100px;
border:1px solid red;
}
@layer A {
.container{
background-color:white;
}
}
@layer B {
.container{
background-color:black;
}
}
@layer {
.container{
background-color:yellowgreen;
}
}
@layer
優先序比較,如果看內層的@layer
,可以想像成是有@layer
包覆的樣式與沒有@layer
的樣式比較,就如同上方第3點說明,優先序:匿名`B>B.D>A>A.C,@layer A {
@layer B{
...
}
}
等同於
@layer A.B
/* excample 5 */
.container{
width:100px;
height:100px;
border:1px solid red;
}
@layer A {
.container{
background-color:white;
}
@layer C {
.container{
background-color:gray;
}
}
}
@layer B {
.container{
background-color:black;
}
@layer D {
.container{
background-color:yellowgreen;
}
}
}
6.非!important
的比較下,!important
的優先序還是最高的,優先序:A>沒
@layer`包住的樣式>B,
/* excample 6 */
.container{
width:100px;
height:100px;
border:1px solid red;
background-color:pink;
}
@layer A {
.container{
background-color:white !important;
}
}
@layer B {
.container{
background-color:black;
}
}
7.正常來說沒@layer
包覆的樣式優先序會大於@layer
包覆的,但是在兩者都有!important
的比較下,!important
的優先序剛好相反,因此優先序:A>沒
@layer`包住的樣式>B。
/* excample 7 */
.container{
width:100px;
height:100px;
border:1px solid red;
background-color:pink !important;
}
@layer A {
.container{
background-color:white !important;
}
}
@layer B {
.container{
background-color:black;
}
}