CSS選擇器:偽類(圖文詳解)

来源:https://www.cnblogs.com/smyhvae/archive/2018/01/13/8280814.html
-Advertisement-
Play Games

本文最初發表於 "博客園" ,併在 "GitHub" 上持續更新 前端的系列文章 。歡迎在GitHub上關註我,一起入門和進階前端。 以下是正文。 偽類(偽類選擇器) 偽類 :同一個標簽,根據其 不同的種狀態,有不同的樣式 。這就叫做“偽類”。偽類用冒號來表示。 比如div是屬於box類,這一點很明 ...


本文最初發表於博客園,併在GitHub上持續更新前端的系列文章。歡迎在GitHub上關註我,一起入門和進階前端。

以下是正文。

偽類(偽類選擇器)

偽類:同一個標簽,根據其不同的種狀態,有不同的樣式。這就叫做“偽類”。偽類用冒號來表示。

比如div是屬於box類,這一點很明確,就是屬於box類。但是a屬於什麼類?不明確。因為需要看用戶點擊前是什麼狀態,點擊後是什麼狀態。所以,就叫做“偽類”。

靜態偽類和動態偽類

偽類選擇器分為兩種。

(1)靜態偽類:只能用於超鏈接的樣式。如下:

  • :link 超鏈接點擊之前
  • :visited 鏈接被訪問過之後

PS:以上兩種樣式,只能用於超鏈接。

(2)動態偽類:針對所有標簽都適用的樣式。如下:

  • :hover “懸停”:滑鼠放到標簽上的時候
  • :active “激活”: 滑鼠點擊標簽,但是不鬆手時。
  • :focus 是某個標簽獲得焦點時的樣式(比如某個輸入框獲得焦點)

PS:以上三種樣式,只能用於超鏈接。

超鏈接a標簽

超鏈接的四種狀態

a標簽有4種偽類(即對應四種狀態),要求背誦。如下:

  • :link “鏈接”:超鏈接點擊之前
  • :visited “訪問過的”:鏈接被訪問過之後
  • :hover “懸停”:滑鼠放到標簽上的時候
  • :active “激活”: 滑鼠點擊標簽,但是不鬆手時。

對應的代碼如下:(不帶註釋)

        a:link{
            color:red;
        }
        a:visited{
            color:orange;
        }
        a:hover{
            color:green;
        }
        a:active{
            color:black;
        }

對應的代碼如下:(帶註釋)

       /*讓超鏈接點擊之前是紅色*/
        a:link{
            color:red;
        }

        /*讓超鏈接點擊之後是綠色*/
        a:visited{
            color:orange;
        }
        /*滑鼠懸停,放到標簽上的時候*/
        a:hover{
            color:green;
        }
        /*滑鼠點擊鏈接,但是不鬆手的時候*/
        a:active{
            color:black;

記住,在css中,這四種狀態必須按照固定的順序寫

a:link 、a:visited 、a:hover 、a:active

如果不按照順序,那麼將失效。“愛恨準則”:love hate。必須先愛,後恨。

看一下這四種狀態的動圖效果:

超鏈接的美化

問:既然a{}定義了超鏈的屬性,和a:link{}定義了超鏈點擊之前的屬性,那這兩個有啥區別呢?

答:

a{}a:link{}的區別:

  • a{}定義的樣式針對所有的超鏈接(包括錨點)
  • a:link{}定義的樣式針對所有寫了href屬性的超鏈接(不包括錨點)

超鏈接a標簽在使用的時候,比較難。因為不僅僅要控制a這個盒子,也要控制它的偽類。

我們一定要將a標簽寫在前面,將:link、:visited、:hover、:active這些偽類寫在後面。

舉個例子。如果效果:

為了實現上面這個效果,完整版代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .nav{
            width: 960px;
            height: 50px;
            border: 1px solid red;
            margin: 100px auto;
        }
        .nav ul{
            /*去掉小圓點*/
            list-style: none;
        }
        .nav ul li{
            float: left;
            width: 120px;
            height: 50px;
            /*讓內容水平居中*/
            text-align: center;
            /*讓行高等於nav的高度,就可以保證內容垂直居中*/
            line-height: 50px;
        }
        .nav ul li a{
            display: block;
            width: 120px;
            height: 50px;
        }
        /*兩個偽類的屬性,可以用逗號隔開*/
        .nav ul li a:link , .nav ul li a:visited{
            text-decoration: none;
            background-color: purple;
            color:white;
        }
        .nav ul li a:hover{
            background-color: orange;
        }
    </style>
</head>
<body>
    <div class="nav">
        <ul>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
            <li><a href="#">網站欄目</a></li>
        </ul>
    </div>
</body>
</html>

上方代碼中,我們發現,當我們在定義a:linka:visited這兩個偽類的時候,如果它們的屬性相同,我們其實可以寫在一起,用逗號隔開就好,摘抄如下:

        .nav ul li a{
            display: block;
            width: 120px;
            height: 50px;
        }
        /*兩個偽類的屬性,可以用逗號隔開*/
        .nav ul li a:link , .nav ul li a:visited{
            text-decoration: none;
            background-color: purple;
            color:white;
        }
        .nav ul li a:hover{
            background-color: orange;
        }

如上方代碼所示,最標準的寫法,就是把link、visited、hover這三個偽類都要寫。但是前端開發工程師在大量的實踐中,發現不寫link、visited也挺相容。寫法是:

a:link、a:visited都是可以省略的,簡寫在a標簽裡面。也就是說,a標簽涵蓋了link、visited的狀態(前提是都具有了相同的屬性)。寫法如下:

        .nav ul li a{
            display: block;
            width: 120px;
            height: 50px;
            text-decoration: none;
            background-color: purple;
            color:white;
        }
        .nav ul li a:hover{
            background-color: orange;
        }

當然了,在寫a:linka:visited這兩個偽類的時候,要麼同時寫,要麼同時不寫。如果只寫a屬性和a:link屬性,不規範。

動態偽類舉例

我們在第一段中描述過,下麵這三種動態偽類,針對所有標簽都適用。

  • :hover “懸停”:滑鼠放到標簽上的時候
  • :active “激活”: 滑鼠點擊標簽,但是不鬆手時。
  • :focus 是某個標簽獲得焦點時的樣式(比如某個輸入框獲得焦點)

我們不妨來舉下例子。

舉例1:

  <style type="text/css">
  /*
    偽類選擇器:動態偽類
  */

   /*
    讓文本框獲取焦點時:
    邊框:#FF6F3D這種橙色
    文字:綠色
    背景色:#6a6a6a這種灰色
   */
    input:focus{
        border:3px solid #FF6F3D;
        color:white;
        background-color:#6a6a6a;
    }

    /*
    滑鼠放在標簽上時顯示藍色
    */
    label:hover{
        color:blue;
    }

    /*
    點擊標簽滑鼠沒有鬆開時顯示紅色
    */
    label:active{
        color:red;
    }

  </style>

效果:

利用這個hover屬性,我們同樣對錶格做一個樣式的設置:
表格舉例:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <style type="text/css">

    /*整個表格的樣式*/
    table{
        width: 300px;
        height: 200px;
        border: 1px solid blue;
        /*border-collapse屬性:對錶格的線進行摺疊*/
        border-collapse: collapse;
    }

    /*滑鼠懸停時,讓當前行顯示#868686這種灰色*/
    table tr:hover{
        background: #868686;
    }

    /*每個單元格的樣式*/
    table td{
        border:1px solid red;
    }

  </style>
 </head>
 <body>

  <table>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  </table>

 </body>
</html>

效果:

我的公眾號

想學習代碼之外的軟技能?不妨關註我的微信公眾號:生命團隊(id:vitateam)。

掃一掃,你將發現另一個全新的世界,而這將是一場美麗的意外:


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

-Advertisement-
Play Games
更多相關文章
  • 連接資料庫: 輸入資料庫密碼即可登陸。 查看mysql版本信息: 查看當前時間: 實現Windows與Ubuntu虛擬機之間的文件互傳問題。 其實很簡單就是需要安裝一個VMware tools即可。 打開文件管理就有一個VM的tar包,沒有的話就需要多掛一個cd驅動器。 右鍵,設置, 我有兩個cd驅 ...
  • Note:這篇文章是基於Android Studio 3.01版本的,NDK是R16。step1:創建一個包含C++的項目其他預設就可以了。C++ Standard指定編譯庫的環境,其中Toolchain Default使用的是預設的CMake環境;C++ 11也就是C++環境。兩種環境都可以編庫,... ...
  • 1 Cookie、Session 和 Token 都是用來做持久化處理的,目的就是讓客戶端和服務端相互認識。Http 請求預設是不持久的沒有狀態的,誰也不認識誰。 2 Cookie: 是存放在客戶端的信息,伺服器通過響應頭 Set-Cookie 欄位給客戶端,如果 Cookie 已過期一般是會被清楚 ...
  • 1. 寫這個只是為了自己記憶,有相關pdf文件,如需要留下郵箱。。 2. 在類的頭文件中儘量少引入其他頭文件 除非確有必要,否則不要引入頭文件。一般來說,應在某個類的頭文件中使用向前聲明來提及別的類(使用@class),併在實現文件中引入那些類的頭文件,這樣做可以儘量降低類之間的耦合。 如果要聲明某 ...
  • 上篇文章介紹了自定義View的創建流程,從巨集觀上給出了一個自定義View的創建步驟,本篇是上一篇文章的延續,介紹了自定義View中兩個必不可少的工具Canvas和Paint,從細節上更進一步的講解自定義View的詳細繪製方法。如果把自定義View比作蓋一座房子,那麼上篇文章就相當於教會了我們怎麼一步 ...
  • 起因 隨著餓百新零售項目一期的告一段落,算是暫時從加班的修羅場裡面解放出來了,於是就想搞點事情,正好看項目js庫的時候發現了躺在角落的jQuery,想到當初看源碼的時候斷斷續續的沒有看完一直是心頭的遺憾,於是下定決心把這個遺憾彌補了。 閱讀方法 我下載的是jQuery 3.2.1版本,大概瞄了一眼, ...
  • 以前都是默默地看園子里的文章,猥瑣的點贊,今天也分享一下自己用js實現的一個簡單mvvm框架。 最初只做了自動綁定事件,後面又參考學習了vue,knouckout以及argular實現方式,以及結合自己做WPF的一些經驗,增加了屬性綁定,今天又稍微整理了下,完善了部分功能,把代碼提交到了碼雲:htt ...
  • 先上效果圖吧. 本人菜鳥入門, 請勿噴. 首先樣式: 1 1 body{ 2 2 margin: 0; 3 3 padding: 0; 4 4 width: 100%; 5 5 height: 100%; 6 6 } 7 7 8 8 .headers{ 9 9 width: 100%; 10 10 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...