搜尋
首頁web前端css教學CSS選擇器的新用法詳解

CSS選擇器的新用法詳解

Feb 05, 2018 am 10:18 AM
css選擇器

現在,預處理器(如sass)似乎已經成為開發CSS的標配,正如幾年前jQuery是開發JS的標配一樣。 JS的querySelector借鑒了jQuery的選擇器思想,CSS選擇器也藉鑒了預處理器的變數定義、選擇器巢狀、程式碼區塊重用等常用功能。本文將詳細介紹CSS選擇器的新用法。

變數

  一般地,我們在進行web開發時,會有一套變數定義規範,以sass為例,如下圖


// 颜色定义规范
$color-background : #222
$color-background-d : rgba(0, 0, 0, 0.3)
$color-highlight-background : #333
//字体定义规范
$font-size-small : 12px
$font-size-medium : 14px
$font-size-large : 18px

  而CSS變數的語法如下

【宣告變數】

  變數必須以--開頭。例如--example-variable: 20px,意思是將20px賦值給--example-varibale變數

  可以將聲明變數的語句置於任何元素內,如果要設定全域變量,則可以設定為: root、body或html


:root{--bgColor:#000;}

  變數宣告就像普通的樣式宣告語句一樣,也可以使用內嵌樣式


<body style="--bgColor:#000">

【使用變數】

  使用var()函數使用變量,並且可以使用在任意的地方。例如:var(--example-variable)會回傳--example-variable所對應的值


<body style="--bgColor:#000;">
    <p style="width: 100px;height: 100px;background-color: var(--bgColor)"></p>    
</body>

  var()函數還有一個可選參數,用來設定預設值,當變數無法取得值時,則使用預設值


<p style="width: 100px;height: 100px;background-color: var(--bgColor,pink)"></p>

  [注意]關於CSS變數的詳細用法移步至此

@apply

  介紹@apply之前,先介紹一下sass中的混合巨集@mixin,指可以重複使用的程式碼區塊

#  比如,常見的文字溢出隱藏重複使用


@mixin overflow-ellipsis{
    overflow:hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  };
p {
    @include  overflow-ellipsis;
}  

  而應用規則集@apply也是實現類似的功能。與var()相比,@apply是引用樣式的集合,而var()則是引用一個單獨的樣式值


:root{
  --overflow-ellipsis:{
    overflow:hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  };
}
.title{
  width:200px;
  @apply --overflow-ellipsis;
}

自訂選擇器

  自訂選擇器透過@custom-selector來定義,後面跟著一個:--接著是自訂選擇器的名稱,後面是需要定義的選擇器,多個用逗號隔開


@custom-selector :--heading h1, h2, h3, h4, h5, h6;

  這樣,:--heading就成為一個可以使用的選擇器


:--heading{
  margin: 0;
}
h1, h2, h3, h4, h5, h6{
   margin: 0; 
}

  上面兩段程式碼的效果相同

選擇器巢狀

  CSS規則包含許多重複的內容


table.colortable td {
  text-align:center;
}
table.colortable td.c {
  text-transform:uppercase;
}
table.colortable td:first-child, table.colortable td:first-child+td {
  border:1px solid black;
}
table.colortable th {
  text-align:center;
  background:black;
  color:white;
}

  使用巢狀語法後,程式碼如下


table.colortable {
  & td {
    text-align:center;
    &.c { text-transform:uppercase }
    &:first-child, &:first-child + td { border:1px solid black }
  }
  & th {
    text-align:center;
    background:black;
    color:white;
  }
}

  當使用巢狀樣式規則時,必須能夠引用由父規則相符的元素; 畢竟是整個巢狀點。為了達到這個目的,這個規範定義了一個新的選擇器,即嵌套選擇器,寫成ASCII符號&

  當在嵌套樣式規則的選擇器中使用時,嵌套選擇器表示由父規則匹配的元素。在任何其他情況下使用時,它什麼都不代表​​。 (也就是說,它是有效的,但不匹配任何元素)

  [注意]&嵌套選擇符的兩種錯誤寫法如下所示


.foo {
  color: red;
  .bar & { color:blue; }
}
.foo {
  color: red;
  &.bar, .baz { color: blue; }
}

【@nest】

  為了解決上面的嵌套選擇符&的脆弱,可以使用@nest選擇符,@nest可適用範圍更廣,只要與嵌套選擇符&共同作用即可


.foo {
  color: red;
  @nest & > .bar {
    color: blue;
  }
}
//等价于
   .foo { color: red; }
   .foo > .bar { color: blue; }

.foo {
  color: red;
  @nest .parent & {
    color: blue;
  }
}
//等价于
   .foo { color: red; }
   .parent .foo { color: blue; }

.foo {
  color: red;
  @nest :not(&) {
    color: blue;
  }
}
//等价于
   .foo { color: red; }
   :not(.foo) { color: blue; }

  [注意]@nest选择符的两种错误写法如下所示

.foo {
  color: red;
  @nest .bar {
    color: blue;
  }
}
.foo {
  color: red;
  @nest & .bar, .baz {
    color: blue;
  }
}

最後

#  遺憾地是,除了CSS變數variable可以在新版本下使用外,其他CSS選擇器的新用法目前都沒有瀏覽器支援。但是,CSS後處理器postcss中的cssnext插件可以解決所有問題

  就像cssnext官網說的一樣,今天就開始使用明天的CSS語法

相關推薦:

CSS選擇器欄位解析的實作方法

詳解CSS選擇器 Selector

CSS選擇器中帶點(.)的解決辦法

以上是CSS選擇器的新用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
這麼多顏色鏈接這麼多顏色鏈接Apr 13, 2025 am 11:36 AM

最近有一系列有關顏色的工具,文章和資源。請允許我通過將它們四捨五之後關閉幾個標籤,以供您享受。

自動利潤在Flexbox中的工作方式自動利潤在Flexbox中的工作方式Apr 13, 2025 am 11:35 AM

羅賓以前已經介紹過這一點,但是我在過去的幾周里聽到了一些關於它的困惑,看到另一個人在解釋它,我想

移動彩虹移動彩虹Apr 13, 2025 am 11:27 AM

我絕對喜歡三明治網站的設計。在許多美麗的功能中,這些標題是滾動時帶有彩虹的下線。它不是

新年,新工作?讓我們做一個網格驅動的簡歷!新年,新工作?讓我們做一個網格驅動的簡歷!Apr 13, 2025 am 11:26 AM

許多流行的簡歷設計通過以網格形狀鋪設部分來充分利用可用的頁面空間。讓我們使用CSS網格創建一個佈局

將用戶擺脫過多習慣的一種方法將用戶擺脫過多習慣的一種方法Apr 13, 2025 am 11:25 AM

頁面重新加載是一回事。有時,當我們認為它沒有響應或認為新內容可用時,我們會刷新頁面。有時我們只是生氣

域驅動的設計與React域驅動的設計與ReactApr 13, 2025 am 11:22 AM

關於如何在React世界中組織前端應用的指導很少。 (只需移動文件,直到“感覺正確”,大聲笑)。真相

檢測非活動用戶檢測非活動用戶Apr 13, 2025 am 11:08 AM

大多數情況下,您並不真正在乎用戶是否積極參與或暫時非活動。不活躍,意思,也許他們

Wufoo ZapierWufoo ZapierApr 13, 2025 am 11:02 AM

Wufoo一直在集成方面非常出色。他們與特定應用程序(例如廣告系列顯示器,MailChimp和Typekit)進行集成,但他們也

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器