1. class 和 id 的使用場景?
id:id選擇器,使用#name定義(name為id名),使用id="name"調用,一個標簽只能有一個id且每個id只能使用一次,多用于頁面分塊的塊級標簽上;
class:類選擇器,使用.name定義(name為類名,可任意取名),使用class="name"調用,一個標簽可以有多個類且同一個類可以用到不同的標簽上,多用于多個標簽樣式相似或完全相同時;
2. CSS選擇器常見的有幾種?
2.1 基礎選擇器
選擇器
含義
*
通用元素選擇器,匹配頁面任何元素(這也就決定了我們很少使用)
#id
id選擇器,匹配特定id的元素(整個HTML中ID不能有重復,唯一性)
.class
類選擇器,匹配class包含(不是等于)特定類的元素
element
標簽選擇器
2.2 組合選擇器
選擇器
含義
E,F
多元素選擇器,用,分隔,同時匹配元素E或元素F (既選中E,又選中F)
E F
后代選擇器,用空格分隔,匹配E元素所有的后代(不只是子元素、子元素向下遞歸)元素F (包括E元素的兄弟姐妹、兒子女兒、孫子孫女等等)
E>F
子元素選擇器,用>分隔,匹配E元素的所有直接子元素
E+F
直接相鄰選擇器,匹配E元素之后的相鄰的同級元素F (E是老大,則選中老二,E是老三,則選中老四)
E~F
普通相鄰選擇器(弟弟選擇器),匹配E元素之后的同級元素F(無論直接相鄰與否)
.class1.class2
id和class選擇器和選擇器連寫的時候中間沒有分隔符,. 和 # 本身充當分隔符的元素
element#id
id和class選擇器和選擇器連寫的時候中間沒有分隔符,. 和 # 本身充當分隔符的元素
2.3 屬性選擇器
選擇器
含義
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的元素
2.4 偽類選擇器
選擇器
含義
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)
匹配其父元素的倒數第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
匹配一個不包含任何子元素的元素,文本節點也被看作子元素
E:not(selector)
匹配不符合當前選擇器的任何元素
N的取值
1,2,3,4,5
2n+1, 2n, 4n-1
odd, even
2.5 偽元素選擇器
選擇器
含義
E::first-line
匹配E元素內容的第一行
E::first-letter
匹配E元素內容的第一個字母
E::before
在E元素之前插入生成的內容
E::after
在E元素之后插入生成的內容
3. 選擇器的優先級是怎樣的?對于復雜場景如何計算優先級?
3.1 選擇器的優先級(權重)由高到低如下:
在屬性后面使用 !important 會覆蓋頁面內任何位置定義的元素樣式
作為style屬性寫在元素標簽上的內聯樣式
id選擇器
類選擇器
偽類選擇器
屬性選擇器
標簽選擇器
通配符選擇器
瀏覽器自定義
3.2 復雜場景如何計算優先級
選擇器的特殊性分為四個部分,即 a,b,c,d,各代表如下:
行內樣式 <div style="xxx"></div> ==> a
ID 選擇器 ==> b
類,屬性選擇器和偽類選擇器 ==> c
標簽選擇器、偽元素 ==> d
那么每一個CSS的聲明均可分解為a,b,c,d,四部分,權重關系a>b>c>d,如果要比較兩個聲明哪個權重高,需按a到d的順序進行依次對比,a值大的相對權重高;如果a值相同,則比較b值,此時b值大的權重高;如果b值也相同,則比較c值...
如果選擇器相同,后定義的選擇器會覆蓋先定義的選擇器
4. a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么?
順序為 a:link, a:visited a:hover, a:active,
分析原因:偽類選擇器權重相同,后定義的選擇器會覆蓋先定義的選擇器。
未點擊鏈接前,link偽類處于激活狀態,鼠標懸停(或點擊)時,a鏈接同時處于link和hover(或active)狀態,由于它們特指度相同,
在同時激活的情況下,后出現的偽類樣式會覆蓋前面的偽類樣式,故link狀態必須寫在hover(或active)之前。
再討論hover和active的順序,若把hover放在active后面,當點擊鏈接一瞬,實際你在激活active狀態的同時觸發了hover偽類,hover在后面覆蓋了active的顏色,所以無法看到active的顏色。故hover在active之前
其次,若把visited放在hover后面,那已訪問過的鏈接一直觸發著visited偽類,會覆蓋hover樣式。
最后,其實link、visited兩個偽類之間順序無所謂。(因為它倆不可能同時觸發,即又未訪問同時又已訪問。)
5. 以下選擇器分別是什么意思?
#header{
} /* 選中ID="header"的元素 */
.header{
} /* 選中class="header"的元素 */
.header .logo{
} /* 選中class="header"的元素的后代元素中 class="logo"的元素 */
.header.mobile{
} /* 選中class="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" 的元素的后代元素中鼠標懸停其上的元素 */
#header .logo~p{
} /* 選中ID="header"的元素的后代元素中、與class="logo"的元素同級的p元素 */
#header input[type="text"]{
} /* 選中ID="header"的元素的后代元素中、input type為text的input元素 */
6. 列出你知道的偽類選擇器
選擇器
含義
E:first-child
匹配作為長子(第一個子女)的元素E
E:last-child
匹配父元素的最后一個子元素,等同于:nth-last-child(1)
E:nth-child(n)
匹配其父元素的第n個子元素,第一個編號為1
E:nth-last-child(n)
匹配其父元素的倒數第n個子元素,第一個編號為1
E:first-of-type
匹配父元素下使用同種標簽的第一個子元素,等同于:nth-of-type(1)
E:last-of-type
匹配父元素下使用同種標簽的最后一個子元素,等同于:nth-last-of-type(1)
E:nth-of-type(n)
與:nth-child()作用類似,但是僅匹配使用同種標簽的元素
E:nth-last-of-type(n)
與:nth-last-child() 作用類似,但是僅匹配使用同種標簽的元素
7. div:first-child、div:first-of-type、div :first-child和div :first-of-type的作用和區別 (注意空格的作用)
div:first-child
與div同級的元素中的第一個元素,且這個元素為div
div:first-of-type
div父元素中第一個使用div的標簽
div :first-child
div元素下的第一個子元素
div :first-of-type
div元素下所有的同類型的第一個元素
8. 運行如下代碼,解析下輸出樣式的原因
<style>
.item1:first-child{
color: red;
} /* 選中class="iterm1"的第一個子元素,故 <p class="item1">aa</p>被選中 */
.item1:first-of-type{
background: blue;
} /* 選中id為item1的父元素下每種類型的第一個子元素,即 <p class="item1">aa</p>和 <h3 class="item1">bb</h3>被選中,*/
</style>
<div class="ct">
<p class="item1">aa</p>
<h3 class="item1">bb</h3>
<h3 class="item1">ccc</h3>
</div>
最后編輯于 :2017.12.07 02:52:38
?著作權歸作者所有,轉載或內容合作請聯系作者 平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。