關于CSS選擇器

class 和 id 的使用場景?

  • class 和 id 有什么區(qū)別
  1. class是設置標簽的類, class屬性用于指定元素屬于何種樣式的類;
  2. id是設置標簽的標識。id屬性用于定義一個元素的獨特的樣式。
  3. class是一個樣式,先定義好, 然后可以套給多個結構/內容, 便于復用。也就是說class名稱可以相同。
  4. id是一個標簽,用于區(qū)分不同的結構和內容,就象你的名字, 如果一個屋子有2個人同名,就會出現(xiàn)混淆;id是先找到結構/內容,再給它定義樣式;
  5. id的優(yōu)先級要高于class
  • 那么什么時候用 class 什么時候用 id呢
    • 單一的元素,或需要程序、JS控制的東西,需要用id定義;重復使用的元素、類別,用class定義。
    • 如果在頁面中要對某個對象進行腳本操作(js),那么可以給他定義一個id,否則只能利用遍歷頁面元素加上指定特定屬性來找到它,這是相對浪費時間資源,遠遠不如一個id來得簡單.

CSS選擇器常見的有幾種?

  • 基礎選擇器

選擇器     含義
 *         通用元素選擇器,匹配頁面任何元素(這也就決定了我們很少使用)
#id       id選擇器,匹配特定id的元素
.class    類選擇器,匹配class包含(不是等于)特定類的元素
element   標簽選擇器
  • 組合選擇器

選擇器           含義
E,F             多元素選擇器,用,分隔,同時匹配元素E或元素F
E F             后代選擇器,用空格分隔,匹配E元素所有的后代(不只是子元素、子元素向下遞歸)元素F
E>F             子元素選擇器,用>分隔,匹配E元素的所有直接子元素
E+F             直接相鄰選擇器,匹配E元素之后的相鄰的同級元素F
E~F             普通相鄰選擇器(弟弟選擇器),匹配E元素之后的同級元素F(無論直接相鄰與否)
.class1.class2  id和class選擇器和選擇器連寫的時候中間沒有分隔符,. 和 # 本身充當分隔符的元素
element#id   id和class選擇器和選擇器連寫的時候中間沒有分隔符,. 和 # 本身充當分隔符的元素
  • 屬性選擇器

選擇器                 含義
E[attr]              匹配所有具有屬性attr的元素,div[id]就能取到所有有id屬性的div
E[attr = value]      匹配屬性attr值為value的元素,div[id=test],匹配id=test的div
E[attr ~= value]    匹配所有屬性attr具有多個空格分隔、其中一個值等于value的元素
E[attr ^= value]    匹配屬性attr的值以value開頭的元素
E[attr $= value]    匹配屬性attr的值以value結尾的元素
E[attr *= value]    匹配屬性attr的值包含value的元素
  • 偽類選擇器

選擇器                含義
E:first-child         匹配元素E的第一個子元素
E:link                匹配所有未被點擊的鏈接
E:visited             匹配所有已被點擊的鏈接
E:active              匹配鼠標已經其上按下、還沒有釋放的E元素
E:hover               匹配鼠標懸停其上的E元素
E:focus               匹配獲得當前焦點的E元素
E:lang(c)             匹配lang屬性等于c的E元素
E:enabled             匹配表單中可用的元素
E:disabled            匹配表單中禁用的元素
E:checked             匹配表單中被選中的radio或checkbox元素
E::selection          匹配用戶當前選中的元素
E:root                匹配文檔的根元素,對于HTML文檔,就是HTML元素
E:nth-child(n)        匹配其父元素的第n個子元素,第一個編號為1
E:nth-last-child(n)   匹配其父元素的倒數(shù)第n個子元素,第一個編號為1
E:nth-of-type(n)      與:nth-child()作用類似,但是僅匹配使用同種標簽的元素
E:nth-last-of-type(n) 與:nth-last-child() 作用類似,但是僅匹配使用同種標簽的元素
E:last-child          匹配父元素的最后一個子元素,等同于:nth-last-child(1)
E:first-of-type       匹配父元素下使用同種標簽的第一個子元素,等同于:nth-of-type(1)
E:last-of-type        匹配父元素下使用同種標簽的最后一個子元素,等同于:nth-last-of-type(1)
E:only-child          匹配父元素下僅有的一個子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1)
E:only-of-type        匹配父元素下使用同種標簽的唯一一個子元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
E:empty               匹配一個不包含任何子元素的元素,文本節(jié)點也被看作子元素
E:not(selector)       匹配不符合當前選擇器的任何元素
  • 偽元素選擇器

選擇器             含義
E::first-line   匹配E元素內容的第一行
E::first-letter   匹配E元素內容的第一個字母
E::before       在E元素之前插入生成的內容
E::after         在E元素之后插入生成的內容

選擇器的優(yōu)先級是怎樣的?對于復雜場景如何計算優(yōu)先級?

選擇器優(yōu)先級

  • 從高到低分別是

    1. 在屬性后面使用 !important 會覆蓋頁面內任何位置定義的元素樣式
    2. 作為style屬性寫在元素標簽上的內聯(lián)樣式
    3. id選擇器
    4. 類選擇器
    5. 偽類選擇器
    6. 屬性選擇器
    7. 標簽選擇器
    8. 通配符選擇器
    9. 瀏覽器自定義
  • 復雜場景

  #test p.class1 {...}
  #test .class1.class2 {...}
行內樣式 <div style="xxx"></div> ==> a
ID 選擇器 ==> b
類,屬性選擇器和偽類選擇器 ==> c
標簽選擇器、偽元素 ==> d

小測試

*             {}  /* a=0 b=0 c=0 d=0 -> 0,0,0,0 */
p             {}  /* a=0 b=0 c=0 d=1 -> 0,0,0,1 */
a:hover       {}  /* a=0 b=0 c=1 d=1 -> 0,0,1,1 */
ul li         {}  /* a=0 b=0 c=0 d=2 -> 0,0,0,2 */
ul ol+li      {}  /* a=0 b=0 c=0 d=3 -> 0,0,0,3 */
h1+input[type=hidden]{}  /* a=0 b=0 c=1 d=2 -> 0,0,1,1 */
ul ol li.active   {}  /* a=0 b=0 c=1 d=3 -> 0,0,1,3 */
#ct .box p        {}  /* a=0 b=1 c=1 d=1 -> 0,1,1,1 */
div#header:after  {}  /* a=0 b=1 c=0 d=2 -> 0,1,0,2 */
style=""          /* a=1 b=0 c=0 d=0 -> 1,0,0,0 */

從a開始看,誰數(shù)值越大優(yōu)先級越高;如果a數(shù)值一樣,接著看b,如此類推。

選擇器使用經驗
遵守 CSS 書寫規(guī)范
使用合適的命名空間
合理的復用class


a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么?

  • 正確順序
  1. a:link
  2. a:visited
  3. a:hover
  4. a:active

因為 a:visited 在鏈接點擊過一次之后永久生效,如果放在最后會覆蓋掉其他的樣式,在鏈接訪問過一次之后 a:hover 和 a:active 樣式都會被覆蓋。

以下選擇器分別是什么意思?

#header{}                            /* id為header的元素 */
.header{}                            /* class為header的元素 */
.header .logo{}                      /* class為header的元素下子元素Class為logo的元素 */
.header.mobile{}                     /* 類名包含header和mobile的元素,如class = 'header mobile' */
.header p, .header h3{}              /* class為header下的子元素p標簽 和 class為header的子元素的h3標簽 */
#header .nav>li{}                    /* id為header下的子元素class為nav的元素下的直接子元素的li標簽 */
#header a:hover{}                    /* id為header下的子元素a標簽在hover狀態(tài)(鼠標懸停)下的樣式 */
#header .logo~p{}                    /* id為header下的子元素class為logo的同級元素中為p標簽的元素 */
#header input[type="text"]{}         /* id為header下的子元素input標簽的type屬性為text的元素 */

列出你知道的偽類選擇器

選擇器               含義
E:first-child     匹配元素E的第一個子元素
E:link           匹配未被點擊的鏈接
E:visited         匹配點擊過的鏈接
E:active           匹配當前被鼠標點下未釋放的元素
E:hover             匹配鼠標懸停其上的元素
E:focus             匹配當前獲得焦點的元素
E:lang(c)           匹配lang屬性值等于c的元素
E:enabled         匹配表單中可用的元素
E:disabled       匹配表單中禁用的元素
E:checked         匹配表單中被選中的radio或checkbook元素
E:selection         匹配當前用戶選中的元素
E:first-of-type     匹配父元素下使用同種標簽的第一個子元素
E:first-child     匹配父元素下第一個子元素

div:first-child和div:first-of-type的作用和區(qū)別

  • div:first-child —— 選擇div標簽的父元素下的第一個子元素(類型為div),通俗的講就是長子div。
  • div:first-of-type —— 選擇div標簽的父元素的div類型的第一個元素。

運行如下代碼,解析下輸出樣式的原因。

<style>
.item1:first-child{
  color: red;
}
.item1:first-of-type{
  background: blue;
}
</style>
 <div class="ct">
   <p class="item1">aa</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>
jsbin代碼.png
代碼結果.png

.item1:first-child{ color: red; }

  • 這段代碼的意思是選擇class為item1的元素的父元素下的第一個class為item1的子元素
  • 滿足條件的是class為item1的p標簽。

.item1:first-of-type{ background: blue; }

  • 這段代碼的意思是選擇所有class為item1的元素的相同元素類型中第一個出現(xiàn)的元素。
  • 滿足條件的有第一個class為item1的p標簽 和 第一個class為item1的h3標簽。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • class和id的使用場景? class為一類的元素命名,所有有共同特性的元素都可以用同一class進行分類;id...
    LeeoZz閱讀 442評論 0 0
  • 1、class和id的使用場景分別是什么? 首先,一個HTML文件中class名字可以有多個相同的,但是id的名字...
    李博洋li閱讀 1,033評論 0 1
  • 1.class 和 id 的使用場景? 類選擇器允許以一種獨立于文檔元素的方式來指定樣式。該選擇器可以單獨使用,也...
    草鞋弟閱讀 2,560評論 0 1
  • 1.class 和 id 的使用場景? 兩者都能選取DOM節(jié)點并給DOM節(jié)點添加樣式,但是W3C標準里規(guī)定頁面中只...
    饑人谷_米彌輪閱讀 511評論 0 1
  • 1.class 和 id 的使用場景? class:類選擇器,一個標簽可以有多個類且同一個類可以用到不同的標簽上,...
    饑人谷_兔子君閱讀 1,282評論 0 0

友情鏈接更多精彩內容