問題一:CSS有幾種引入方式? link 和@import
有什么區別?
1.外部樣式表
使用link標簽,將樣式寫在.css文件中,再以<link>標簽引入。
例如:<link rel="stylesheet" type="text/css" href="index.css">
rel
屬性定義當前文檔與被鏈接文檔之間的關系。stylesheet
是屬性對應的值,意為文檔的外部樣式表。
type="text/css"
告訴瀏覽器,這段標簽內包含css或text,如果瀏覽器不識別css,會將代碼識別成text.
2.內部樣式表
使用<style>標簽 ,樣式寫在<style></style>標簽中,注意的事內部樣式表寫在html的<head>內,只對所在網頁有效
<style type ="text/css">
p{color: red;}
</style>
3.內聯樣式
位于html元素內部,只對當前元素有效
<p style="color: #00f; font-size:1rem;">段落內容</p>
4.使用@import導入,也是樣式提前寫好在css文件中。
<head>
<style type="text/css">
@import "import.css"
</style>
</head>
link
和@import
有什么區別
不同點:
1.link是xhtml標簽,除了加載css外,還可以定義rss等;@import屬于css范疇,只能加載css。
2.link引用css時,在頁面載入時同時加載;@import需要頁面完全載入后加載。
3.link是xhtml標簽,沒有兼容問題;@import是在css2.1提出的,低版本瀏覽器不支持。
4.link支持使用javascript控制dom去改變樣式;而@import不支持。
問題二:列出你所知道的選擇器
1.基礎選擇器
*
通用元素選擇器:匹配頁面任何元素
#id
id選擇器:匹配特定id元素
.class
類選擇器:匹配class包含特定的元素
element
標簽選擇器
2.組合選擇器
.E,.F{ }
多元素選擇器:同時匹配 .E
和.F
元素
.E .F{}
派生選擇器:選擇e元素的所有后代f元素(如果不是子元素,向下遞歸)
.E>.F{ }
子元素選擇器:選擇E元素的所有直接子元素F
.E+.F
直接相鄰選擇器:匹配E元素之后的相鄰統計元素F
.E~.F
普通相鄰選擇器:匹配e元素之后的所有同級元素F(不論是否相鄰)
代碼
3.屬性選擇器
E[attr]
:匹配所有具有屬性為attr的元素(div[id]能選擇所有具有id屬性的div)
E[attr=value]
:匹配所有屬性為value的元素(div[type=text]匹配id=text的div)
E[attr~=value]
:匹配所有屬性attr具有多個空格分隔,其中一個值等于value的元素
E[attr ^=value]
:匹配屬性attr的值以value開頭的元素
E[attr $=value]
:匹配屬性attr的值以value結尾的元素
E[attr *=value]
:匹配屬性attr的值包含value的元素
4.偽類選擇器
E:first-child
:匹配元素E的第一個子元素
E:last-child
:匹配元素e的最后一個子元素
E:nth-child(n)
:匹配其父元素的第n個子元素,第一個編號為1
E:first-of-type
:匹配父元素下使用同種標簽的第一個子元素,等同于nth-of-type(1)
E:hover
:匹配鼠標懸停智商的e元素
E:focus
:匹配獲得焦點的e元素
代碼
5.偽元素選擇器
E::first-line
:匹配E元素的第一行
E::first-letter
:匹配E元素的第一個字母
E::before
:在e元素之前插入生成的內容
E::after
:在e元素之后插入生成的內容
問題三: a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么?
順序是 a:link>a:visited>a:hover>a:active ,總結縮寫是lvha,lv包,ha!
在CSS中,如果對于相同元素有針對不同條件的定義,宜將最一般的條件放在最上面,并依次向下,保證最下面的是最特殊的條件。
鼠標滑過的“未訪問鏈接”同時有a:link和a:hover 屬性,后面的屬性會覆蓋前面的屬性定義。同樣,滑過“已訪問鏈接”時候,hover屬性會覆蓋a:visited定義。a:hover要放在a:link和a:visited屬性后,否則看不到效果。同理,a:active代表鏈接被點擊的那一刻,按照行為先后應該放a:hover后面。
問題四:選擇器優先級是如何計算的?
從高到低是:
1.在屬性后面使用!important
會覆蓋頁面內任何位置定義的元素樣式
2.作為style屬性寫在標簽上的內聯樣式
3.id選擇器
4.類選擇器
5.偽類選擇器
6屬性選擇器
7.標簽選擇器
8.通配符選擇器(使用星號*表示,意思是“所有的”)
9.瀏覽器自定義
①作用的更具體的選擇器優先級越高
a:#parent p.class1
b:div #child.class1
<div id="parent">
<p id="child" class="class1">
Text
</p>
</div>
兩個選擇器作用的元素都是p標簽,id選擇器優先級最高,第一條規則作用在了父元素身上,第二條作用在p標簽上,所以第二條選擇器優先級高
②兩個選擇器優先級一樣,后面的覆蓋前面