使用css的類名交集複合選擇器 《轉》

来源:http://www.cnblogs.com/Tanghongchang/archive/2017/07/29/7256338.html
-Advertisement-
Play Games

複合選擇器就是兩個或多個基本選擇器,通過不同方式連接而成的選擇器,主要包括“交集”選擇器、“並集”選擇器、“後代”選擇器。 交集選擇器 “交集”複合選擇器是由兩個選擇器直接連接構成,其結果是選中二者各自元素範圍的交集。其中第一個必須是標記選擇器,第二個必須是類別選擇器或者ID選擇器。這兩個選擇器之間 ...


 

 

複合選擇器就是兩個或多個基本選擇器,通過不同方式連接而成的選擇器,主要包括“交集”選擇器、“並集”選擇器、“後代”選擇器。

 

交集選擇器

“交集”複合選擇器是由兩個選擇器直接連接構成,其結果是選中二者各自元素範圍的交集。其中第一個必須是標記選擇器,第二個必須是類別選擇器或者ID選擇器。這兩個選擇器之間不能有空格,必須連續書寫。

註意其中第一個必須是標記選擇器,如p.class1,但有時候會看到.class1.class2,即2個都是類選擇器,在其他瀏覽器中是允許出現這種情況的,但IE6不相容。如下表:

兩個類選擇器的“交集”複合選擇器瀏覽器支持表
Mac: Safari 4.0 支持
Mac: Chrome 5.0 支持
Mac: FireFox 3.6 支持
Mac: Opera 10 支持
Win: FireFox 3.6 支持
Win: Opera 10 支持
Win: IE6 不支持
Win: IE7 支持
Win: IE8 支持

複合選擇器的使用

這是個簡單的tab菜單:

如下是html代碼:

1 2 3 4 5 6 <ul class="nav">     <li class="first"><a href="">節目</a></li>     <li class="current"><a href="">合集</a></li>     <li><a href="">草稿</a></li>     <li class="last"><a href="">項目</a></li> </ul>

為了實現以上效果,我們在css中可以使用複合選擇器。

選擇<a> 標簽

可以用一個選擇器來定義所有的 <a> 元素, 如下:

.nav li a { }

選擇第一個 <a> 元素

為了增加列表左上角的圓角效果, 你需要選擇第一個 <a> 元素. 這可以用如下的選擇器來實現:

.nav li.first a { }

選擇最後一個 <a> 元素

為了增加列表右上角的圓角效果, 你需要選擇最後一個 <a> 元素. 這可以用如下的選擇器來實現:

.nav li.last a { }

突出顯示當前頁

通過改變tab的顏色來顯示頁面是當前頁,我們可以在類名中加入current這個類名來實現,如下:

.nav li.current a { }

為當前頁面的左右上角添加圓角樣式

現在有個問題,第一個和最後一個選項被選中的時候拐角是直角的.為了達到選中時候是當前頁的樣式,拐角也是圓角效果,我們需要給專門給它們寫特殊的選擇器,由於現在我們的類名都在同一個元素中,所以我們最終可以用交集複合選擇器來實現,如下:

.nav .first.current a { }
.nav .last.current a { }

結果

這看上去很簡單,是不是?就像上面提到的,現在的問題是:IE5和IE6都不支持類名交集複合選擇器。IE5和IE6在識別類名時候只會識別最後一個類名。效果如下:

.nav .first.current a { }
.nav .last.current a { }

IE5和IE6把這2個選擇器解析為:

.nav .current a { }
.nav .current a { }

這意味著這些瀏覽器會給所有的當前頁都增加圓角效果,效果如下:

在IE7下也是沒問題的,說明IE7也支持類名交集複合選擇器。

解決的辦法

可以給第一個和最後一個li單獨加一個current的樣式,但這樣增加了js的負擔。

1 2 3 4 5 6 <ul class="nav">;     <li class="first first_current"><a href="">節目</a></li>;     <li class="current"><a href="">合集</a></li>;     <li><a href="">草稿</a></li>;     <li class="last last_current"><a href="">項目</a></li>; </ul>;
.nav .first_current a { }
.nav .last_current a { }

討論

有一種方法可以讓我們不用在頁面中增加像first、last這種多餘的類名,那就是使用css3的樣式。css3讓我們選擇元素變得越來越簡單,實現頭尾效果可用如下效果:

li:first-of-type a { }
li:last-of-type a { }

 


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

-Advertisement-
Play Games
更多相關文章
  • 最近一段時間與redis接觸比較頻繁。發現有些東西還是工作中經常會用到的,自己也花了點時間鞏固下。本篇文章主要是以總結性的方式梳理,因為redis的主題很大,任何一個技術點展開都是幾篇文章的量。也可以說這篇文章是個概覽。 ...
  • 實習了一周,基礎太差,只做了寫頁面一件事,真正做起來才發現要對接後臺,我寫的完全不合格,最後還得麻煩老大幫忙重新改了一遍才能給後臺綁定數據,前路漫漫啊(年紀輕輕為啥這麼想不開,打什麼代碼呢? ) 1.position:absolute 與定位問題使用了position:absolute之後發現想要居 ...
  • 一、HTML編輯工具:Sublime Text 二、HTML實體字元:1、( 空格):&nbsp; 2、(<) &lt; 3、(>)&gt; 4、(&)&amp; 5、(“)&quot;等 三、基本HTML標記: 註釋標記:<!-- 這是註釋內容 --> 換行標記:<br/> 段落標記: <p></ ...
  • ES6提供的兩個靜態方法: Array.from Array.of ES6提供操作、填充和過濾數組的方法: Array.prototype.copyWidthin Array.prototype.fill Array.prototype.find Array.prototype.findIndex ...
  • html代碼: <input type="button" id="J_selectImage" value="圖片上傳" /><div id="J_imageView"><?php foreach($imgs as $row):?><div class="img_view"><img class=' ...
  • html代碼: <p><input type="hidden" id="url1" name="IDCardPicture1" value="" /> <input type="button" id="image1" value="選擇圖片" style="width: 150px;height:  ...
  • 對JQuery對象的屬性,特性以及數據的操作: 特性(attributes)和屬性(properties): 特性的值是字元串。 屬性的值不光為字元串,而且可以為布爾值,對象,數字。 元素的屬性和特性有動態鏈接,如果特性在dom對象中存在,其中一個發生變化,另一個也會變化 如果特性是本來就在dom對 ...
  • 重新學習了一遍js對象,但方法的靈活使用需要代到案例中學習,共勉 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...