CSS筆記

派生選擇器

通過依據元素在其位置的上下文關係來定義樣式,你可以使標記更加簡潔。
li strong {
font-style: italic;
font-weight: normal;
}
li下面的strong會有後面的屬性

id選擇器

id 選擇器以 "#" 來定義。
下面的兩個 id 選擇器,第一個可以定義元素的顏色爲紅色,第二個定義元素的顏色爲綠色:

red {color:red;}

green {color:green;}

在現代佈局中,id 選擇器常常用於建立派生選擇器。

sidebar p {

font-style: italic;
text-align: right;
margin-top: 0.5em;
}

即使被標註爲 sidebar 的元素只能在文檔中出現一次,這個 id 選擇器作爲派生選擇器也可以被使用很多次:

sidebar p {

font-style: italic;
text-align: right;
margin-top: 0.5em;
}

sidebar h2 {

font-size: 1em;
font-weight: normal;
font-style: italic;
margin: 0;
line-height: 1.5;
text-align: right;
}

類選擇器

類選擇器以一個點號顯示:
.center {text-align: center}

和 id 一樣,class 也可被用作派生選擇器:

.fancy td {
color: #f60;
background: #666;
}

元素也可以基於它們的類而被選擇:

td.fancy {
color: #f60;
background: #666;
}
class 爲 fancy 的段落也不會是帶有灰色背景的橙色,當然,任何其他被標註爲 fancy 的元素也不會受這條規則的影響。這都是由於我們書寫這條規則的方式,這個效果被限制於被標註爲 fancy 的表格單元(即使用 td 元素來選擇 fancy 類)

下面的例子爲帶有 title 屬性的所有元素設置樣式:
[title]
{
color:red;
}

爲 title="W3School" 的所有元素設置樣式:
[title=W3School]
{
border:5px solid blue;
}

爲包含指定值的 title 屬性的所有元素設置樣式。適用於由空格分隔的屬性值:
[title~=hello] { color:red; }

屬性選擇器在爲不帶有 class 或 id 的表單設置樣式時特別有用:
input[type="text"]
{
width:150px;
display:block;
margin-bottom:10px;
background-color:yellow;
font-family: Verdana, Arial;
}

input[type="button"]
{
width:120px;
margin-left:35px;
display:block;
font-family: Verdana, Arial;
}

鏈接的四種狀態:

a:link - 普通的、未被訪問的鏈接
a:visited - 用戶已訪問的鏈接
a:hover - 鼠標指針位於鏈接的上方
a:active - 鏈接被點擊的時刻
實例
a:link {color:#FF0000;} /* 未被訪問的鏈接 /
a:visited {color:#00FF00;} /
已被訪問的鏈接 /
a:hover {color:#FF00FF;} /
鼠標指針移動到鏈接上 /
a:active {color:#0000FF;} /
正在被點擊的鏈接 */

當爲鏈接的不同狀態設置樣式時,請按照以下次序規則:

a:hover 必須位於 a:link 和 a:visited 之後
a:active 必須位於 a:hover 之後

CSS 定位機制

CSS 有三種基本的定位機制:普通流、浮動和絕對定位。
塊級框從上到下一個接一個地排列,框之間的垂直距離是由框的垂直外邊距計算出來。
行內框在一行中水平佈置。可以使用水平內邊距、邊框和外邊距調整它們的間距。但是,垂直內邊距、邊框和外邊距不影響行內框的高度。由一行形成的水平框稱爲行框(Line Box),行框的高度總是足以容納它包含的所有行內框。不過,設置行高可以增加這個框的高度。

z-index結合定位,將元素放置在另一元素之前或之後
<html>
<head>
<style type="text/css">
img.x
{
position:absolute;
left:0px;
top:0px;
z-index:1
}
</style>
</head>
<body>
<h1>這是一個標題</h1>
<img class="x" src="/i/eg_mouse.jpg" />
<p>默認的 z-index 是 0。Z-index 1 擁有更高的優先級。</p>
</body>
</html>

相對定位

在使用相對定位時,無論是否進行移動,元素仍然佔據原來的空間。因此,移動元素會導致它覆蓋其它框。

box_relative {

position: relative;
left: 30px;
top: 20px;
}

絕對定位

絕對定位使元素的位置與文檔流無關,因此不佔據空間。這一點與相對定位不同,相對定位實際上被看作普通流定位模型的一部分,因爲元素的位置相對於它在普通流中的位置。

box_relative {

position: absolute;
left: 30px;
top: 20px;
}

相對定位是“相對於”元素在文檔中的初始位置,而絕對定位是“相對於”最近的已定位祖先元素,如果不存在已定位的祖先元素,那麼“相對於”最初的包含塊。
因爲絕對定位的框與文檔流無關,所以它們可以覆蓋頁面上的其它元素。可以通過設置 z-index 屬性來控制這些框的堆放次序。

浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框爲止。

由於浮動框不在文檔的普通流中,所以文檔的普通流中的塊框表現得就像浮動框不存在一樣。

CSS 元素選擇器

最常見的 CSS 選擇器是元素選擇器。換句話說,文檔的元素就是最基本的選擇器。
如果設置 HTML 的樣式,選擇器通常將是某個 HTML 元素,比如 p、h1、em、a,甚至可以是 html 本身。

在 W3C 標準中,元素選擇器又稱爲類型選擇器(type selector)。
“類型選擇器匹配文檔語言元素類型的名稱。類型選擇器匹配文檔樹中該元素類型的每一個實例。”

選擇器分組

假設希望 h2 元素和段落都有灰色。爲達到這個目的,最容易的做法是使用以下聲明:
h2, p {color:gray;}

通配符選擇器

CSS2 引入了一種新的簡單選擇器 - 通配選擇器(universal selector),顯示爲一個星號(*)。該選擇器可以與任何元素匹配,就像是一個通配符。
例如,下面的規則可以使文檔中的每個元素都爲紅色:

  • {color:red;}

聲明分組

我們既可以對選擇器進行分組,也可以對聲明分組。
h1 {font: 28px Verdana; color: white; background: black;}

類選擇器

.important {color:red;}
結合元素
p.important {color:red;}

CSS 多類選擇器
<p class="important warning">
This paragraph is a very important warning.
</p>
.important {font-weight:bold;}
.warning {font-style:italic;}
.important.warning {background:silver;}

CSS ID 選擇器

intro {font-weight:bold;}

類選擇器還是 ID 選擇器?

在類選擇器這一章中我們曾講解過,可以爲任意多個元素指定類。前一章中類名 important 被應用到 p 和 h1 元素,而且它還可以應用到更多元素。

區別 1:只能在文檔中使用一次
與類不同,在一個 HTML 文檔中,ID 選擇器會使用一次,而且僅一次。

區別 2:不能使用 ID 詞列表
不同於類選擇器,ID 選擇器不能結合使用,因爲 ID 屬性不允許有以空格分隔的詞列表。

區別 3:ID 能包含更多含義
類似於類,可以獨立於元素來選擇 ID。

CSS 2 引入了屬性選擇器。

屬性選擇器可以根據元素的屬性及屬性值來選擇元素。

把包含標題(title)的所有元素變爲紅色,可以寫作:
*[title] {color:red;}

只對有 href 屬性的錨(a 元素)應用樣式:
a[href] {color:red;}

可以根據多個屬性進行選擇,只需將屬性選擇器鏈接在一起即可。
例如,爲了將同時有 href 和 title 屬性的 HTML 超鏈接的文本設置爲紅色,可以這樣寫:
a[href][title] {color:red;}

子串匹配屬性選擇器

類型 描述
[abc^="def"] 選擇 abc 屬性值以 "def" 開頭的所有元素
[abc$="def"] 選擇 abc 屬性值以 "def" 結尾的所有元素
[abc*="def"] 選擇 abc 屬性值中包含子串 "def" 的所有元素

如果希望對指向 W3School 的所有鏈接應用樣式,不必爲所有這些鏈接指定 class,再根據這個類編寫樣式,而只需編寫以下規則:
a[href*="w3school.com.cn"] {color: red;}

特定屬性選擇器

*[lang|="en"] {color: red;}
上面這個規則會選擇 lang 屬性等於 en 或以 en- 開頭的所有元素。因此,以下示例標記中的前三個元素將被選中,而不會選擇後兩個元素:
<p lang="en">Hello!</p>
<p lang="en-us">Greetings!</p>
<p lang="en-au">G'day!</p>
<p lang="fr">Bonjour!</p>
<p lang="cy-en">Jrooana!</p>

CSS 選擇器參考手冊

選擇器 描述
[attribute] 用於選取帶有指定屬性的元素。
[attribute=value] 用於選取帶有指定屬性和值的元素。
[attribute~=value] 用於選取屬性值中包含指定詞彙的元素。
[attribute|=value] 用於選取帶有以指定值開頭的屬性值的元素,該值必須是整個單詞。
[attribute^=value] 匹配屬性值以指定值開頭的每個元素。
[attribute$=value] 匹配屬性值以指定值結尾的每個元素。
[attribute*=value] 匹配屬性值中包含指定值的每個元素。

後代選擇器(descendant selector)又稱爲包含選擇器。

後代選擇器可以選擇作爲某元素後代的元素。

根據上下文選擇元素

只對 h1 元素中的 em 元素應用樣式,可以這樣寫:
h1 em {color:red;}
有關後代選擇器有一個易被忽視的方面,即兩個元素之間的層次間隔可以是無限的。

子元素選擇器

不希望選擇任意的後代元素,而是希望縮小範圍,只選擇某個元素的子元素,請使用子元素選擇器(Child selector)
選擇只作爲 h1 元素子元素的 strong 元素,可以這樣寫:
h1 > strong {color:red;}

相鄰兄弟選擇器(Adjacent sibling selector)可選擇緊接在另一元素後的元素,且二者有相同父元素。

h1 + p {margin-top:50px;}

相鄰兄弟結合符還可以結合其他結合符:
html > body table + ul {margin-top:20px;}
這個選擇器解釋爲:選擇緊接在 table 元素後出現的所有兄弟 ul 元素,該 table 元素包含在一個 body 元素中,body 元素本身是 html 元素的子元素。

錨僞類

在支持 CSS 的瀏覽器中,鏈接的不同狀態都可以不同的方式顯示,這些狀態包括:活動狀態,已被訪問狀態,未被訪問狀態,和鼠標懸停狀態。

a:link {color: #FF0000} /* 未訪問的鏈接 /
a:visited {color: #00FF00} /
已訪問的鏈接 /
a:hover {color: #FF00FF} /
鼠標移動到鏈接上 /
a:active {color: #0000FF} /
選定的鏈接 */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章