CSS 選擇器入門

一、CSS 選擇器基礎:快速掌握核心概念

  1. 什么是選擇器?
    CSS 選擇器就像 “網頁元素的遙控器”,用于定位 HTML 中的特定元素并應用樣式。

    /* 結構:選擇器 { 屬性: 值; } */
    p { color: red; }  /* 選擇所有<p>元素,文字變紅 */
    
  2. 元素選擇器(標簽選擇器)

    • 直接用 HTML 標簽名作為選擇器(如?div,?h1,?a)。
    • 作用于頁面中所有該類型的元素。
    h2 { font-size: 20px; }  /* 所有<h2>標題字體大小為20px */
    img { border: 1px solid gray; }  /* 所有圖片添加邊框 */
    
  3. 類選擇器(Class Selector)

    • 通過元素的?class?屬性匹配,可復用(一個元素可擁有多個類)。
    • 命名規則
      • 必須以?.?開頭(如?.highlight)。
      • 只能包含字母、數字、連字符(-)、下劃線(_)。
      • 不能以數字開頭,不能包含空格。
      <!-- HTML -->
      <p class="error-message">這是錯誤提示</p>
      
      ?
      /* CSS */
      .error-message { color: red; }  /* 所有class="error-message"的元素變紅 */
      .btn-primary { background: blue; }  /* 主按鈕樣式 */
      
  4. ID 選擇器

    • 通過元素的?id?屬性匹配,必須唯一(一個頁面中不能重復)。
    • 命名規則與類相似,但以?#?開頭(如?#header)。
    <!-- HTML -->
    <div id="main-content">內容區域</div>
    
    /* CSS */
    #main-content { width: 800px; }  /* id="main-content"的元素寬度為800px */
    
  5. 通配符選擇器(*

    • 匹配所有元素,常用于全局樣式重置。
    * { margin: 0; padding: 0; }  /* 所有元素的邊距重置為0 */
    
二、組合選擇器:多條件篩選元素
  1. 后代選擇器(空格分隔)

    • 選擇某個元素內部的所有后代元素(無論嵌套多深)。
    article p { line-height: 1.6; }  /* 所有<article>內的<p>元素行高為1.6 */
    
  2. 子選擇器(>`)

    • 只選擇某個元素的直接子元素(一級子元素)。
    nav > ul { background: lightgray; }  /* 導航欄(nav)的直接子元素<ul>添加背景色 */
    
  3. 相鄰兄弟選擇器(+

    • 選擇緊接在另一個元素后的同級元素。
    h3 + p { margin-top: 10px; }  /* 每個<h3>后的第一個<p>元素頂部邊距為10px */
    
  4. 通用兄弟選擇器(~

    • 選擇前面某個元素后的所有同級元素
    img ~ figcaption { font-style: italic; }  /* 每個<img>后的所有<figcaption>變斜體 */
    
三、屬性選擇器:按元素屬性篩選

通過元素的屬性或屬性值來選擇元素。

[disabled] { opacity: 0.5; }  /* 所有帶disabled屬性的元素透明度降低 */
a[target="_blank"] { color: purple; }  /* 所有打開新窗口的鏈接變紫色 */
input[type="email"] { border-color: blue; }  /* 郵箱輸入框邊框變藍 */
四、偽類選擇器(Pseudo-classes)

定義:偽類用于選擇處于特定狀態或位置的元素,以冒號?:?開頭。

1. 動態偽類(用戶交互狀態)
a:hover { color: red; }          /* 鼠標懸停時鏈接變紅 */
button:active { background: blue; } /* 按鈕被點擊時背景變藍 */
input:focus { outline: 2px solid green; } /* 輸入框獲得焦點時顯示綠色邊框 */
a:visited { color: purple; }     /* 已訪問鏈接變紫色 */
2. 結構偽類(位置關系)
li:first-child { font-weight: bold; }      /* 第一個列表項加粗 */
li:last-child { border-bottom: none; }     /* 最后一個列表項去掉下邊框 */
p:nth-child(even) { background: #f0f0f0; } /* 偶數位置的段落添加淺灰色背景 */
p:nth-child(3) { color: blue; }            /* 第三個段落變藍色 */
p:nth-of-type(odd) { font-style: italic; } /* 奇數位置的<p>元素變斜體 */
3. 邏輯偽類(條件篩選)
:not(.highlight) { opacity: 0.8; }         /* 非.highlight類的元素透明度降低 */
input:required { border: 1px solid red; }  /* 必填字段添加紅色邊框 */
input:disabled { background: #eee; }       /* 禁用的輸入框添加灰色背景 */
4. 目標偽類(URL 錨點)
:target { background: yellow; }            /* 當前URL錨點對應的元素高亮 */
五、偽元素選擇器(Pseudo-elements)

定義:偽元素用于選擇元素的特定部分(如首字母、內容前后插入的虛擬元素),以雙冒號?::?開頭(單冒號也兼容)。

1. 內容插入偽元素
p::before {content: "? ";           /* 在每個<p>元素前插入箭頭符號 */color: red;
}p::after {content: " ?";          /* 在每個<p>元素后插入對勾符號 */
}blockquote::before {content: open-quote;    /* 插入左引號 */font-size: 2em;
}
2. 文本片段偽元素
p::first-letter {font-size: 2em;         /* 段落首字母放大 */font-weight: bold;float: left;margin-right: 5px;
}p::first-line {color: blue;            /* 段落首行變藍色 */
}
3. 選中狀態偽元素
::selection {background: purple;     /* 用戶選中文本時的背景色 */color: white;           /* 用戶選中文本時的文字顏色 */
}
4. 輸入框占位符偽元素
input::placeholder {color: #999;            /* 輸入框占位文本變灰色 */font-style: italic;
}
六、選擇器優先級:解決樣式沖突

當多個選擇器作用于同一元素時,優先級由高到低:

  1. 內聯樣式(如?<div style="color: red">
  2. ID 選擇器(#id)
  3. 類 / 屬性 / 偽類選擇器(.class, [attr], :hover)
  4. 元素 / 偽元素選擇器(p, ::before)
  5. 通配符(*)

記憶口訣

  • ID(最高) →?Class →?Element(最低),簡稱?ICE 原則
  • 相同優先級時,后定義的樣式生效。
  • !important?可強制提升優先級(但盡量避免使用)。
七、初學者常見誤區
  1. 濫用 ID 選擇器
    ID 必須唯一,應優先使用類選擇器實現復用。

  2. 過度嵌套選擇器
    避免深層后代選擇器(如?div ul li a),優先使用類直接定位。

  3. 忽略繼承
    顏色、字體等屬性會自動繼承,無需為每個元素重復定義。

八、實戰練習:選擇器應用場景
<!-- HTML 示例 -->
<header class="site-header"><nav><ul><li><a href="#" class="active">首頁</a></li><li><a href="#">產品</a></li></ul></nav>
</header>
/* CSS 選擇器示例 */
.site-header { background: #333; }  /* 類選擇器 */
nav ul { list-style: none; }       /* 后代選擇器 */
nav > ul > li { display: inline-block; }  /* 子選擇器 */
a.active { color: white; }         /* 組合類選擇器 */

總結:選擇器是 CSS 的基石

通過系統學習選擇器,你可以精準控制網頁的每一個元素。建議結合實際項目練習,加深對不同選擇器的理解和運用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83884.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83884.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83884.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Anaconda3安裝教程(附加安裝包)Anaconda詳細安裝教程Anaconda3 最新版安裝教程

多環境隔離 可同時維護生產環境、開發環境、測試環境&#xff0c;例如&#xff1a; conda create -n ml python3.10 # 創建機器學習環境 conda activate ml # 激活環境三、Anaconda3 安裝教程 解壓Anaconda3安裝包 找到下載的 Anaconda3 安裝包&#xff08;.ex…

現代計算機圖形學Games101入門筆記(十七)

雙向路徑追蹤 外觀建模 散射介質 人的頭發不能用在動畫的毛發上。 動物的髓質Medulla特別大 雙層圓柱模型應用 BSSRDF是BRDF的延伸。 天鵝絨用BRDF不合理&#xff0c;轉成散射介質。 法線分布 光追很難處理微表面模型 光在微型細節上&#xff0c;光是一個波&#xff0c;會發生衍…

chrome源碼中WeakPtr 跨線程使用詳解:原理、風險與最佳實踐

base::WeakPtr 在 Chromium 中 不能安全地跨線程使用。這是一個很關鍵的點&#xff0c;下面詳細解釋原因及正確用法。 &#x1f50d;原理與使用 ? 先說答案&#xff1a; base::WeakPtr 本質上是**線程綁定&#xff08;thread-affine&#xff09;**的。不能在多個線程之間創建…

hysAnalyser 從MPEG-TS導出ES功能說明

摘要 hysAnalyser 是一款特色的 MPEG-TS 數據分析工具。本文主要介紹了 hysAnalyser 從MPEG-TS 中導出選定的 ES 或 PES 功能(版本v1.0.003)&#xff0c;以便用戶知悉和掌握這些功能&#xff0c;幫助分析和解決各種遇到ES或PES相關的實際問題。hysAnalyser 支持主流的MP1/MP2/…

C++(21):fstream的讀取和寫入

目錄 1 ios::out 2 ios::in和is_open 3 put()方法 4 get()方法 4.1 讀取單個字符 4.2 讀取多個字符 4.3 設置終結符 5 getline() 1 ios::out 打開文件用于寫入數據。如果文件不存在&#xff0c;則新建該文件&#xff1b;如果文件原來就存在&#xff0c;則打開時清除…

系統架構設計(十七):微服務數據一致性和高可用策略

數據一致性問題 問題本質 由于每個微服務擁有獨立數據庫&#xff0c;跨服務操作不能用傳統的數據庫事務&#xff0c;面臨“分布式事務”一致性挑戰。 數據一致性策略 策略核心思想應用場景優缺點強一致性&#xff08;Strong Consistency&#xff09;所有操作實時同步成功&a…

os agent智能體軟件 - 第三彈 - 純語音交互

前兩期期我們發布了產品的初級形態&#xff0c;那時候還只能是“軟件開發者”在本地配置使用&#xff0c;或者運行起來有個大黑框&#xff0c;使用起來美觀度太差。 到今天大概20天&#xff0c;我們的第3版已經出來了&#xff0c;不僅做成了電腦端的exe軟件&#xff08;任何人…

鏈表原理與實現:從單鏈表到LinkedList

1.鏈表的概念及結構 鏈表是一種物理存儲結構上非連續存儲結構&#xff0c;數據元素的邏輯順序是通過鏈表中的引用鏈接次序實現的 。 可以形象的理解&#xff0c;在邏輯上來看&#xff0c;鏈表就像是一節節火車車廂。 鏈表的分類&#xff1a;鏈表的結構有很多種&#xff0c;單向…

替換word中的excel

PostMapping("/make/report/target/performance/first") public AjaxResult makeTargetReportFirst(RequestBody MakeReportDTO makeReportDTO) {Map<String, String> textReplaceMap new HashMap<>();// 替換日期LocalDateTime nowData LocalDateTime…

深入探索百度智能云千帆AppBuilder:從零開始構建AI應用

在數字化轉型的浪潮中&#xff0c;企業對高效、智能的應用開發平臺的需求日益增長。百度智能云千帆AppBuilder&#xff08;以下簡稱AppBuilder&#xff09;憑借其強大的功能和靈活的開發方式&#xff0c;成為企業級大模型應用開發的理想選擇。本文將詳細介紹如何使用AppBuilder…

測試工程師要如何開展單元測試

單元測試是軟件開發過程中至關重要的環節&#xff0c;它通過驗證代碼的最小可測試單元(如函數、方法或類)是否按預期工作&#xff0c;幫助開發團隊在早期發現和修復缺陷&#xff0c;提升代碼質量和可維護性。以下是測試工程師開展單元測試的詳細步驟和方法&#xff1a; 一、理…

NODE-I916 I721模塊化電腦發布,AI算力與超低功耗的完美平衡

在智能工業與邊緣計算蓬勃發展的今天&#xff0c;企業對計算設備的性能與能效需求日益嚴苛。全新推出NODE-I916與NODE-I721模塊化電腦&#xff0c;分別搭載英特爾 酷睿? Ultra 平臺與Alder Lake-N平臺&#xff0c;以差異化CPU配置為核心&#xff0c;為AI推理、工業自動化及嵌入…

采集需要登錄網站的教程

有些網站需要用戶登錄才能顯示相關信息&#xff0c;如果要采集這類網站&#xff0c;有以下幾個方法&#xff1a; 1. 寫發布模塊來抓包獲取post的數據&#xff1b; 2. 有些采集器內置瀏覽器獲取這些信息&#xff0c;但是經常獲取的不準確&#xff0c;可靠性太低&#xff1b; 3. …

六足連桿爬行機器人的simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.完整工程文件 1.課題概述 六足連桿爬行機器人的simulink建模與仿真。通過simulink&#xff0c;對六足機器人的六足以及機身進行simulink建模&#xff0c;模擬其行走&#xff0c;仿真輸出機器人行走時六足的坐…

什么是物聯網 (IoT):2024 年物聯網概述

物聯網&#xff08;IoT&#xff09;是一個有望徹底改變我們生活、工作以及與環境互動方式的概念。如今&#xff0c;越來越多的新興企業和老牌企業都在利用物聯網的力量創造創新產品與服務。正因為這一轉變&#xff0c;互聯互通已成為我們生活中不可或缺的一部分&#xff0c;科技…

MVC入門(5)-- HttpMessageConverter 消息轉換器

概念 HttpMessageConverter 是 Spring 框架中用于處理 HTTP 請求和響應數據的核心接口&#xff0c;負責在 Java 對象與 HTTP 消息體&#xff08;請求體或響應體&#xff09;之間進行雙向轉換。簡單來說&#xff0c;它是 Spring 用來將 HTTP 請求中的原始數據&#xff08;如 JS…

Spark,連接MySQL數據庫,添加數據,讀取數據

以下是使用Spark連接MySQL數據庫、添加數據和讀取數據的步驟&#xff08;基于Scala API&#xff09;&#xff1a; 1. 準備工作 - 添加MySQL驅動依賴 在Spark項目中引入MySQL Connector JAR包&#xff08;如 mysql-connector-java-8.0.33.jar &#xff09;&#xff0c;或通過Sp…

關于 APK 反編譯與重構工具集

一、apktool — APK 解包 / 重打包 apktool 是一款開源的 Android APK 工具&#xff0c;用于&#xff1a; 反編譯 APK 查看資源和布局文件 生成 smali 文件&#xff08;DEX 的反匯編&#xff09; 對 APK 進行修改后重新打包 它不能還原 Java 源碼&#xff0c;只能將 D…

[解決方案] Word轉PDF

背景&#xff1a; 之前做過一些pdf導出&#xff0c; 客戶提了一個特別急的需求&#xff0c; 要求根據一個模版跟一個csv的數據源&#xff0c; 批量生成PDF&#xff0c; 因為之前用過FOP&#xff0c; 知道調整樣式需要特別長的時間&#xff0c; 這個需求又特別急&#xff0c; 所…

01 基本介紹及Pod基礎

01 查看各種資源 01-1 查看K8s集群的內置資源 [rootmaster01 ~]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 …