解决内耗,搞懂伪类!!!

78 阅读4分钟

伪类选择器

伪类

很像类,但是不是类,是元素特殊状态的一种描述

写法:

/* 选中的是没有访问过的a元素 */
a:link{
    color:red;
}
/* 选中的是访问过的a元素 */
a:visited{
    color:blue;
}

动态伪类:

a:link{
    color:red;
}
a:visited{
    color:blue;
}
/* 选中的是鼠标悬浮状态的a元素 */
a:hover{
    color:green;
}
/* 选中的是激活状态的a元素 */
a:active{
    color:yellow;
}
​
/* 获取焦点的input元素 */
input:focus{
    color:orange;
}

注意:

  1. a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。
  2. a:active 必须被置于 a:hover 之后,才是有效的。

结构伪类:

语法:

<style>
    /* 选中的是div的第一个儿子p元素(按照所有子元素、兄弟计算的) */
    div>p:first-child{
        color:red;
    }
    /* 选中的是div的后代p元素,且p的父级是谁无所谓,但p必须是其父亲的第一个儿子 */
    div p:first-child{
        color:red
    }
    /* 选中的是div的后代p元素,且p的父级是谁无所谓,但p必须是其父亲的第一个儿子 */
    p:first-child{
        color:red
    }
</style>
<body>
    <p>P1</p>
    <p>P2</p>
    <p>P3</p>
    <p>P4</p>
    <p>P5</p>
    <p>P6</p>
    <p>P7</p>
    <p>P8</p>
    <p>P9</p>
</body>
<style>
    /* 选中的是div的第 3 个儿子p元素 */
    div>p:nth-child(3){
        color:red
    }
    /* 如果这个n的数值为0,则谁都选不中 */
    div>p:nth-child(0){
        color:red
    }
    /* 如果这个n的数值为空,则谁都中 */
    div>p:nth-child(){
        color:red
    }
    /* 如果这个n的数值为公式an+b,可以选中指定符合公式的选项 */
    /* 如果这个n的数值为even、odd,可以选中奇偶数 */
    div>p:nth-child(2*n){
        color:red
    }
    /* 内容的形式为 an+b ,如下可以选中前5个 */
    div>p:nth-child(-n + 5){
        color:red
    }
</style>
<body>
    <p>P1</p>
    <p>P2</p>
    <p>P3</p>
    <p>P4</p>
    <p>P5</p>
    <p>P6</p>
    <p>P7</p>
    <p>P8</p>
    <p>P9</p>
</body>

关于n:

  1. 0或者不写:什么都选中
  2. n:选中所有的子元素
  3. 1~+∞:选中对应序号的子元素
  4. 2n或even:选中序号为偶数的子元素
  5. 2n+1或odd:选中序号为奇数的子元素
  6. -n+3:选中前3个
<style>
    /* 选中的是div的第一个儿子p元素(按照所有同类型兄弟计算的) */
    div>p:first-of-type{
        color:red;
    }
    /* 选中的是div的最后一个儿子p元素(按照所有同类型兄弟计算的) */
    div>p:last-of-type{
        color:red;
    }
</style>
<body>
    <span>干扰项</span>
    <p>P1</p>
    <p>P2</p>
    <p>P3</p>
    <p>P4</p>
    <p>P5</p>
    <p>P6</p>
    <p>P7</p>
    <p>P8</p>
    <p>P9</p>
</body>
<style>
    /* 选择独生子 */
    span:only-of-child{
        color:red;
    }
    /* 选择同类型独生子 */
    span:only-of-type{
        color:red;
    }
    /* 选中的是一个没有内容的元素 */
    div:empty{
        width:100px;
        height:100px;
        background-color:red;
    }
</style>
<body>
    <!-- 有两个标签,不是独生子 -->
    <div>
        <span>干扰项</span>
        <p>P1</p>
    </div>
    <!-- 有两个span标签,不是独生子 -->
    <div>
        <span>干扰项</span>
        <p>P1</p>
        <p>P2</p>
        <p>P3</p>
    </div>
    <div></div>
</body>

否定伪类:

排除满足括号中条件的元素

<style>
    /* 选中的是div的儿子p元素,但是排除类名为unchose的元素 */
    div>p:not(.unchose){
        color:red
    }
    /* 选中的是div的儿子p元素,但是排除title属性值为“标题”开头的元素 */
    div>p:not([title^="标题"]){
        color:red
    }
    /* 排除第一个子元素 */
    div>p:not(:first-child){
        color:red
    }
</style>
<body>
    <div>
        <p>1234</p>
        <p>1234</p>
        <p>1234</p>
        <p>1234</p>
        <p class='unchose' title="标题1">1234</p>
        <p class='unchose' title="标题12">1234</p>
        <p class='unchose' title="标题123">1234</p>
        <p class='unchose' title="标题1234">1234</p>
        <p class='unchose' title="我不是标题">1234</p>
    </div>
</body>

UI伪类:

/* 复选框或者单选框 是否被选择 */
input:checked{
    width:100px;
    height:100px;
}
/* 将禁用的input框变黑 */
input:disabled{
    background-color:green;
}
/* 选中的是可用的input元素 */
input:enabled{
    background-color:red;
}

目标伪类:

<style>
    div{
        background-color:blue;
        height:300px;
    }
    div:target{
        background-color:red
    }
</style>
<body>
    <!-- 当跳转某个链接的时候,对应的div就会改变颜色 -->
    <a href="#one">1</a>
    <a href="#two">1</a>
    <a href="#three">1</a>
    <a href="#four">1</a>
    
    <div id="one">1</div>
    <div id="two">2</div>
    <div id="three">3</div>
    <div id="four">4</div>
</body>

语言伪类:根据指定的语言选择元素

<html lang="zh-CN">
    <style>
        div:lang(en){
            color:red
        }
        :lang(zh-CN){
            color:red
        }
    </style>
    <body>
        <div lang="en">Apple</div>
        <div>苹果</div>
    </body>
</html>

伪元素选择器

伪元素:很像元素,但不是元素,是元素中一些特殊位置

伪元素选择器:选中元素中的一些特殊位置

<style>
    /* 选中的是div中的第一个文字 */
    div::first-letter{
        color:red;
        font-size:40px;
    }
    /* 选中的是div中的第一行文字 */
    div::first-line{
        background-color:green;
    }
    /* 选中的是鼠标选中的文字 */
    div::selection{
        background-color:green;
        color:red;
    }
    /* input框的placeholder的样式 */
    input::placeholder{
        background-color:green;
        color:red;
    }
    /* 选中的是p开头的位置,随后创建一个子元素*/
    p::before{
        content:"$"
    }
    /* 选中的是p末尾的位置,随后创建一个子元素*/
    p::after{
        content:".00"
    }
</style>
<div>
    Lorem ipsum.
    <input placeholder="请输入内容"/>
    <p>198</p>
    <p>298</p>
    <p>398</p>
    <p>498</p>
    <p>598</p>
</div>