問題一:CSS有幾種引入方式? link 和@import 有什么區(qū)別?
css一共有4種引入方式:
- 內(nèi)聯(lián)樣式
<h1 style="color: red; font-size: 20px;"></h1> - 內(nèi)部樣式
<style type="text/css">h1
{width:100px;
height:100px;
border:1px solid #000;}
</style>
<h1>標(biāo)題</h1> - 外部樣式
<head> <link rel="stylesheet" type="text/css" href="xxx.css"> </head> - @import方式引用外部樣式表
<style> @import url("hello.css"); @import "world.css"; </style>
link 和@import 有什么區(qū)別?
差別1:老祖宗的差別。link屬于XHTML標(biāo)簽,而@import完全是CSS提供的一種方式。
link標(biāo)簽除了可以加載CSS外,還可以做很多其它的事情,比如定義RSS,定義rel連接屬性等,@import就只能加載CSS了。
差別2:加載順序的差別。當(dāng)一個(gè)頁面被加載的時(shí)候(就是被瀏覽者瀏覽的時(shí)候),link引用的CSS會(huì)同時(shí)被加載,而@import引用的CSS 會(huì)等到頁面全部被下載完再被加載。所以有時(shí)候?yàn)g覽@import加載CSS的頁面時(shí)開始會(huì)沒有樣式(就是閃爍),網(wǎng)速慢的時(shí)候還挺明顯(夢之都加載CSS 的方式就是使用@import,我一邊下載一邊瀏覽夢之都網(wǎng)頁時(shí),就會(huì)出現(xiàn)上述問題)。
差別3:兼容性的差別。由于@import是CSS2.1提出的所以老的瀏覽器不支持,@import只有在IE5以上的才能識(shí)別,而link標(biāo)簽無此問題。
問題二列出你所知道的選擇器
基礎(chǔ)選擇器:
*:通用元素選擇器,匹配頁面內(nèi)所有元素
#id:id選擇器,匹配特定id的元素
.class:類選擇器,匹配class包含的(不等于)特定類的元素
element:標(biāo)簽選擇器
組合選擇器
E,F:多元素選擇器,用,分隔,同時(shí)匹配元素E或元素F。
E F:后代選擇器,用空格分隔,匹配E元素所有的后代(不只是子元素、子元素向下遞歸)元素F
E>F:子元素選擇器,用>分隔,匹配E元素的所有直接子元素
E+F:直接相鄰選擇器,匹配E元素之后的相鄰的同級(jí)元素F
E~F:普通相鄰選擇器(弟弟選擇器),匹配E元素之后的同級(jí)元素F(無論直接相鄰與否)
.class1.class2:id和class選擇器和選擇器連寫的時(shí)候中間沒有分隔符,.和 #本身充當(dāng)分隔符的元素
element#id:id和class選擇器和選擇器連寫的時(shí)候中間沒有分隔符,.和 #本身充當(dāng)分隔符的元素
屬性選擇器
E[attr]:匹配所有具有屬性attr的元素,div[id]就能取到所有有id屬性的div
E[attr = value]:匹配屬性attr值為value的元素
偽類選擇器
E:first-child:匹配元素E的第一個(gè)子元素
E:link:匹配所有未被點(diǎn)擊的鏈接
E:visited:匹配所有已被點(diǎn)擊的鏈接
E:active:匹配鼠標(biāo)已經(jīng)其上按下、還沒有釋放的E元素
E:hover:匹配鼠標(biāo)懸停其上的E元素
E:focus:匹配獲得當(dāng)前焦點(diǎn)的E元素
E:lang(c):匹配lang屬性等于c的E元素
E:enabled:匹配表單中可用的元素
E:disabled:匹配表單中禁用的元素
E:checked:匹配表單中被選中的radio或checkbox元素
E::selection:匹配用戶當(dāng)前選中的元素
E:root:匹配文檔的根元素,對(duì)于HTML文檔,就是HTML元素
E:nth-child(n):匹配其父元素的第n個(gè)子元素,第一個(gè)編號(hào)為1
E:nth-last-child(n):匹配其父元素的倒數(shù)第n個(gè)子元素,第一個(gè)編號(hào)為1
E:nth-of-type(n):與:nth-child()作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:nth-last-of-type(n):與:nth-last-child() 作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:last-child:匹配父元素的最后一個(gè)子元素,等同于:nth-last-child(1)
E:first-of-type:匹配父元素下使用同種標(biāo)簽的第一個(gè)子元素,等同于:nth-of-type(1)
E:last-of-type:匹配父元素下使用同種標(biāo)簽的最后一個(gè)子元素,等同于:nth-last-of-type(1)
E:only-child:匹配父元素下僅有的一個(gè)子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1)
E:only-of-type:匹配父元素下使用同種標(biāo)簽的唯一一個(gè)子元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
E:empty:匹配一個(gè)不包含任何子元素的元素,文本節(jié)點(diǎn)也被看作子元素
E:not(selector):匹配不符合當(dāng)前選擇器的任何元素
E::first-line:匹配E元素內(nèi)容的第一行
E::first-letter:匹配E元素內(nèi)容的第一個(gè)字母
E::before:在E元素之前插入生成的內(nèi)容
E::after:在E元素之后插入生成的內(nèi)容
問題三:a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么?
a:link, a:hover, a:active, a:visited 的順序是a:link; a:visited;a:hover, a:active
原理是:當(dāng)選擇器的優(yōu)先級(jí)相等時(shí),寫在后面的會(huì)覆蓋前面的。
當(dāng)鼠標(biāo)經(jīng)過鏈接時(shí),同時(shí)擁有a link和a hover倆個(gè)屬性,遵從原理,a hover將覆蓋alink;當(dāng)鼠標(biāo)經(jīng)過已訪問的鏈接時(shí),a hover屬性將覆蓋a visited定義;當(dāng)鼠標(biāo)已經(jīng)按下鏈接,則a visited將覆蓋所有屬性。
計(jì)算選擇器的優(yōu)先級(jí):
1.先設(shè)定初始值:0,0,0,0,0
2.加了!improtant,在第一位加1:1,0,0,0,0
3.內(nèi)聯(lián)樣式在第二位加1:0,1,0,0,0
4.id選擇器為第三位加1:0,0,1,0,0
5.類選擇器在第四位加1:0,0,0,1,0
6.偽類和屬性選擇器與類選擇器一樣:0,0,0,1,0
7.標(biāo)簽選擇器在第五位加1:0,0,0,0,1
!important是將對(duì)應(yīng)選擇器的優(yōu)先級(jí)設(shè)置為最高級(jí),覆蓋所有屬性。計(jì)算優(yōu)先級(jí)時(shí)通過數(shù)標(biāo)簽來計(jì)算,先數(shù)id,如果id相等再數(shù)類,如果id不相等,id多的選擇器權(quán)重高,權(quán)重越高,優(yōu)先級(jí)越高。如果id選擇器數(shù)量相同,再數(shù)類選擇器,最后數(shù)標(biāo)簽。依次類推