[讀書筆記] CSS權威指南1: 選擇器

来源:http://www.cnblogs.com/philipding/archive/2016/04/23/5425809.html
-Advertisement-
Play Games

通配選擇器 可以與任何元素匹配,就像是一個通配符 元素選擇器 指示文檔元素的選擇器。 分組 選擇器分組 聲明分組 結合選擇器和聲明分組 類選擇器和ID選擇器 獨立於文檔元素的方式來指定樣式 類選擇器 ID選擇器 ID選擇器和類選擇器的不同之處: 類選擇器和ID選擇器可能是區分大小寫的,這取決於文檔語 ...


通配選擇器

可以與任何元素匹配,就像是一個通配符

/*每一個元素的字體都設置為紅色*/
* {
    color: red;
}

元素選擇器

指示文檔元素的選擇器。

/*為body的字體設置為紅色*/
body {
    color: red;
}

分組

  • 選擇器分組
h1, h2, h3 {
    color: red;
}
  • 聲明分組
h1 {
    font: 18px Helvetica;
    color: purple;
    background: aqua;
}
  • 結合選擇器和聲明分組
h1, h2, h3 {
    font: 18px Helvetica;
    color: purple;
    background: aqua;
}

類選擇器和ID選擇器

獨立於文檔元素的方式來指定樣式

  • 類選擇器
.warning {
    font-weight: bold
}

/*包含warning元素的p標簽會apply下麵的style*/
p.warning {
    font-weight: bold
}

/*同時包含urgent和warning類名的元素會apply下麵的style,類名順序不限*/
.urgent.warning {
    font-weight: bold
}

/*同時包含urgent和warning類名的元素P會apply下麵的style*/
p.urgent.warning {
    font-weight: bold
}
  • ID選擇器
#content {
    margin: 0;
}

ID選擇器和類選擇器的不同之處:

  1. 在一個HTML文檔中,ID選擇器會使用一次,而且僅一次。因此,如果有一個元素的id值為lead-para,那麼該文檔中所有其他元素的id值都不能是lead-para。(註: 瀏覽器通常並不檢查HTML中ID的唯一性,這意味著如果你在HTML文檔中設罝了多個有相同ID屬性值的元素,就可能為這些元素應用相同的樣式。)
  2. ID選擇器不能結合使用,因為ID屬性不允許有以空格分隔的詞列表。

類選擇器和ID選擇器可能是區分大小寫的,這取決於文檔語言。HTML和 XHTML將類和ID值定義為區分大小寫,所以類和ID值的大小寫必須與文檔中的相應值匹配。

屬性選擇器

  • 簡單屬性選擇器

如果希望選擇有某個屬性的元素,而不論該屬性的值是什麼,可以使用一個簡單屬性選擇器。

/*選擇有class屬性(值不限)的所有h1元素,設置其字體顏色為紅色 */
h1[class] {
    color: red;
}

/*將同時有href和title屬性的HTML超鏈接的文本置為粗體*/
a[href][title] {
    font-weight: bold;
}
  •  根據具體屬性值選擇
/*設置具有href屬性,並且屬性值為http://www.w3.org/的a標簽的font-size為200%*/
a[href="http://www.w3.org/"] {
    font-size: 200%;
}

/*同時滿足*/
a[href="http://www.w3.org/"][title="W3C Home"]{
    font-size: 200%;
}

這種格式要求必須與屬性值完全匹配

  • 根據部分屬性值選擇

如果屬性能接受詞列表(詞之間用空格分隔),可以根據其中的任意一個詞進行選擇。

<span class="barren rocky">Mercury</planet>
<span class="cloudy barren">Venus</planet>
<span class="life-bearing cloudy">Earth</planet>
/*為了把class屬性中有barren的所有元素變為斜體,可以寫作:*/
span[class~="barren"] {
    font-style: italic;
}

p.warning和p[class~="warning"]應用到HTML文檔時是等價的

類型 描述
[foo^="bar"] 選擇foo屬性值以"bar"開頭的所有元素
[foo$="bar"] 選擇foo屬性值以"bar"結尾的所有元素
[foo~="bar"] 選擇foo屬性值包含"bar"的所有元素(屬性的值根據空格分隔,其中任意一個詞能完全匹配bar)
[foo*="bar"] 選擇foo屬性值包含"bar"的所有元素(只要包含就可以了,任意位置都可以,不必是一個完整的單詞)
  • 特定屬性選擇類型

用於選取帶有以指定值開頭的屬性值的元素,該值必須是整個單詞。

<h1 lang="en">Hello!</h1>
<p lang="en-us">Greetings!</p>
<div lang="en-au">G’day!</div>
<p lang="fr">Bonjour!</p>
<h4 lang="cy-en">Jrooana!</h4>

/*上述標簽前三個會變成紅色,後兩個還是黑色*/
*[lang|="en"] {
  color: red;
}

後代選擇器

h1 em {
    color: gray;
}

/*blockquote中包含的所有b(粗體)元素的文本顏色為灰色,另外正常段落中的所有粗體文本也為灰色*/
blockquote b, p b {
    color: gray;
}

後代選擇器中,元素之間的層次間隔可以是無限的。

子元素選擇器

h1>strong {
    color: red;
}

子元素選擇器限製為只匹配樹種直接相連的元素。

可以在同一個選擇器中結合使用後代選擇器和子選擇器。

/*選擇作為一個td元素子元素的所有p元素,這個td元素本身從table元素繼承,該table元素有一個包含summary的class屬性*/
table.suitimary td > p {
    color: red;
}

相鄰兄弟選擇器

和子結合符一樣,相鄰兄弟結合符旁邊可以有空白符。

/*去除緊接在一個h1元素後出現的段落的上邊距*/
h1+p {
    margin-top: 0;
}

需要註意的是:

  • 用一個結合符只能選擇兩個相鄰兄弟中的第二個元素。因此,如果寫作li+li {font-weight: bold;},只會把各列表中的第二個及以後的列表項變成粗體。
  • 兩個元素之間的文本內容不會影響相鄰兄弟結合符起作用。
<div>
<ol>
<li>List item 1</li>
<li>List item 1</li>
<li>List item 1</li>
</ol> This is some text that is part of the 'div'.
<ul>
<li>A list item</li>
<li>Another list item</li>
<li>Yet another list item</li>
</ul>
</div>
/*儘管兩個列表間多了一行文本,不過還是可以用選擇器ol+ul來匹配第二個列表。*/
ol+ul {
    color: red;
}

偽類和偽元素選擇器

利用偽類和偽元素選擇器,可以為文檔中不一定具有存在的結構指定樣式,或者為某些元素(甚至是文檔本身)的狀態所指示的幻像類指定樣式。會根據另外某種條件而非文檔結構向文檔中的某些部分應用樣式,而且無法通過研究文檔的標記準確地推斷出採用何種方式應用樣式。

  • 偽類選擇器
偽類名 描述
:link

指示作為超鏈接(即有一個href屬性)並指向一個未訪問地址的所有錨。

註意,有些瀏覽器可能會不正確地將:link解釋為指向任何超鏈接,包括已訪問和未訪問的超鏈接

:visited

指示作為已訪問地址超鏈接的所有錨

:focus 指示當前擁有輸入焦點的元素,也就是說,可以接受鍵盤輸入或者能以某種方式激活的元素
:hover

指示滑鼠指針停留在哪個元素上。

例如,滑鼠指針可能停留在一個超鏈接上,:hover就會指示這個超鏈接

:active

指示被用戶輸入激活的元素。

例如,滑鼠指針停留在一個超鏈接上時,如果用戶點擊滑鼠,就會激活這個超鏈接,將指示這個超鏈接

a {
    color: red;
}

a:link {
    color: red;
}
/*兩者是不同的,
a:link指示的是一個有href屬性的,並且未訪問過的所有a節點
a會應用到所有a標簽
*/
a:link {
    color: blue;
}

a:visited {
    color: red;
}

a.external:link, a.external:visited {
    color: maroon;
}

偽類的順序很重要,通常建議為link-visited-focus-hover-active。

:link和:visited是靜態的——第一次顯示之後,它們一般不會在改變文檔的樣式。

:focus, :hover, :active是動態偽類。動態偽類可以應用到任何元素。

input:focus {
  background-color: silver;
  font-weight: bold;
}
    • 選擇第一個子元素——:first-child,這也是一個靜態偽類。
/*
作為某元素(可以是任意元素)的第一個子元素的所有P元素設置為粗體。
最常見的錯誤是認為p:first-child之類的選擇器會選擇p元素的第一個子元素。*/
p:first-child {
    font-weight: bold;
}
    •  根據語言選擇—— :lang()偽類。

從對應的模式來講,:lang()偽類就像是|=屬性選擇器。

*:lang(fr) { 
  font-style: italic;
}

偽選擇器和屬性選擇器之間的主要差別在於語言信息可以從很多來源得到,而且其中一些可能在元素之外。CSS2.1指出:

在HTML中,語言由lang屬性和META元素的組合來確定,還可能包括協議提供的信息,如HTTP首部。XML使用一個xml:lang屬性,另外可能還有其他文檔語言特定的方法來確定語言。

因此,偽類比屬性選擇器稍微健壯一些。

結合偽類:

/*滑鼠指針停留在未訪問鏈接上時,可以讓這些鏈接變成紅色,而滑鼠指針停留在已訪問鏈接上時,鏈接變成紫紅色。*/
a:link:hover {
    color: red;
}

a:visited:hover {
    color: maroon;
}

 用哪種順序指定並不重要,寫成a:hover:link會得到與a:link:hover一樣的效果。

  • 偽元素選擇器

就像偽類為錨指定幻象類一樣,偽元素能夠在文檔中插入假想的元素,從而得到某種效果。CSS2.1中定義了4個偽元素:設置首字母樣式、設置第一行樣式、設置之前和之後的樣式。

    • 設置首字母樣式

用於設置一個塊級元素首字母的樣式,而且僅對該首字母設置樣式。

/*讓每個h2中第一個字母的大小是標題中其餘字母大小的2倍*/
h2:first-letter {
    font-size: 200%;
}

這個規則會導致用戶代理(瀏覽器)對一個假想的元素作出響應,這個假想元素包含每個h2中的第一個字母。可能如下所示:
<h2><h2:first-letter>T</h2:first-letter>his is an h2 element</h2>
:first-letter樣式只應用到上例所示假想元素的內容。這個<h2:first:-letter>元素並不出現在文檔源代碼中。相反,它是由用戶代理動態構造的,用於向相應文本塊應用:first-letter樣式。換句話說,<h2:first-letter>是一個偽元素。

    • 設置第一行樣式

:first-line可以用來影響元素中第一個文本行。(第一行是指顯示區域的第一行,所以瀏覽器視窗大小不同,第一行所代表的字元數量也是不同的。)

/*應用於每一段所顯示的第一行文本。*/
p:first-line {
    color: red;
}

:first-letter, :first-line允許設置的CSS屬性:

:first-letter :first-line
所有的font屬性 所有的font屬性
color color
所有background屬性 所有background屬性
所有margin屬性  
所有padding屬性  
所有border屬性  
text-decoration text-decoration
vertical-align vertical-align
text-transform text-transform
line-height line-height
float  
letter-spacing letter-spacing
word-spacing  
    • 設置之前和之後的樣式
h2:before {
  content: "before";
  color: red;
}

h2:after {
  content: "after";
  color: red;
}

所有偽元素都必須放在出現該偽元素的選擇器的最後面,如果寫成p: first-line em就是不合法的,因為偽元素在選擇器主體前面出現。


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

-Advertisement-
Play Games
更多相關文章
  • 學習要點: 1.移動設備優先 2.佈局容器 3.柵格系統 主講教師:李炎恢 本節課我們主要學習一下 Bootstrap 的柵格系統,提供了一套響應式、移動設備優先的流式柵格系統。 一.移動設備優先 在 HTML5 的項目中,我們做了移動端的項目。它有一份非常重要的 meta,用於設置屏幕和設備等寬以 ...
  • In Angular there are several built in services. $http service is one of them. In this video, we will discuss another built in service, $log. It is als ...
  • Here is what we want to do1. Create an ASP.NET Web service. This web service retrieves the data from SQL Server database table, returns it in JSON for ...
  • 學習要點: 1.表單 2.圖片 主講教師:李炎恢 本節課我們主要學習一下 Bootstrap 表單和圖片功能,通過內置的 CSS 定義,顯示各種豐富的效果。 一.表單 Bootstrap 提供了一些豐富的表單樣式供開發者使用。 1.基本格式 //實現基本的表單樣式 註:只有正確設置了輸入框的 typ ...
  • ng-include directive is used to embed an HTML page into another HTML page. This technique is extremely useful when you want to reuse a specific view i ...
  • The ng-init directive allows you to evaluate an expression in the current scope. In the following example, the ng-init directive initializes employees ...
  • 在進行定時器的製作時,我想先把我們需要用到的一些東西介紹給大家。 定時器的作用 開啟定時器 setInterval 間隔型 setTimeout 延遲型 停止定時器 clearInterval clearTimeout 數位時鐘思路效果 獲取系統時間: date對象 getHours getMinu ...
  • 最近在做文件上傳的功能,因為界面設計比較簡單,就沒有引用jq,但是網上大部分的上傳插件都需要jq的支持。為了一個上傳功能引用90多k的jq文件有點太小題大做了,所以就自己動手寫了一個原生js上傳的demo。下麵是代碼: HTML代碼 伺服器端用的是.Net c#代碼 說明: 根據網上相關資料,據說支 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...