CSS選擇器概述

CSS選擇器概述

一.CSS3 選擇器分類

clipboard.png

二.選擇器語法

1. 基本選擇器語法

選擇器 類型 功能描述
* 通配選擇器 選擇文檔中全部的HTML元素
E 元素選擇器 選擇指定類型的HTML元素
#id ID選擇器 選擇指定ID屬性值爲「id」的任意類型元素
.class 類選擇器 選擇指定class屬性值爲「class」的任意類型的任意多個元素
selector1,selectorN 羣組選擇器 將每個選擇器匹配的元素集合並

 

2. 層次選擇器語法

選擇器 類型 功能描述
E  F 後代選擇器(包含選擇器) 選擇匹配的F元素,且匹配的F元素被包含在匹配的E元素內
E>F 子選擇器 選擇匹配的F元素,且匹配的F元素所匹配的E元素的子元素,注意是直接子元素,不包括子元素裏的子元素
E+F 相鄰兄弟選擇器 選擇匹配的F元素,且匹配的F元素緊位於匹配的E元素的後面
E~F 通用選擇器 選擇匹配的F元素,且位於匹配的E元素後的全部匹配的F元素

 

3. 動態僞類選擇器語法

選擇器 類型 功能描述
E:link 連接僞類選擇器 選擇匹配的E元素,並且匹配元素被定義了超連接並未被訪問過。經常使用於連接描點上
E:visited 連接僞類選擇器 選擇匹配的E元素,並且匹配元素被定義了超連接並已被訪問過。經常使用於連接描點上
E:active 用戶行爲選擇器 選擇匹配的E元素,且匹配元素被激活。經常使用於連接描點和按鈕上
E:hover 用戶行爲選擇器 選擇匹配的E元素,且用戶鼠標停留在元素E上。IE6及如下瀏覽器僅支持a:hover
E:focus 用戶行爲選擇器 選擇匹配的E元素,並且匹配元素獲取焦點

 

4. 目標僞類選擇器

選擇器 功能描述
E:target 選擇匹配E的全部元素,且匹配元素被相關URL指向

 

5.UI元素狀態僞類選擇器語法

選擇器 類型 功能描述
E:checked 選中狀態僞類選擇器 匹配選中的複選按鈕或者單選按鈕表單元素
E:enabled 啓用狀態僞類選擇器 匹配全部啓用的表單元素
E:disabled 不可用狀態僞類選擇器 匹配全部禁用的表單元素

6.結構僞類選擇器使用語法

選擇器 功能描述
E:fisrt-child 做爲父元素的第一個子元素的元素E。與E:nth-child(1)等同
E:last-child 做爲父元素的最後一個子元素的元素E。與E:nth-last-child(1)等同
E:root 選擇匹配元素E所在文檔的根元素。在HTML文檔中,根元素始終是html,此時該選擇器與html類型選擇器匹配的內容相同
E F:nth-child(n) 選擇父元素E的第n個子元素F。其中n能夠是整數(1,2,3)、關鍵字(even,odd)、能夠是公式(2n+1),並且n值起始值爲1,而不是0.
E F:nth-last-child(n) 選擇父元素E的倒數第n個子元素F。此選擇器與E:nth-child(n)選擇器計算順序恰好相反,但使用方法都是同樣的,其中:nth-last-child(1)始終匹配最後一個元素,與last-child等同
E:nth-of-type(n) 選擇父元素內具備指定類型的第n個E元素
E:nth-last-of-type(n) 選擇父元素內具備指定類型的倒數第n個E元素
E:first-of-type 選擇父元素內具備指定類型的第一個E元素,與E:nth-of-type(1)等同
E:last-of-tye 選擇父元素內具備指定類型的最後一個E元素,與E:nth-last-of-type(1)等同
E:only-child 選擇父元素只包含一個子元素,且該子元素匹配E元素
E:only-of-type 選擇父元素只包含一個同類型子元素,且該子元素匹配E元素
E:empty 選擇沒有子元素的元素,並且該元素也不包含任何文本節點

注:(1),「ul>li:nth-child(3)」表達的並非必定選擇列表ul元素中的第3個子元素li,僅有列表ul中第3個li元素前不存在其餘的元素,命題纔有意義,不然不會改變列表第3個li元素的樣式。css

(2),:nth-child(n)  中參數只能是n,不能夠用其餘字母代替。html

(3),:nth-child(odd) 選擇的是奇數項,而使用:nth-last-child(odd) 選擇的倒是偶數項瀏覽器

7.否認僞類選擇器

選擇器 功能描述
E:not(F) 匹配全部除元素F外的E元素

8.屬性選擇器語法

選擇器 功能描述
[attribute] 用於選取帶有指定屬性的元素。
[attribute=value] 用於選取帶有指定屬性和值的元素。
[attribute~=value] 用於選取屬性值中包含指定詞彙的元素。
[[attribute\ =value]](http://www.w3school.com.cn/cs... 用於選取帶有以指定值開頭的屬性值的元素,該值必須是整個單詞。
[attribute^=value] 匹配屬性值以指定值開頭的每一個元素。
[attribute$=value] 匹配屬性值以指定值結尾的每一個元素。
[attribute=value*] 匹配屬性值中包含指定值的每一個元素。

下面選擇幾個咱們通常不經常使用的選擇器來說講ide

三.實例

相鄰兄弟選擇器

選擇緊接在另外一個元素以後的第一個元素(同級元素)spa

<style>
        h1 + p {
            color:red;
        }

    </style>
<h1>彭</h1>
<p>於晏</p>

clipboard.png

看一個該選擇器應用的典型例子ssr

<style>
      body,div{
          margin: 0;
          padding: 0;
      }
        .box{
            width:400px;
        }
        .box > div{
            width:100px;
            height: 35px;
            line-height: 35px;
            text-align: center;
            float:left;
            border: 3px solid #dedede;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
<div class="box">
     <div>HTML</div>
    <div>CSS</div>
    <div>JavaScript</div>
    <div>Node.js</div>
</div>

clipboard.png

能夠看到後面幾個元素的左邊框明顯增大了3px,這裏咱們只須要用+號選擇器把除第一個元素之外的左邊框去掉就能夠l3d

.box > div + div{
            border-left: none;
        }

clipboard.png

hover

  • a:link - 正常,未訪問過的連接
  • a:visited - 用戶已訪問過的連接
  • a:hover - 當用戶鼠標放在連接上時
  • a:active - 連接被點擊的那一刻code

    當設置爲若干鏈路狀態的樣式,也有一些順序規則:orm

    • a:hover 必須跟在 a:link 和 a:visited後面
    • a:active 必須跟在 a:hover後面
body,div{
          margin: 0;
          padding: 0;
      }
      ul{
          list-style: none;
          //讓列表前的標記再也不顯示
      }
      .box{
          width:450px;
          margin: 100px;

      }
        .box > ul li{
            width: 120px;
            height:35px;
            line-height: 35px;
            text-align: center;
            float: left;
            border: 1px solid #dedede;
            box-sizing: border-box;

        }
        .box > ul >li li{
            border-top:none;
        }
        .box > ul >li +li{
            border-left: none;
        }
        .box > ul >li >ul{
            display: none;
        }
        .box > ul >li:hover ul{
            display: block;
            //主要代碼
        }
    </style>
    <div class="box">
     <ul>
         <li>
             追夢人
             <ul>
                 <li>博客動態</li>
             </ul>
         </li>
         <li>
             CSS3
             <ul>
                 <li>CSS3文章</li>
                 <li>CSS3技巧</li>
             </ul>
         </li>
         <li>
             HTML5
             <ul>
                 <li>HTML5最新動態</li>
                 <li>HTML5使用教程</li>
             </ul>
         </li>
     </ul>
</div>

clipboard.png

active

<style>
      body,div{
          margin: 0;
          padding: 0;
      }
    .box{
        width:120px;
        height:100px;
        line-height: 100px;
        text-align: center;
        margin: 100px auto;
        background-color: pink;
        transition: all 1s;
    }
        .box:active{
            padding:100px;
        }
    </style>
<div class="box">
    點擊獲取能量...
</div>

clipboard.png

first-letter

選中第一個字htm

first-line

選中首行文字

:empty

當沒有子元素,而且沒有文本節點的時候,:empty會被觸發,能夠利用:empty給默認提示

<style>
      body,div,ul{
          margin: 0;
          padding: 0;
      }
    .box{
        margin:100px;
    }
      ul{
            margin-top;10px;
        }
        ul{
            margin-top: 10px;
        }
        ul:empty::after{
            content:'留言空空如也'
        }
    </style>
<div class="box">
    <input type="text">
    <ul></ul>
</div>

當ul沒有內容的時候,會顯示一條默認的信息。一旦加上內容,默認信息就會隱藏,不過須要注意的是,ul不能換行,必須這樣寫。

clipboard.png

:target

獲取當前描點的那個元素

實現換膚功能

<style>
      body,div{
          margin: 0;
          padding: 0;
      }
      .box > div{
          position: absolute;
          left:0;
          top:0;
          width:100%;
          height: 100%;
          z-index: -1;
      }
        #bg1:target{
            background-color: #61dafb;
        }
        //當#bg1元素爲target(目標元素)是的style
        #bg2:target{
            background-color: #e9203d;
        }
        #bg3:target{
            background-color: #017fff;
        }
    </style>
<div class="box">
    <nav>
        <a href="#bg1">春</a>
        <a href="#bg2">夏</a>
        <a href="#bg3">秋</a>
    </nav>
    <div id="bg1"></div>
    <div id="bg2"></div>
    <div id="bg3"></div>
</div>

clipboard.png

當id爲bg1,bg2和bg3的元素爲目標元素時的style相同時,能夠直接設置

<style>
      body,div{
          margin: 0;
          padding: 0;
      }
      .box > div{
          position: absolute;
          left:0;
          top:0;
          width:100%;
          height: 100%;
          z-index: -1;
      }
       target{
            background-color: #61dafb;
        }
    </style>
<div class="box">
    <nav>
        <a href="#bg1">春</a>
        <a href="#bg2">夏</a>
        <a href="#bg3">秋</a>
    </nav>
    <div id="bg1"></div>
    <div id="bg2"></div>
    <div id="bg3"></div>
</div>

利用target實現遮罩層

<style>
      body,div{
          margin: 0;
          padding: 0;
      }
     #show{
         text-decoration: none;
         color: #e9203d;
     }
    #show div{
            position: fixed;
            left: 50%;
            top:50%;
            width:200px;
            height: 200px;
            transform: translate(-50%,-50%);//實現垂直水平居中
            border:10000px solid rgba(0,0,0,0.3);//灰色背景是border,所以設置的很大
            display: none;

        }
        #show:target > div{
            display: block;
        }
        #hide:target{
            display: none;
        }
    </style>
<div class="box">
   <a href="#show">彈出層</a>
    <a href="#hide" id="show">
        <div id="hide">彈彈彈</div>
    </a>
</div>

clipboard.png

實現tab欄切換

<style>
      body,div{
          margin: 0;
          padding: 0;
      }
    .box{
        width: 300px;
        height: 300px;
        text-align: center;
        margin: 100px auto;
    }
        .title{
            overflow: hidden;
        }
        .title > a{
            float: left;
            width:100px;
            height: 35px;
            line-height: 35px;
            border:1px solid #dedede;
            box-sizing: border-box;
            text-decoration: none;

        }
        .title > a:not(:first-of-type){
            border-left: none;
        }
        .content{
            position: relative;
        }
        .content > div{
            position: absolute;
            left:0;
            top:0;
            width:100%;
            height: 200px;
            line-height: 200px;
            border:1px solid #dedede;
            background-color: #61dafb;
            border-top:none;
            box-sizing: border-box;
        }
        #content1{
            z-index: 1;
        }
        #content1:target,#content2:target,#content3:target{
            z-index: 999;
        }
    </style>
<div class="box">
   <nav class="title">
       <a href="#content1">CSS</a>
       <a href="#content2">HTML</a>
       <a href="#content3">JavaScript</a>
   </nav>
    <div class="content">
    <div id="content1">CSS</div>
    <div id="content2">HTML</div>
    <div id="content3">JavaScript</div>
    </div>
</div>

clipboard.png

相關文章
相關標籤/搜索