1. 程式人生 > >CSS學習筆記(三) CSS選擇器

CSS學習筆記(三) CSS選擇器

1.為文件新增樣式的三種方法

  • 行內樣式(寫在特定 HTML 標籤的 style 屬性裡)

  • 嵌入樣式(嵌入的 CSS 樣式是放在 HTML 文件的 head 元素中)

  • 連結樣式
    在建立包含多個頁面的網站時,需要把樣式集中在一個單獨的檔案裡,這個檔案就叫 樣式表。樣式表其實就是一個副檔名為 .css 的文字檔案。可以在任意多個 HTMl 頁面中連結同一個樣式表文件,每個頁面中只需加入類似下面的一行程式碼即可:
    <link href="styles.css" rel="stylesheet" type="text/css" />

除了以上三種為頁面新增樣式的方法,還有一種在樣式表中連結其它樣式表的方法,那就是應用 @import

指令。就像這樣:@import url(css/styles2.css).
要注意的是, @import 指令必須出現在樣式表中其他樣式之前,否則 @import 引用的樣式表不會被載入。

2.CSS規則命名慣例

CSS 規則由 選擇符宣告 兩部分組成,其中選擇符用於指出規則所要選擇的元素,宣告則又由兩部分組成:屬性。屬性指出要影響元素哪方面的樣式,值就是屬性的一個新狀態。

圖片描述

對於這個基本的結構,有三種方法可以進行擴充套件:

  • 多個宣告包含在一條規則裡

  • 多個選擇符組合在一起

  • 多條規則應用給一條選擇符

所有用於選擇特定元素的選擇符又分三種:

  • 上下文選擇符(基於祖先或同胞元素選擇一個元素)

  • ID和類選擇符(基於 id 和 class 屬性的值選擇的元素)

  • 屬性選擇符(基於屬性的有無和特徵選擇元素)

3.上下文選擇符

格式:標籤 1 標籤 2 {宣告}
示例:article p {font-weight:bold;}
說明:標籤2就是我們想要選擇目標,而且只有在標籤 1 是是其祖先元素(不一定是父元素)的情況下才會被選中。

上下文選擇符,嚴格來講(也就是 CSS 規範裡),叫後代組合式選擇符descendant combinator selector),就是一組以空格分隔的標籤名。用於選擇作為指定祖先元素後代的標籤。

提示:請記住,上下文選擇符以空格作為分隔符,而分組選擇符則以逗號作為分隔符

4.特殊的上下文選擇符

4.1 子選擇符 >

格式標籤 1 > 標籤 2
示例section > h2 {font-style:italic;}
說明:標籤 2 必須是標籤 1 的子元素,或者反過來說, 標籤 1 必須是標籤 2 的父元素。與常規的上下文選擇符不同,這個選擇符中的標籤 1 不能是標籤 2 的父元素之外的其他祖先元素。

4.2 緊鄰同胞選擇符 +

格式標籤 1 + 標籤 2
示例h2 + p {font-variant:small-caps;}
說明:標籤 2 必須緊跟在其同胞標籤 1 的後面。

4.3 一般同胞選擇符 ~

格式標籤 1 ~ 標籤 2
示例h2 ~ a {color:red;}
說明:標籤 2 必須跟(不一定緊跟)在其同胞標籤 1 後面。

4.4 通用選擇符 *

格式* {...}
示例* {color:green;}
說明:上面示例會導致所有元素(的文字和邊框)都變成綠色。
不過,一般在使用 * 選擇符時,都會同時使用另一個選擇符。
例如:p * {color:red;} // 這樣只會把p包含的所有元素的文字變成紅色。
還有一個非常有意思的用法,即用它構成非子選擇符:
例如:section * a {font-size:1.3em;}
這樣,任何是 section 孫子元素,而非子元素的 a 標籤都會被選中。至於 a
的父元素是什麼,沒有關係。
總之,只有一個標籤名的選擇符會選中頁面中所有相同標籤的例項。而通過上下文
選擇符,則可以指定標籤必須具備相應的祖先或同胞。

5.ID 和類選擇符

ID 和類為我們選擇元素提供了另一套手段,利用它們可以不用考慮文件的層次結構

注意:可以給 id 和 class 屬性設定任何值,但不能以數字或特殊符號開頭。

5.1 類屬性

5.1.1 類選擇符

格式.類名
示例.specialtext {font-style:italic;}

5.1.2 標籤帶類選擇符

格式標籤名.類名
示例p.specialtext {color:red;}

5.1.3 多類選擇符

格式.類名.類名
示例.specialtext.featured {font-size:120%;}
說明:CSS選擇符的兩個類名之間沒有空格,因為我們只想選擇同時具有這兩個類名的的那個元素。如果加了空格,那就變成了“祖先/後代”關係的上下文選擇符了。

提示:不要像使用 ID 一樣,每個類都指定一個不同的類名,然後再為每個類編寫規則。如果你確實有這種隨意使用類的習慣,那說明你可能想大多數對 CSS 充滿激情的初學者一樣,還不瞭解繼承和上下文選擇符的作用。 於是,你可能會給每個標籤都重複寫同樣的樣式(比如為頁面中很多標籤分別指定相同的字型)。實際上,繼承和上下文選擇符能讓不同的標籤共享樣式,從而降低你需要編寫和維護的 CSS 量。

5.2 ID屬性

格式#ID名標籤名#ID名
示例#specialtext {CSS 樣式宣告 }p#specialtext {CSS 樣式宣告 }

提示:ID還可以用於頁內導航。 例如:<a href="#bio">Biography</a>,注意 href 屬性值開頭的 # ,它表示這個連結的目標在當前頁面中,因而不會觸發瀏覽器載入頁面(如果沒有 #,瀏覽器就會嘗試載入 bio 目錄下的預設頁面了)。如果連結的 href 屬性裡只有一個 #,那麼點選該連結會返回頁面頂部。例如:<a href="#">Back to Top</a>,換句話說,要寫一個“返回頂部”連結,根本不需要 ID 為 # 的目標元素。

注意如果暫時不知道某個 href 應該放什麼 URL,也可以用 # 作為佔位符,但不能把該屬性留空。 因為 href 屬性值為空的連結的行為跟正常連結不一樣。這樣,團隊中的其他人將來可以用中間層(比如 PHP)變數替換 #,以便動態接收來自資料庫的 URL。

6.屬性選擇符

6.1 屬性名選擇符

格式標籤名[屬性名]
示例img[title] {border:2px solid blue;}

提示一般來說,人們經常給 alt 和 title 屬性設定相同的值。 alt 屬性中的文字會在圖片因故未能載入時顯示,或者由螢幕閱讀器朗讀出來。而 title 屬性會在使用者滑鼠移動到圖片上時,顯示一個包含相應文字的提示。

6.2 屬性值選擇符

格式[屬性名="屬性值"]
示例img[title="red flower"] {border:4px solid green;}
說明:在 HTML5 中, 屬性值的引號可加可不加,在此為了清楚起見,建議新增。

7.偽類

偽類(Pseudo classes)是選擇符的螺栓,用來指定一個或者與其相關的選擇符的狀態。它們的形式是 selector:pseudo class { property: value; },簡單地用一個半形英文冒號(:)來隔開選擇符和偽類。

偽類可以分為兩種

  • UI( User Interface,使用者介面)偽類會在 HTML 元素處於某個狀態時(比如滑鼠
    指標位於連結上),為該元素應用 CSS 樣式。

  • 結構化偽類會在標記中存在某種結構上的關係時(如某個元素是一組元素中的第
    一個或最後一個),為相應元素應用 CSS 樣式。

7.1 UI偽類

7.1.1 連結偽類

針對連結的偽類一共有4個,因為連結始終會處於如下4種狀態之一。

  • Link
  • Visited
  • Hover
  • Active

提示:由於這4個偽類的特指度相同,如果不按照這裡列出的順序使用它們,瀏覽器可能不會顯示預期效果。方便記憶:LoVe? HA! 大寫字母就是每個偽類的頭一個字母。

提示:一個冒號( : )表示偽類,兩個冒號( :: )表示 CSS3 新增的偽元素。

7.1.2 :focus偽類

表單中的文字欄位在使用者單擊它時會獲得焦點,然後使用者才能在其中輸入字元。
例如:input:focus {border:1px solid blue;}
上面一行程式碼會在游標位於 input 欄位中時,為該欄位新增一個藍色邊框。這樣可以讓使用者明確地知道輸入的字元會出現在哪裡。

7.1.3 :target偽類

如果使用者點選一個指向頁面中其他元素的連結,則那個元素就是目標( target),可以
用:target 偽類選中它。
例如:對於這個連結:<a href="#more_info">More Information</a>
位於頁面的其它地方、ID 為 more_info 的那個元素就是目標。
假設該元素為這樣:<h2 id="more_info">This is the information you are looking for.</h2>
那麼,CSS規則:#more_info:target {background:#eee}
會在使用者單擊連結轉向 ID 為 more_info 的元素時,為該元素新增灰色背景。

維基百科在其引證中大量使用了:target 偽類。維基百科的引證連結就是正文裡那些
不起眼的數字連結。引證本身則位於長長的頁面的最下方。如果沒有:target 應用的
突出顯示,很難知道你點選的連結對應著一大堆引證中的哪一個。

7.2 結構化偽類

結構化偽類可以根據標記的結構應用樣式,比如根據某元素的父元素或前面的同胞元素是什麼。

7.2.1 :first-child和:last-child

格式
e:first-child
e:last-child
示例ol.results li:first-child {color:blue;}

7.2.2 :nth-child

格式e:nth-child(n)
示例li:nth-child(3)
說明:e 表示元素名,n 表示一個數值(也可以使用 oddeven

8.偽元素

顧名思義,偽元素就是你的文件中若有實無的元素。

8.1 ::first-letter偽元素

格式e::first-letter
示例p::first-letter {font-size:300%;}

提示:如果不用偽元素建立這個首字元放大效果,必須手工給該字母加上標籤,
然後再為該標籤應用樣式。而偽元素實際上是替我們添加了無形的標籤。

8.2 ::first-line偽元素

格式e::first-line
示例p::first-line {font-variant:small-caps;}
說明:選中文字段落(一般情況下是段落)的第一行。

8.3 ::before和::after偽元素

格式
e::before
e::after
示例
對標記:
<p class="age">25</p>
新增如下樣式:
p.age::before {content:"Age: ";}
p.age::after {content:" years.";}
會得到如下結果:
Age: 25 years.

提示:如果標籤中的內容是通過資料庫查詢生成的結果,那麼用這種技巧再合適不過了。
因為所有結果都是數字,使用這兩個偽元素可以在把數字呈現給使用者時,加上說明
性文字。

參考資料