CSS選擇器筆記

来源:http://www.cnblogs.com/Royall/archive/2016/10/13/5958479.html
-Advertisement-
Play Games

一、元素選擇符 1. * 在我們看比較高級的選擇器之前,應該認識下這個眾所周知的清空選擇器。星號呢會將頁面上所有每一個元素都選到。許多開發者都用它來清空`margin`和`padding`。當然你在練習的時候使用這個沒問題,但是我不建議在生產環境中使用它。它會給瀏覽器憑添許多不必要的東西。`*`也可 ...


一、元素選擇符

序號 選擇器 含義
1. * 通用元素選擇器,匹配任何元素
2. E 標簽選擇器,匹配所有使用E標簽的元素
3. .info class選擇器,匹配所有class屬性中包含info的元素
4. #footer id選擇器,匹配所有id屬性等於footer的元素

1. *

* {
  margin: 0;
  padding: 0;
}

在我們看比較高級的選擇器之前,應該認識下這個眾所周知的清空選擇器。星號呢會將頁面上所有每一個元素都選到。許多開發者都用它來清空`margin`和`padding`。當然你在練習的時候使用這個沒問題,但是我不建議在生產環境中使用它。它會給瀏覽器憑添許多不必要的東西。
`*`也可以用來選擇某元素的所有子元素。

#container * {
  border: 1px solid black;
}

它會選中`#container`下的所有元素。

2. E

a { color: red; }
ul { margin-left: 0; }

如果你想定位頁面上所有的某標簽,不是通過`id`或者是’class’,直接使用標簽選擇器。

3. .info

.error {
  color: red;
}

這是個`class`選擇器。它跟`id`選擇器不同的是,它可以定位多個元素。當你想對多個元素進行樣式修飾的時候就可以使用`class`。當你要對某個特定的元素進行修飾那就是用`id`來定位它。

4. #footer

#container {
   width: 960px;
   margin: auto;
}

在選擇器中使用`#`可以用id來定位某個元素。

二、多元素的組合選擇器

序號 選擇器 含義
5. E,F 多元素選擇器,同時匹配所有E元素或F元素,E和F之間用逗號分隔
6. E F 後代元素選擇器,匹所有屬於E元素後代的F元素,E和F之間用空格分隔
7. E > F 子元素選擇器,匹配所有E元素的子元素F
8. E + F 相鄰元素選擇器,匹配所有緊隨E元素之後的同級元素F
9. E~F 匹配任何在E元素之後的同級F元素

5. E,F

a,li { color: red; }

匹配所有的a元素和li元素

6. E F

li a {
  text-decoration: none;
}

只匹配li後面多有的a元素(包括孫子輩)

7. E > F

div#container > ul {
  border: 1px solid black;
}

只匹配li後面多有的a元素(不包括孫子輩)`E F`和`E > F`的差別就是後面這個指揮選擇它的直接子元素。看下麵的例子:

 1 <div id="container">
 2 <ul>
 3     <li> List Item</li>
 4     <ul>
 5         <li> Child </li>
 6     </ul>
 7     <li> List Item </li>
 8     <li> List Item </li>
 9     <li> List Item </li>
10 </ul>
11 </div>

`#container > ul`只會選中`id`為’container’的`div`下的所有直接`ul`元素。它不會定位到如第一個`li`下的`ul`元素。

8. E + F

ul + p {
   color: red;
}

這個叫相鄰選擇器。它指揮選中指定元素的直接後繼元素。上面那個例子就是選中了所有`ul`標簽後面的第一段,並將它們的顏色都設置為紅色。

9. E~F

ul ~ p {
  color: red;
}

`ul + p`選擇器只會選擇緊挨跟著指定元素的那些元素。而這個選擇器,會選擇跟在目標元素後面的所有匹配的元素。

三、關係選擇器

序號 選擇器 含義
10. E[att] 匹配所有具有att屬性的E元素,不考慮它的值。(註意:E在此處可以省略,比如"[cheacked]"。以下同。)
11. E[att=val] 匹配所有att屬性等於"val"的E元素
12. E[att~=val] 匹配所有att屬性具有多個空格分隔的值、其中一個值等於"val"的E元素
13. E[att|=val] 匹配所有att屬性且屬性值為以val開頭並用連接符"-"分隔的字元串的E元素。
14. E[att^="val"] 匹配所有att屬性以"val"開頭的元素
15. E[att$="val"] 匹配所有att屬性以"val"結尾的元素
16. E[att*="val"] 匹配所有att屬性包含"val"字元串的元素

10. E[att]

匹配所有具有att屬性的E元素,不考慮它的值。

 1 <style>
 2 a[class]{color:#f00;}
 3 </style>
 4 </head>
 5 <body>
 6 <ul>
 7     <li><a href="?" class="external">外部鏈接</a></li>
 8     <li><a href="?">內部鏈接</a></li>
 9     <li><a href="?" class="external">外部鏈接</a></li>
10     <li><a href="?">內部鏈接</a></li>
11 </ul>
12 </body>

上面的這個例子中,只會選擇有class屬性的元素。那些沒有此屬性的將不會被這個代碼修飾。

11. E[att=val]

匹配所有att屬性等於"val"的E元素

a[class="external"]{color:#f00;}

上面這片代碼將會把`class`屬性值為`external`的標簽設置為紅色,而其他標簽則不受影響。

12. E[att~=val]

匹配所有att屬性具有多個空格分隔的值、其中一個值等於"val"的E元素

<style>
a[class~="external"]{color:#f00;}
</style>
</head>
<body>
<ul>
    <li><a href="?" class="external txt">外部鏈接</a></li>
    <li><a href="?" class="txt">內部鏈接</a></li>
    <li><a href="?" class="external txt">外部鏈接</a></li>
    <li><a href="?" class="txt">內部鏈接</a></li>
</ul>
</body>

這個`~`符號可以定位那些某屬性值是空格分隔多值的標簽(因此只有外部鏈接是紅色字體)。

13. E[att|=val]

選擇具有att屬性且屬性值為以val開頭並用連接符"-"分隔的字元串的E元素。

 1 <style>
 2 li[class|="test3"]{color:#f00;}
 3 </style>
 4 </head>
 5 <body>
 6 <ul>
 7     <li class="test1-abc">列表項目1</li>
 8     <li class="test2-abc">列表項目2</li>
 9     <li class="test3-abc">列表項目3</li>
10     <li class="test4-abc">列表項目4</li>
11     <li class="test5-abc">列表項目5</li>
12     <li class="test6-abc">列表項目6</li>
13 </ul>
14 </body>

因此只有項目3為紅色。

14. E[att^="val"]

選擇具有att屬性且屬性值為以val開頭的字元串的E元素。
 1 <body>
 2 <ul>
 3     <li class="abc">列表項目1</li>
 4     <li class="acb">列表項目2</li>
 5     <li class="bac">列表項目3</li>
 6     <li class="bca">列表項目4</li>
 7     <li class="cab">列表項目5</li>
 8     <li class="cba">列表項目6</li>
 9 </ul>
10 </body>
li[class^="a"]{color:#f00;}

選擇具有class屬性且屬性值為以a開頭的字元串的E元素(因此只有項目1、2為紅色)。

15. E[att$="val"]

匹配所有att屬性以"val"結尾的元素

li[class$="a"]{color:#f00;}

選擇具有class屬性且屬性值為以a結尾的字元串的E元素(項目4、6為紅色)。

16. E[att*="val"]

匹配所有att屬性包含"val"字元串的元素

li[class*="a"]{color:#f00;}

因為class的屬性中都含有字母a所以結果均為紅色。

 四、偽類選擇器

17. E:link 匹配所有未被點擊的鏈接
18. E:visited 匹配所有已被點擊的鏈接
19. E:hover 匹配滑鼠懸停其上的E元素
20. E:active 匹配滑鼠已經其上按下、還沒有釋放的E元素
21. E:first-child 匹配父元素的第一個子元素E
22. E:last-child 匹配父元素的最後一個子元素E
23. E:only-child 匹配父元素僅有的一個子元素E
24. E:nth-child(n) 匹配父元素的第n個子元素E
25. E:nth-last-child(n) 匹配父元素的倒數第n個子元素E
26. E:first-of-type 匹配同類型中的第一個同級兄弟元素E
27. E:last-of-type 匹配同類型中的最後一個同級兄弟元素E
28. E:only-of-type 匹配同類型中的唯一的一個同級兄弟元素E
29. E:nth-of-type(n) 匹配同類型中的第n個同級兄弟元素E
30. E:nth-last-of-type(n) 匹配同類型中的倒數第n個同級兄弟元素E

17. E:link

設置超鏈接a在未被訪問前的樣式。

1 <ul>
2     <li><a href="?" class="external">外部鏈接</a></li>
3     <li><a href="?">內部鏈接</a></li>
4     <li><a href="?" class="external">外部鏈接</a></li>
5     <li><a href="?">內部鏈接</a></li>
6 </ul>
a:link{color:#03c;}
.external:link{color:#f00;}

運行結果:外部鏈接為紅色;內部鏈接為藍色

18. E:visited

設置超鏈接a在其鏈接地址已被訪問過時的樣式。

19. E:hover

設置元素在其滑鼠懸停時的樣式。

20. E:active

設置元素在被用戶激活(在滑鼠點擊與釋放之間發生的事件)時的樣式。

21. E:first-child

匹配父元素的第一個子元素E。

1 <body>
2 <ul>
3     <li>test1</li>
4     <li>test2</li>
5     <li>test3</li>
6     <li>test4</li>
7     <li>test5</li>
8 </ul>
9 </body>
li:first-child{color:#f00;}

結果只有列表第一條信息test1為紅色

22. E:last-child

匹配父元素的最後一個子元素E。

li:last-child{color:#f00;}

結果只有列表最後一條信息test5為紅色

23. E:only-child

匹配父元素僅有的一個子元素E。

1 <ul>
2     <li>test1</li>
3 </ul>
4 <ul>
5    <li>test2</li>
6     <li>test3</li>
7     <li>test4</li>
8 </ul>
li:only-child{color:#f00;}

結果只有列表test1為紅色

24. E:nth-child(n)

匹配父元素的第n個子元素E。

li:nth-child(3){color:#f00;}

結果只有列表test3為紅色

25. E:nth-last-child(n)

匹配父元素的倒數第n個子元素E。

li:nth-last-child(3){color:#f00;}

結果只有列表test3為紅色

26. E:first-of-type

匹配同類型中的第一個同級兄弟元素E。

1 <div class="test">
2     <div><b>我是一個div元素</b></div>
3     <p>這是段落1</p>
4     <p>這是段落2</p>
5     <p>這是段落3</p>
6     <p>這是段落4</p>
7     <p>這是段落5</p>
8 </div>
p:first-of-type{color:#f00;}

結果只有這是段落1為紅色。

27. E:last-of-type

匹配同類型中的最後一個同級兄弟元素E。

p:last-of-type{color:#f00;}

結果只有這是段落5為紅色。

28. E:only-of-type

匹配同類型中的唯一的一個同級兄弟元素E。 

b:only-of-type{color:f00;}

結果只有我是一個div元素為紅色。

29. E:nth-of-type(n)

匹配同類型中的第n個同級兄弟元素E,n 可以代表數字也可以代表字母。 

p:nth-of-type(2){color:#f00;}

結果只有這是段落2為紅色。

n為odd時表示奇數;n為even表示偶數;

p:nth-of-type(odd){color:#f00;}

結果:段落1、3、5顯示為紅色。

p:nth-of-type(even){color:#f00;}

結果:段落2、4顯示為紅色。

30. E:nth-last-of-type(n)

匹配同類型中的倒數第n個同級兄弟元素E,n 可以代表數字也可以代表字母。。 

p:nth-last-of-type(2){color:#f00;}

結果:段落4顯示為紅色。

n為odd時表示奇數;n為even表示偶數;

p:nth-last-of-type(odd){color:#f00;}

結果:段落1、3、5顯示為紅色。

p:nth-last-of-type(even){color:#f00;}

結果:段落2、4顯示為紅色。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • A集成代碼生成器 [正反雙向(單表、主表、明細表、樹形表,開發利器)+快速構建表單 下載地址 ; freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊B 集成阿裡巴巴資料庫連接池druid; 資料庫連接池 阿裡巴巴的 druid。 ...
  • 本文主要是探究學習比較流行的一款消息層是如何設計與實現的 ØMQ是一種消息傳遞系統,或者樂意的話可以稱它為“面向消息的中間件”。它在金融服務,游戲開發,嵌入式系統,學術研究和航空航天等多種環境中被使用。 消息傳遞系統基本上像應用程式的即時消息一樣工作。應用程式決定將事件傳送到另一個應用程式(或多個應 ...
  • 每天一個設計模式-5 工廠方法模式 1.模式定義 定義一個用於創建對象的介面,讓子類決定實例化那一個類,Factory Method使一個類的實例化延遲到其子類。 2.工廠方法模式解決問題的思路 工廠方法模式需要介面對象,那就定義一個方法來創建這個介面對象(工廠方法);可是事實上它自己是不知道如何創 ...
  • 使用的lib庫有: 在lib庫目錄下新建一個src文件夾用來存放生成的文件,然後新建generatorConfig.xml 裡面代碼為: 最後在cmd控制臺下找到lib的根目錄然後執行以下語句 1 Java -jar mybatis-generator-core-1.3.5.jar -configf ...
  • 參考:github, https://github.com/liuxiaochen0625/MyBatis-Spring-Boot-master.git 從controller組裝tk.mybatis.mapper.entity.Example 對象,操作起來較為麻煩,不符合我們日常書寫習慣,因而改 ...
  • 這是一個好的開始,過程很漫長,但我卻樂在其中. 在大學之際,這是我的又一個開始,隨便寫點啦. 想把每一次的過程記錄下來 這樣以後對自己 對別人都會有所幫助。 好啦 作為一名大三的學生黨 加油吧! ...
  • 每天一個設計模式-4 單例模式(Singleton) 1.實際生活的例子 有一天,你的自行車的某個螺絲釘鬆了,修車鋪離你家比較遠,而附近的五金店有賣扳手;因此,你決定去五金店買一個扳手,自己把螺絲釘固定緊。不一會兒,自行車就被你修好了;首先,這個扳手你不會扔掉,下次用的時候直接找出來就用了。好,今天 ...
  • Atitit.eclise的ide特性 abt 編譯 為什麼要在Intellij IDEA中使用Eclipse編譯器 如果你使用Intellij Idea,你應該考慮使用Eclipse編譯器來代替Javac。 你的項目所使用的編譯器可在IDE的設置頁面更改。 需要註意,如果你使用的是Java8,只有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...