前端css學習筆記3:偽類選擇器與偽元素選擇器

本文為個人學習總結,如有謬誤歡迎指正。前端知識眾多,后續將繼續記錄其他知識點!

目錄

前言

一、偽類選擇器

1.概念

2.動態選擇器(用戶交互)

3.結構偽類

:first-child:選擇所有兄弟元素的第一個

:last-child:選擇所有兄弟元素的最后一個

:nth-child(n):選擇選擇所有兄弟元素的第n個

:first-of-type:所有同類型的兄弟元素的第一個

:last-of-type:所有同類型的兄弟元素的最后一個

:nth-of-type(n):所有同類型的兄弟元素的第n個

4.否定偽類(作排除)

實際應用場景

(1) 表單控件排除

(2) 導航菜單高亮

(3) 列表樣式控制

(4) 無障礙優化

5.UI選擇器

二、偽元素選擇器

::first-letter

::first-line

::selection

::before

::after


前言

偽類選擇器與偽元素選擇器作為 CSS 中極具特色的兩類選擇器,偽類選擇器專注于選取元素的特殊狀態;偽元素選擇器則著眼于元素內部的特定部分,本文將記錄偽類選擇器和偽元素選擇器的概念、用法、實際應用場景及注意事項,希望這份筆記能為同樣正在學習CSS的同學提供參考,也歡迎大家結合原課程視頻深入學習,共同進步。

網課鏈接: https://www.bilibili.com/video/BV1p84y1P7Z5/?share_source=copy_web&vd_source=faad59aa4025692c65fca19bc4320e39


一、偽類選擇器

1.概念

  • 作用:是選中特殊狀態的元素

2.動態選擇器(用戶交互)

注意順序:link(未連接),visited(已訪問),hover(懸停),active(激活)

對于一個未訪問的超鏈接,處于link,然后鼠標懸浮(hover),點擊激活(active),最后處于已訪問(visited)

visited不能寫在最后,不然,后來者居上,不會出現懸浮和激活狀態(被覆蓋)

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>偽類選擇器</title><style>/* 訪問過a元素,顏色也不會改變<a href="hhtps://www.baidu.com">去百度</a>*//* 前提是a標簽的target屬性是_self,在該頁面跳轉 *//* link和visited是超鏈接特有的 *//* 選中沒有訪問過的a元素 */a:link{color:chocolate;}/* 選中訪問過的a元素 */a:visited{color:grey;}/* 選中鼠標懸浮的a元素 */a:hover{color: cadetblue;}/* 選中激活(鼠標點擊不松手)狀態的a元素 */a:active{color: blue;}/* 這四個有順序:link visited hover active *//* hover與active可以用于其他元素,例如p,span等等 */p:hover{color: blueviolet;}/* 獲取焦點(只有表單元素才能使用focus偽類) */input:focus{/* 輸入文字顏色變成藍色 */color: blue;}select:focus{color: aqua;}</style>
</head>
<body><a  href="https://www.baidu.com" >去百度</a><a href="https://www.jd.com" >去京東</a><br><p>前端</p><!-- 輸入框 --><input type="text"><br><!-- 下拉框 --><select name="age" ><option value="under 18">18以下</option><option value="18-25">18-25歲</option><option value="26-35">26-35歲</option></select>
</body>
</html>

3.結構偽類

-child 基于其父元素的所有子代元素;-of-type 基于其父元素的所有同類型的子代元素

:first-child:選擇所有兄弟元素的第一個

:first-child 偽類與指定的元素匹配:該元素是另一個元素的第一個子元素。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>結構偽類01</title><style>/* 后代選擇器:選中div后代(兒子,孫子,。。)p元素(在div所有子元素中找),p元素的父親是誰無所謂,但是p必須是其父親的第一個兒子——結構3 *//* main的p元素變色,它是div的孫子,是后代元素,是第一個 */div p:first-child{color: blue;}/* 選中p元素,p元素的父親是誰無所謂,但是p必須是其父親的第一個兒子——結構3 *//* 同時定義了div p:first-child和p:first-child兩個選擇器,前者具有更高的特異性(因為它更具體),所以即使兩個規則都匹配,藍色的規則會覆蓋紅色的規則。 */p:first-child{color: red;}</style>
</head>
<body><!-- 結構3 --><div><p>開發</p><!-- main表示主要內容 --><main><p>張三:98</p></main><!-- div的第二個子元素 --><p>李四:88</p><p>王五:76</p><p>趙六:68</p></div></body>
</html>

:last-child:選擇所有兄弟元素的最后一個

/* 選中div的最后一個兒子元素(按照所有兄弟計算)——結構1 */div > p:last-child{        color: red;        }<!-- 結構1 --><div>        <p >張三:98</p><p>李四:88</p><p>王五:76</p><p>趙六:68  <span>99</span>  </p></div>        

選擇器拆解

  • div > p----------選擇所有直接子級<p> 元素(必須是 <div> 的直接子元素)。
  • :last-child------------進一步篩選這些 <p> 中的最后一個子元素相對于其父元素 <div>
  • 如果 <div> 的最后一個是其他元素(如 <span>),則不會匹配任何 <p>

:nth-child(n):選擇選擇所有兄弟元素的第n個

n的取值范圍:0到正無窮

  • 寫0,不選中
  • 寫n,全選中(不用)
  • 2*n,或者even:選中偶數元素
  • 2*n+1,或者odd:選中奇數元素
  • 必須寫

n的取值形式:a*x+b

  • 可以寫數字(a=0),選中單個;但是不要超過兄弟元素個數
  • 可以寫表達式(固定格式a*x+b),進行一定范圍選中
  • 例如,可以寫-n+5,選中前5個(n的值從0開始遍歷,到n為5結束),但是不能寫5-n
 /*選中div的第n個兒子p元素(按照所有兄弟計算)——結構1  */div > p:nth-child(3){color: blue;}

注意:它基于父元素中的所有子元素來計算的,而不僅僅是特定類型的子元素。它會按照子元素的順序進行編號,然后根據選擇器的規則來選擇元素。

  • nth-child(-n+4) 的意思是選擇父元素中的前 4 個子元素(包括所有類型的子元素,而不僅僅是 <p> 元素
    • 第 1 個子元素是 <span>
    • 第 2 個子元素是第一個 <p>(張三)。
    • 第 3 個子元素是第二個 <p>(李四)。
    • 第 4 個子元素是第三個 <p>(王五)。

因此,nth-child(-n+4) 會選擇這 4 個子元素,但只有其中的 <p> 元素會應用樣式。

希望選擇前 4 個 <p> 元素,而不是前 4 個子元素,應該使用 nth-of-type,而不是 nth-child

<!-- 選中div的第4,3,2,1個子代p元素(先找子代元素) -->
div > p:nth-child(-n+4){background-color: burlywood;}<div><span>測試</span> <!-- 第一個子代元素 --><p>張三:98</p><p>李四:88</p><p>王五:76</p><p>趙六:68</p>
</div>
<!--在這個結構中,<span> 是第一個子元素,而 <p> 元素是從第二個子元素開始的。  -->

:first-of-type:所有同類型的兄弟元素的第一個

選中div的第一個兒子p元素(按所有同類型的兄弟計算)

  • 選中div的第一個同類型(p元素)的(狀態)子代p元素

:last-of-type:所有同類型的兄弟元素的最后一個

選中div的最后一個兒子p元素(按所有同類型的兄弟計算)

  • 選中div的最后一個同類型(p元素)的(狀態)子代p元素
  • 只找同類型的p元素

:nth-of-type(n):所有同類型的兄弟元素的第n個

nth-of-type 是基于特定類型的子元素來計算的,而不是所有子元素。

選中div的第n個兒子p元素(按所有同類型的兄弟計算)

  • 選中div的第n個同類型(p元素)的(狀態)子代p元素


選擇器

作用

當前示例匹配結果

div > p:last-child

選擇作為父元素最后一個子元素的直接 <p>

<p>趙六:68</p>

div p:last-of-type

選擇父元素內同類型的最后一個 <p>

<p>趙六:68</p>

div > p:last-of-type

:last-of-type

,但僅限直接子級

<p>趙六:68</p>

4.否定偽類(作排除)

  • 作用:排除滿足括號中條件的元素
  • 語法:not(選擇器){

????????屬性名:屬性值

}

括號里可以是類選擇器,屬性選擇器,id選擇器,結構選擇器等等

實際應用場景

(1) 表單控件排除
/* 為所有非隱藏輸入框添加邊框 */
input:not([type="hidden"]) {border: 1px solid #ccc;
}
(2) 導航菜單高亮
/* 當前頁面菜單項不加粗 */
.nav-item:not(.active) {font-weight: normal;
}
(3) 列表樣式控制
/* 最后一項不加下劃線 */
li:not(:last-child) {border-bottom: 1px solid #eee;
}
(4) 無障礙優化
/* 非禁用按鈕懸停效果 */
button:not([disabled]):hover {background-color: #555;
}

注意事項

不支持嵌套 :not()

/* 無效寫法 */
:not(:not(p)) {}

不能包含偽元素

/* 無效寫法 */
:not(::before) {}

優先級計算
:not() 的優先級由其參數決定。例如:

  • :not(.class) 的優先級 = 類選擇器(10)
  • :not(#id) 的優先級 = ID 選擇器(100)

5.UI選擇器

選中就變大,不選中就保持原狀;

focus是選中變大,取消選中不變回原狀

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>/* 選中的是勾選得復選框或者單選框(不能寫顏色的樣式) */input:checked{width: 30px;height: 40px;}/* 選中被禁用的input元素 */input:disabled{background-color:grey;}</style>
</head>
<body><input type="checkbox"><input type="radio" name="gender"><input type="radio" name="gender"><input type="text"><input type="text" disabled>
</body>
</html>

二、偽元素選擇器

  • 作用:CSS 偽元素是一種特殊的選擇器,它可以在不改變 HTML 結構的情況下對頁面元素的特定部分進行樣式設置選中元素中的一些特殊位置。
  • 使用兩個冒號

::first-letter

選中塊級元素的第一個字母(漢字,字符) 設置特殊樣式

或者:使用span標簽包裹要改變的元素,使用元素選擇器

::first-line

選中塊級元素的第一行 設置特殊樣式

  • 會隨著界面大小變化,第一行文字變化,但永遠只選中第一行

::selection

選中被鼠標選擇的文字 設置特殊樣式

注意:以下屬性可以與 ::selection 一起使用:(不能與字體大小一起使用)

  • color
  • background-color
  • text-decoration
  • text-shadow

::before

在元素最開始的位置,創建一個子元素(必須用content屬性指定內容,屬性:值的方式)

使用 content 屬性指定要插入的內容。content 的值可以是:

  • 字符串:content: "Hello world!";
  • 圖片:content: url(myimage.jpg);
  • 無內容:content: none;
  • 計數器:content: counter(li);
  • 引號:content: open-quote;
  • 屬性值:content: " (" attr(href) ")";

注意:插入的內容仍然位于指定元素內部。插入的內容會添加到元素內部的其他內容之前。

::after

在元素最后的位置,創建一個子元素(必須用content屬性指定內容

注意:插入的內容仍然位于指定元素內部。插入的內容會添加到元素內部的其他內容之后。

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

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

相關文章

深入探索 PDF 數據提取:PyMuPDF 與 pdfplumber 的對比與實戰

在數據處理和分析領域&#xff0c;PDF 文件常常包含豐富的文本、表格和圖形信息。然而&#xff0c;從 PDF 中提取這些數據并非易事&#xff0c;尤其是當需要保留格式和顏色信息時。幸運的是&#xff0c;Python 社區提供了多個強大的庫來幫助我們完成這項任務&#xff0c;其中最…

Springboot注冊過濾器的三種方式(Order 排序)

一、使用 Component Order&#xff08;簡單但不夠靈活&#xff09; 適用于全局過濾器&#xff0c;無需手動注冊&#xff0c;Spring Boot 會自動掃描并注冊。 Component Order(1) // 數字越小&#xff0c;優先級越高 public class AuthFilter implements Filter {Autowired /…

電腦硬件詳解

前幾天我的風扇轉的很快&#xff0c;而且cpu占用率很高&#xff0c;然后我在想怎么回事&#xff0c;然后就淺淺研究了一下電腦的硬件。 筆記本主板&#xff1a; 臺式機主板&#xff1a; 圖1&#xff1a; 圖2&#xff1a; 電腦硬件詳解 電腦的硬件是組成計算機系統的物理設…

力扣47:全排列Ⅱ

力扣47:全排列Ⅱ題目思路代碼題目 給定一個可包含重復數字的序列 nums &#xff0c;按任意順序 返回所有不重復的全排列。 思路 又是任意順序和所有不重復的排列&#xff0c;顯而易見我們要使用回溯的辦法。 首先是回溯的結束條件即新數組的長度等于nums的長度。這道題的難點…

學習筆記091——如何實現web登錄時,密碼復雜度校驗?(后端)

1、創建工具類 /*** 密碼復雜度校驗* param password 密碼*/ public static void validatePassword(String password) {// 至少8位if (password.length() < 8) {throw new IllegalArgumentException("密碼長度至少為8位");}// 包含大小寫字母if (!password.matche…

雪花算法snowflake分布式id生成原理詳解,以及對解決時鐘回撥問題幾種方案討論

一、前言在日趨復雜的分布式系統中&#xff0c;數據量越來越大&#xff0c;數據庫分庫分表是一貫的垂直水平做法&#xff0c;但是需要一個全局唯一ID標識一條數據或者MQ消息&#xff0c;數據庫id自增就顯然不能滿足要求了。因為場景不同&#xff0c;分布式ID需要滿足以下幾個條…

【PCB設計經驗】去耦電容如何布局?

0805 和 0603 以及更小 封裝的電容用作于對中高頻的去耦,其擺放位置是有要求的: 一、建議盡可能的靠近主控芯片的 電源管腳放置。 二、使用較寬和短的引線連接到電源和地過孔可以采用如下 圖 4–1 中的圖 ( 2 )、( 3)、 ( 4 )任意一種方式,避免使用長線或者較細的…

自動化運維實驗

目錄 一、實驗拓撲 二、實驗目的 三、實驗步驟 實驗思路&#xff1a; 代碼部分&#xff1a; 四、實驗結果&#xff1a; 一、實驗拓撲 二、實驗目的 利用python腳本&#xff0c;在本地&#xff0c;或者虛擬機里實現&#xff0c;設備CRC數量統計&#xff0c;并輸出成表格 三、實驗…

Wed前端第二次作業

一、作業1&#xff1a;完成自己學校的官網&#xff0c;動忘內容直接貼&#xff0c;至少三個不同的頁面1、界面1&#xff08;1&#xff09;相關代碼<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

第5節 大模型分布式推理通信優化與硬件協同

前言 在分布式推理中,多設備(如GPU、CPU)之間的數據傳輸(通信)是連接計算的“橋梁”。如果通信效率低下,即使單設備計算能力再強,整體性能也會大打折扣。想象一下:如果工廠之間的物流卡車跑得比生產速度還慢,再多的工廠也無法提高整體產量。 本節將從最基礎的單設備內…

XGBoost 的適用場景以及與 CNN、LSTM 的區別

XGBoost 的核心優勢與適用場景XGBoost 是一種梯度提升決策樹算法&#xff0c;屬于集成學習方法。它在處理結構化/表格化數據方面表現極其出色&#xff0c;是 Kaggle 競賽和工業界廣泛應用的“冠軍”模型。其核心優勢和應用場景包括&#xff1a;1. 結構化/表格化數據數據形式&a…

快速設計簡單嵌入式操作系統(3):動手實操,基于STC8編寫單任務執行程序,感悟MCU指令的執行過程

引言 前面我們陸續學習了操作系統常見的基礎概念&#xff0c;接著簡單了解了一下8051單片機的內存結構和執行順序切換的相關概念。接下來&#xff0c;我們就開始進行實操&#xff0c;基于8051單片機STC8來編寫一個簡單的操作系統&#xff0c;這里我們先實現一個單任務的執行程…

Spring AI Alibaba - 聊天機器人快速上手

本節對應 Github&#xff1a;https://github.com/JCodeNest/JCodeNest-AI-Alibaba/tree/master/spring-ai-alibaba-helloworld 本文將以阿里巴巴的通義大模型為例&#xff0c;通過 Spring AI Alibaba 組件&#xff0c;手把手帶你完成從零到一的構建過程&#xff1a;首先&#…

串口通信學習

不需要校驗位就選8位&#xff0c;需要校驗位就選9位&#xff01;USRTUSART框圖STM32的外設引腳這是USART的基本結構。數據幀&#xff0c;八位是這個公式還是很重要的&#xff01;如果在編輯器里面使用printf打印漢字的話&#xff0c;會出現亂碼的話&#xff0c;前提是你的編碼格…

面試經典150題[001]:合并兩個有序數組(LeetCode 88)

合并兩個有序數組&#xff08;LeetCode 88&#xff09; https://leetcode.cn/problems/merge-sorted-array/?envTypestudy-plan-v2&envIdtop-interview-150 1. 題目背景 你有兩個已經排好序的數組&#xff1a; nums1&#xff1a;前面是有效數字&#xff0c;后面是空位&…

快速安裝達夢8測試庫

計劃&#xff1a;數據庫名實例名PORT_NUMMAL_INST_DW_PORTMAL_HOSTMAL_PORTMAL_DW_PORTDMDWDBINST_1533615101192.168.207.612510135101*****[2025-08-11 15:14:34]***** Last login: Fri Jul 25 17:36:04 2025 from 192.168.88.48 [rootdm01 ~]# ip a 1: lo: <LOOPBACK,UP,…

Hive中優化問題

一、小文件合并優化Hive中的小文件分為Map端的小文件和Reduce端的小文件。(1)、Map端的小文件優化是通過CombineHiveInputFormat操作。相關的參數是&#xff1a;set hive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormat;(2)、Reduce端的小文件合并Map端的小…

tlias智能學習輔助系統--Maven高級-繼承

目錄 一、打包方式與應用場景 二、父子工程繼承關系 1. 父工程配置 2. 子工程配置 三、自定義屬性與引用屬性 1. 定義屬性 2. 在 dependencyManagement 中引用 3. 子工程中引用 四、dependencyManagement 與 dependencies 的區別 五、項目結構示例 六、小結 在實際開…

把 AI 押進“小黑屋”——基于 LLM 的隱私對話沙盒設計與落地

標簽&#xff1a;隱私計算、可信執行環境、LLM、沙盒、內存加密、TEE、SGX、Gramine ---- 1. 背景&#xff1a;甲方爸爸一句話&#xff0c;“數據不能出機房” 我們給某三甲醫院做智能問診助手&#xff0c;模型 70 B、知識庫 300 GB。 甲方只給了兩條鐵律&#xff1a; 1. 患者…

Java 大視界 -- Java 大數據在智能教育學習效果評估指標體系構建與精準評估中的應用(394)

Java 大視界 -- Java 大數據在智能教育學習效果評估指標體系構建與精準評估中的應用&#xff08;394&#xff09;引言&#xff1a;正文&#xff1a;一、傳統學習評估的 “數字陷阱”&#xff1a;看不全、說不清、跟不上1.1 評估維度的 “單行道”1.1.1 分數掩蓋的 “學習真相”…