CSS詳解:特性、選擇器與優先級

CSS詳解:特性、選擇器與優先級

目錄

  • CSS詳解:特性、選擇器與優先級
    • 一、CSS的核心特性
      • 1. 層疊性(Cascading)
      • 2. 繼承性(Inheritance)
      • 3. 優先級(Specificity)
      • 4. 響應式設計
      • 5. 動畫與過渡
    • 二、CSS選擇器詳解
      • 1. 基本選擇器
      • 2. 組合選擇器
      • 3. 屬性選擇器
      • 4. 偽類選擇器
      • 5. 偽元素選擇器
    • 三、CSS優先級(Specificity)詳解
      • 1. 優先級計算規則
        • 例子
      • 2. !important的作用
      • 3. 層疊順序
    • 四、實戰示例
    • 五、總結

CSS(Cascading Style Sheets,層疊樣式表)是前端開發中不可或缺的技術之一。它負責網頁的外觀和布局,與HTML結構和JavaScript行為共同構建了現代網頁。本文將詳細介紹CSS的核心特性、選擇器的種類及其優先級(Specificity),幫助你更好地理解和運用CSS。


一、CSS的核心特性

1. 層疊性(Cascading)

CSS的“層疊”指的是當多個樣式規則作用于同一元素時,瀏覽器會根據一定的規則決定最終應用哪一條樣式。這些規則包括樣式來源(如瀏覽器默認樣式、外部樣式表、內聯樣式等)、選擇器優先級和聲明順序。

2. 繼承性(Inheritance)

某些CSS屬性會從父元素繼承到子元素。例如,colorfont-family等文本相關屬性會自動傳遞給子元素,而marginpadding等布局屬性則不會繼承。可以通過inheritinitialunset等關鍵字手動控制繼承行為。

3. 優先級(Specificity)

當多個規則作用于同一元素時,優先級決定了哪條規則生效。優先級由選擇器的類型和數量決定,后文將詳細介紹。

4. 響應式設計

CSS支持媒體查詢(Media Queries),可以根據不同的設備和屏幕尺寸應用不同的樣式,實現響應式布局。

5. 動畫與過渡

CSS3引入了動畫(@keyframes)和過渡(transition)屬性,使網頁交互更加豐富和流暢。


二、CSS選擇器詳解

選擇器用于選中HTML文檔中的元素,以便為其應用樣式。選擇器的種類豐富,靈活組合可以實現復雜的樣式控制。

1. 基本選擇器

  • 元素選擇器:選中所有指定標簽的元素
    p { color: blue; }
    
  • 類選擇器:選中所有帶有指定class的元素
    .highlight { background: yellow; }
    
  • ID選擇器:選中指定id的元素(頁面唯一)
    #header { font-size: 2em; }
    
  • 通配符選擇器:選中所有元素
    * { box-sizing: border-box; }
    

2. 組合選擇器

  • 后代選擇器:選中某元素內部的所有指定后代元素
    .nav a { color: red; }
    
  • 子元素選擇器:只選中直接子元素
    ul > li { list-style: none; }
    
  • 相鄰兄弟選擇器:選中緊跟在某元素后的指定元素
    h2 + p { margin-top: 0; }
    
  • 通用兄弟選擇器:選中同級后面所有指定元素
    h2 ~ p { color: gray; }
    

3. 屬性選擇器

  • 存在屬性
    input[required] { border: 1px solid red; }
    
  • 屬性值等于
    a[target="_blank"] { color: orange; }
    
  • 屬性值包含
    [class~="btn"] { padding: 10px; }
    
  • 屬性值以某字符串開頭/結尾/包含
    a[href^="https"] { color: green; }
    a[href$=".pdf"] { color: red; }
    a[href*="example"] { font-weight: bold; }
    

4. 偽類選擇器

  • 結構偽類
    li:first-child { font-weight: bold; }
    li:last-child { color: blue; }
    li:nth-child(2n) { background: #eee; }
    
  • 狀態偽類
    a:hover { text-decoration: underline; }
    input:focus { border-color: blue; }
    

5. 偽元素選擇器

  • 常用偽元素
    p::first-line { font-size: 1.2em; }
    p::first-letter { color: red; }
    div::before { content: "★"; }
    div::after { content: "☆"; }
    

三、CSS優先級(Specificity)詳解

當多個選擇器選中同一元素并設置了相同的屬性時,瀏覽器會根據優先級規則決定最終應用哪一條樣式。

1. 優先級計算規則

優先級由四個部分組成,通常用(a, b, c, d)表示:

  • a:內聯樣式(如style="..."),有最高優先級
  • b:ID選擇器的數量
  • c:類選擇器、屬性選擇器、偽類的數量
  • d:元素選擇器、偽元素的數量

優先級比較時,從左到右依次比較,遇到高的就確定勝負。

例子
選擇器優先級
#header(0,1,0,0)
.nav .item(0,0,2,0)
ul li a(0,0,0,3)
a:hover(0,0,1,1)
style="color:red"(1,0,0,0)

2. !important的作用

!important可以提升某條樣式的優先級,使其覆蓋其他規則。但應謹慎使用,避免維護困難。

p { color: blue !important; }

3. 層疊順序

當優先級相同時,后寫的規則會覆蓋前面的規則。


四、實戰示例

<!DOCTYPE html>
<html>
<head><style>p { color: black; }                /* (0,0,0,1) */.highlight { color: orange; }      /* (0,0,1,0) */#main { color: green; }            /* (0,1,0,0) */p.highlight { color: blue; }       /* (0,0,1,1) */p { color: red !important; }       /* (0,0,0,1) + !important */</style>
</head>
<body><p id="main" class="highlight">Hello CSS!</p>
</body>
</html>

分析:

  • p:color: black
  • .highlight:color: orange
  • #main:color: green
  • p.highlight:color: blue
  • p:color: red !important

最終顯示為紅色,因為!important提升了優先級。


五、總結

  • CSS的特性包括層疊、繼承、優先級、響應式、動畫等。
  • 選擇器種類豐富,合理組合可以精準選中目標元素。
  • 優先級決定了樣式的最終應用,理解其計算規則有助于解決樣式沖突。
  • !important應謹慎使用,優先考慮優化選擇器結構。

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

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

相關文章

《算法導論(第4版)》閱讀筆記:p86-p90

《算法導論(第4版)》學習第 19 天&#xff0c;p83-p85 總結&#xff0c;總計 3 頁。 一、技術總結 無。 二、英語總結(生詞&#xff1a;2) 1. inkling (1)inkling: inclen(“utter in an undertone&#xff0c;低聲說話”) c. a hint(提示)&#xff1b;a slight knowledg…

nginx概念及使用

一、Nginx 核心概念 Nginx&#xff08;發音為 "engine-x"&#xff09;是一個高性能、開源的 Web 服務器和反向代理服務器&#xff0c;由俄羅斯工程師伊戈爾?賽索耶夫&#xff08;Igor Sysoev&#xff09;于 2004 年開發&#xff0c;最初用于解決當時高并發場景下 Ap…

2025藍橋杯JAVA編程題練習Day8

1. 路徑 題目描述 小藍學習了最短路徑之后特別高興&#xff0c;他定義了一個特別的圖&#xff0c;希望找到圖 中的最短路徑。 小藍的圖由 2021 個結點組成&#xff0c;依次編號 1 至 2021。 對于兩個不同的結點 a, b&#xff0c;如果 a 和 b 的差的絕對值大于 21&#xff0…

【趙渝強老師】Memcached的路由算法

Memcached支持兩種不同方式的客戶端路由算法&#xff0c;即&#xff1a;求余數Hash算法和一致性Hash算法。下面分別進行介紹。 一、 求余數的路由算法 求余數Hash算法的客戶端路由是對插入數據的鍵進行求余數&#xff0c;根據余數來決定存儲到哪個Memcached實例。 視頻講解如…

NLP學習路線圖(一): 線性代數(矩陣運算、特征值分解等)

引言&#xff1a;語言與矩陣的奇妙邂逅 在自然語言處理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每個詞語都像被施了變形術的精靈&#xff0c;在數學的殿堂中翩翩起舞。當我們用"king - man woman queen"這樣的向量魔法破解語義密碼時&#xff0c;線性…

BUUCTF PWN刷題筆記(持續更新!!)

ciscn_2019_c_1 64位&#xff0c;沒有開啟保護。點進去沒發現明顯的漏洞函數&#xff0c;考慮泄露libc基地址的rop構造。先看看有多少gadget 估計也夠用了。puts函數只接受一個參數&#xff0c;觀看匯編看看用的哪個寄存器傳輸的參數。 用的是edi。但是我們怎么找到so的版本呢…

Java EE初階——線程安全

1. 線程的狀態 1. 線程狀態分類&#xff08;Thread.State 枚舉&#xff09; Java 定義了 6 種線程狀態&#xff0c;這些狀態均由 java.lang.Thread.State 枚舉表示&#xff1a; NEW&#xff08;新建&#xff09; 線程對象已創建&#xff0c;但尚未調用 start() 方法。此時線程…

Vue 3.0中響應式依賴和更新

響應式依賴和更新是Vue 3.0中最重要的機制&#xff0c;其核心代碼如下&#xff0c;本文將結合代碼對這個設計機制作出一些解釋。 // 全局依賴存儲&#xff1a;WeakMap<target, Map<key, Set<effect>>> const targetMap new WeakMap();// 當前活動的副作用函…

一、內存調優

一、內存調優 什么是內存泄漏 監控Java內存的常用工具 內存泄露的常見場景 內存泄露的解決方案 內存泄露與內存溢出的區別 內存泄露&#xff1a;在Java中如果不再使用一個對象&#xff0c;但是該對象依然在GC ROOT的引用鏈上&#xff0c;這個對象就不會被垃圾回收器回收&…

Linux /etc/rc.d/init.d/

在傳統的 SysV init 系統中&#xff0c;服務啟動腳本通常位于 /etc/rc.d/init.d/ 目錄下。這些腳本可以直接執行以啟動、停止或重啟服務&#xff0c;并且可以接受參數如 start, stop, status 等。 如果你想知道位于 /etc/rc.d/init.d/ 目錄下的某個腳本文件實際上指向哪里,如果…

S7 200 smart連接Profinet轉ModbusTCP網關與西門子1200PLC配置案例

控制要求&#xff1a;使用MODBUSTCP通信進行兩臺PLC之間的數據交換&#xff0c;由于改造現場不能改動程序&#xff0c;只留出了對應的IQ地址。于是客戶決定使用網關進行通訊把數據傳到plc。 1、讀取服務器端40001~40005地址中的數據&#xff0c;放入到VW200~VW208中&#xff1…

打破傳統倉庫管理困局:WMS如何重構出入庫全流程

引言 在制造業與零售業高速發展的今天&#xff0c;倉庫管理仍普遍面臨效率低、錯發漏發頻發、庫存數據滯后等痛點。人工登記導致30%的錯單率&#xff0c;貨位混亂讓揀貨耗時增加50%&#xff0c;而賬實不符引發的二次采購成本更吞噬著企業利潤。如何突破傳統管理桎梏&#xff1…

Text2SQL在Spark NLP中的實現與應用:將自然語言問題轉換為SQL查詢的技術解析

概述 SQL 仍然是當前行業中最受歡迎的技能之一 免責聲明&#xff1a;Spark NLP 中的 Text2SQL 注釋器在 v3.x&#xff08;2021 年 3 月&#xff09;中已被棄用&#xff0c;不再使用。如果您想測試該模塊&#xff0c;請使用 Spark NLP for Healthcare 的早期版本。 自新千年伊…

微服務項目->在線oj系統(Java版 - 5)

相信自己,終會成功 微服務代碼: lyyy-oj: 微服務 目錄 C端代碼 用戶題目接口 修改后用戶提交代碼(應用版) 用戶提交題目判題結果 代碼沙箱 1. 代碼沙箱的核心功能 2. 常見的代碼沙箱實現方式 3. 代碼沙箱的關鍵問題與解決方案 4. 你的代碼如何與沙箱交互&#xff1f; …

Vue3 Element Plus 中el-table-column索引使用問題

在 Element Plus 的 el-table 組件中&#xff0c;使用 scope.index 是不準確的。正確的索引屬性應該是 scope.$index。你的代碼需要調整為&#xff1a; vue 復制 下載 <el-button type"primary" size"default" text click"onModifyClick(scope…

Ubuntu20.04下使用dpkg方式安裝WPS后,將WPS改為中文界面方法

Ubuntu20.04下使用dpkg方式安裝WPS后&#xff0c;將WPS改為中文界面方法 說明方法 說明 Ubuntu20.04下使用dpkg方式安裝WPS后&#xff0c;打開WPS后&#xff0c;發現界面是英文的&#xff0c;如有需要可以按照下面的方法將其改為中文界面。 方法 cd /opt/kingsoft/wps-offic…

【??HTTPS基礎概念與原理?】??HTTPS vs HTTP:為什么現代網站必須用HTTPS?

以下是關于 HTTPS vs HTTP 的詳細對比分析&#xff0c;涵蓋安全性、性能差異及SEO影響&#xff0c;幫助您全面理解為何現代網站必須采用HTTPS&#xff1a; 一、安全性對比&#xff1a;HTTPS 如何解決 HTTP 的致命缺陷 1. HTTP 的安全隱患 ? 明文傳輸&#xff1a;HTTP 數據以明…

算法刷題(Java與Python)1.二分查找

目錄 二分查找 思路 總體 細節 問題一&#xff0c;為什么循環的條件是left<right ,為什么要有等號呢 問題二&#xff0c;為什么中間值是left (right - left) / 2 問題三&#xff0c;為什么最后返回的是左邊的值呢 情況 1&#xff1a;target 存在于數組中 情況 2&a…

芯片生態鏈深度解析(二):基礎設備篇——人類精密制造的“巔峰對決”

【開篇&#xff1a;設備——芯片工業的“劍與盾”】 當ASML的EUV光刻機以每秒5萬次激光脈沖在硅片上雕刻出0.13nm精度的電路&#xff08;相當于在月球表面精準定位一枚二維碼&#xff09;&#xff0c;當國產28nm光刻機在華虹產線實現“從0到1”的突破&#xff0c;這場精密制造…

MongoTemplate 基礎使用幫助手冊

前言 MongoDB 是一種流行的 NoSQL 數據庫&#xff0c;適合存儲大量的非結構化數據。MongoTemplate 是 Spring Data MongoDB 中的一個核心組件&#xff0c;它提供了一組豐富的 API 來與 MongoDB 進行交互。它封裝了許多常見的數據庫操作&#xff0c;使開發者能夠輕松執行 CRUD 操…