CSS 概述
CSS 指層疊樣式表 (Cascading Style Sheets),樣式定義瞭如何顯示 HTML文件中的標籤元素,CSS是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的計算機語言。CSS不只能夠靜態地修飾網頁,還能夠配合各類腳本語言動態地對網頁各元素進行格式化。css
CSS語法html
CSS 規則由兩個主要的部分構成:選擇器,以及一條或多條聲明。瀏覽器
selector1{ property: value; property: value; property: value; } selector2{ property: value; property: value; property: value; }
示例:網絡
h1{
color:red;
font-size:14px;
}
CSS引入方法ide
行內式佈局
行內式是在標記的style屬性中設定CSS樣式。這種方式沒有體現出CSS的優點,不推薦使用。測試
<div style="color: red; line-height: 1.5 !important;">>DIV</div>
嵌入式spa
嵌入式是將CSS樣式集中寫在網頁的<head></head>標籤對的<style></style>標籤對中。code
<head> <style> div{ color: red; font-size: 30px; font-weight: 800; } p{ color: aqua; background-color: bisque; } </style> </head>
連接式htm
將一個.css文件引入到HTML文件中,如定義文件csstest.css
/*csstest.css,註釋行*/ /*該文件內爲純粹的CSS樣式代碼,不須要style標籤聲明*/ div{ color: red; font-size: 30px; font-weight: 800; } p{ color: aqua; background-color: bisque; }
示例:
<link rel="stylesheet" href="csstest.css" type="text/css">
導入式
相似於連接式,都是導入外部的css文件
<head> <style> @import "csstest.css"; </style> </head>
注意:導入式會在整個網頁裝載完後再裝載CSS文件,所以若是網頁比較大或網絡不穩定則會兒出現先顯示無樣式的頁面,閃爍一下以後,再出現網頁的樣式。這是導入式固有的一個缺陷。使用連接式時與導入式不一樣的是它會以網頁文件主體裝載前裝載CSS文件,所以顯示出來的網頁從一開始就是帶樣式的效果的,這是連接式的優勢。
CSS選擇器-基本選擇器
基本選擇器包括:標籤選擇器、id選擇器、class選擇器、通配選擇器
標籤選擇器
按照標籤名字進行匹配,上述的嵌入式、連接式和導入式使用的css代碼所使用的選擇器就是標籤選擇器,會匹配html文件中全部的div標籤和p標籤進行樣式渲染。
id選擇器
按照標籤的id進行匹配,將匹配到的id進行渲染,每一個html文件中的id在根本上就禁止衝突,因此id是惟一的,因此一條css聲明只能匹配一個id
示例:
<head> <style> /*id選擇器*/ p2{ background-color: red; } </style> </head> <body> <p id="p2">I am P</p> </body>
class選擇器
同id選擇器,只不過是將id名字改爲class名字,類不惟一,因此可以匹配多條
示例:
<head>
<style> /*類選擇器*/ .p_ele{ background-color: bisque; } </style> </head> <body> <div class="p_ele">我是第一個p_ele類</div> <div class="p_ele">我是第二個p_ele類</div> </body>
通配選擇器
匹配全部的html文件中的標籤元素
示例:
<head> <style> /*通用選擇器*/ *{ background-color: green; } </style> </head> <body> <p id="p2">I am P</p> <div class="p_ele">我是第一個p_ele類</div> <div class="p_ele">我是第二個p_ele類</div> <p>I am P2</p> </body>
CSS選擇器-組合選擇器
包括:多元素選擇器、後代選擇器、子代選擇器、毗鄰選擇器、普通兄弟選擇器
後代選擇器
<!DOCTYPE html> <html lang="en"> <head> <style> /*後代選擇器,指定了一個標籤,匹配它下面的全部元素*/ .outer p{ color: red; } </style> </head> <body> <div class="outer"> <p>p1</p> <div class="inner"> <p>p2</p> </div> <p class="p3">p3</p> <p>p4</p> </div> <p>p5</p> <div> <p>p6</p> </div> </body>
子代選擇器
<!DOCTYPE html> <html lang="en"> <head> <style> /*子代選擇器,指定一個標籤,匹配該標籤下面的第一級子標籤進行匹配渲染*/ .outer > p{ color: red; } </style> </head> <body> <div class="outer"> <p>p1</p> <div class="inner"> <p>p2</p> </div> <p class="p3">p3</p> <p>p4</p> </div> <p>p5</p> <div> <p>p6</p> </div> </body>
多元素選擇器
<head> <style> /*多元素選擇器,匹配包括.inner p(後代)或.p3的元素*/ .inner p, .p3{ color: red; } </style> </head> <body> <div class="outer"> <p>p1</p> <div class="inner"> <p>p2</p> </div> <p class="p3">p3</p> <p>p4</p> </div> <p>p5</p> <div> <p>p6</p> </div> </body>
毗鄰選擇器
<head> <style> /*不經常使用*/ /*毗鄰選擇器,匹配同級的下面一個標籤,只會向下找,不會向上找*/ .outer+p{ color: red; } </style> </head> <body> <div class="outer"> <p>p1</p> <div class="inner"> <p>p2</p> </div> <p class="p3">p3</p> <p>p4</p> </div> <p>p5</p> <div> <p>p6</p> </div> </body>
普通兄弟選擇器
<head> <style> /*不經常使用*/ /*普通兄弟選擇器,匹配同級的全部元素,只能向下,不能向上匹配*/ .outer~p{ color: red; } </style> </head> <body> <div class="outer"> <p>p1</p> <div class="inner"> <p>p2</p> </div> <p class="p3">p3</p> <p>p4</p> </div> <p>p5</p> <div> <p>p6</p> </div> </body>
補充
<head> <style> /*補充,精確匹配,匹配ul標籤包含.item類的*/ ul.item{ color: red; } </style> </head> <body> <ul class="item"> <li>111</li> <li>111</li> <li>111</li> <li>111</li> </ul> <ol class="item"> <li>222</li> <li>222</li> <li>222</li> <li>222</li> </ol> <ul> <li>333</li> <li>333</li> <li>333</li> <li>333</li> </ul> </body>
注意,關於標籤嵌套:
通常,塊級元素能夠包含內聯元素或某些塊級元素,但內聯元素不能包含塊級元素,它只能包含其它內聯元素。須要注意的是,p標籤不能包含塊級標籤。
CSS選擇器-屬性選擇器
標籤中的屬性能夠本身定義,定義的屬性能夠沒有任何功能,只是爲了進行匹配查詢
匹配全部帶有指定屬性的元素
<head> <style>
div[sha]{ background-color:red; } </style> </head> <body> <div class="item1 item2">DIV1</div> <div class="C2" id="D2">DIV2</div> <div>sha</div> <div sha="alex">sha jiejie</div> <div sha="yuan alvin">sha jiejie</div> <div sha="123">sha gg</div> </body>
匹配全部指定的key:value的元素
<head> <style> div[sha='alex']{ background-color: green; } </style> </head> <body> <div class="item1 item2">DIV1</div> <div class="C2" id="D2">DIV2</div> <div>sha</div> <div sha="alex">sha jiejie</div> <div sha="yuan alvin">sha jiejie</div> <div sha="123">sha gg</div> </body>
匹配一個屬性有多個值,只包含其中一個值的屬性
<head> <style> div[class~='item1']{ background-color: blue; } </style> </head> <body> <div class="item1 item2">DIV1</div> <div class="C2" id="D2">DIV2</div> <div>sha</div> <div sha="alex">sha jiejie</div> <div sha="yuan alvin">sha jiejie</div> <div sha="123">sha gg</div> </body>
匹配屬性值以某個字符串開頭的元素
<head> <meta charset="UTF-8"> <title>Title</title> <style> div[sha^='1']{ background-color: blue; } </style> </head> <body> <div class="item1 item2">DIV1</div> <div class="C2" id="D2">DIV2</div> <div>sha</div> <div sha="alex">sha jiejie</div> <div sha="yuan alvin">sha jiejie</div> <div sha="123">sha gg</div> </body>
匹配屬性值以某個字符串結尾的元素
<head> <style> div[sha$='3']{ background-color: blue; } </style> </head> <body> <div class="item1 item2">DIV1</div> <div class="C2" id="D2">DIV2</div> <div>sha</div> <div sha="alex">sha jiejie</div> <div sha="yuan alvin">sha jiejie</div> <div sha="123">sha gg</div> </body>
匹配屬性值中包含某個字符串的元素
<head> <style> div[sha*='2']{ background-color: blue; } </style> </head> <body> <div class="item1 item2">DIV1</div> <div class="C2" id="D2">DIV2</div> <div>sha</div> <div sha="alex">sha jiejie</div> <div sha="yuan alvin">sha jiejie</div> <div sha="123">sha gg</div> </body>
CSS選擇器-僞類選擇器
僞類:僞類指的是標籤的不通的狀態
anchor僞類
專用於控制連接的顯示效果
<head> <style> a:link{ /*默認的連接顏色,沒有點擊過的狀態*/ color: green; } a:hover{ /*鼠標放到超連接上變色,放到超連接上的狀態*/ color: goldenrod; } a:active{ /*點擊後,即訪問的時候變色,點擊的狀態*/ color: blue; } a:visited{ /*超連接訪問成功過一次後變色,訪問後的狀態*/ color: red; } </style> </head> <body> <a href="#">URL</a> /*井號爲不跳轉頁面,只爲當前測試使用*/ </body>
注:hover並非連接專有的屬性
<head> <style> .a{ height: 100px; width: 400px; background-color: blue; } .b{ height: 200px; width: 200px; background-color: gold; } .all{ width: 1000px; border: 1px solid red; } /*當鼠標放到.all類的div範圍內,.a的div變色,注意操做的標籤必定是被包含在內的子元素*/ .all:hover .a{ background-color: bisque; } /*.b:hover .a{*/ /*background-color: plum;*/ /*}*/ </style> </head> <body> <div class="all"> <div class="a">AAAAAAAAA</div> <div class="b">BBBBBBBBB</div> </div> </body>
before/after僞類
:before 在元素以前插入內容
:after 在元素以後插入內容
<head> <style> div:before{ content:"hello"; /*插入的值*/ color:red; display: block; /*設置爲塊級*/ } p:after{ /*默認爲內聯*/ content:"byby"; /*插入的值*/ color:blue; } </style> </head> <body> <div>divdiv</div> <p>hi</p> </body>
通常用於佈局使用
選擇器優先級
優先級
所謂CSS優先級,便是指CSS樣式在瀏覽器中被解析的前後順序。
樣式表中的特殊性描述了不一樣規則的相對權重,它的基本規則是:
1 內聯樣式表的權值最高 style=""------------1000
2 統計選擇符中的ID屬性個數。 #id --------------100
3 統計選擇符中的CLASS屬性個數。 .class -------------10
4 統計選擇符中的HTML標籤名個數。 p ---------------1
按這些規則將數字符串逐位相加,就獲得最終的權重,而後在比較取捨時按照從左到右的順序逐位比較。
示例:能夠再加一個行內式測試
<head> <style> p{ color: red; } #d1{ color: gold; } .c1{ color: green; } </style> </head> <body> <p class="c1" id="d1">PPP</p> </body>
1 文內的樣式優先級爲1,0,0,0,因此始終高於外部定義。 2 有!important聲明的規則高於一切。 3 若是!important聲明衝突,則比較優先權。 4 若是優先權同樣,則按照在源碼中出現的順序決定,後來者居上。 5 由繼承而獲得的樣式沒有specificity的計算,它低於一切其它規則(好比全局選擇符*定義的規則)。
.c1{ color: red!important; /*無敵的聲明*/ }
繼承
繼承是CSS的一個主要特徵,它是依賴於祖先-後代的關係的。繼承是一種機制,它容許樣式不只能夠應用於某個特定的元素,還能夠應用於它的後代。
<head> <style> .c2{ color: red; } </style> </head> <body> <div class="c2"> <div> <p>P4</p> </div> </div> </body>