css选择器及其权重

news2024/11/19 14:54:09

1. 类型选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        类型选择器:
            h1 { }
     -->
    <style>
        p {
            color: red;
        }
    </style>
</head>
<body>
    <p>HelloWorld</p>
</body>
</html>

2. 通配选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        通配符选择器:
            * { }
     -->
    <style>
        * {
            color: green;
        }
    </style>
</head>
<body>
    <h1>HelloWorld</h1>
    <p>WorldHello</p>
</body>
</html>

3. 类选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        类选择器: 
            .box { }
            *.box { }
                => 以上两者是等价的; 
     -->
    <style>
        .box {          /* 匹配所有含有box类的标签 */
            background-color: green;
        }
        *.box {
            background-color: red;
        }
        span.test {     /* 匹配所有span标签中含有test类的 */
            color: green;
        }
    </style>
</head>
<body>
   <div class="box">HelloWorld</div> 
   <span class="test">好吧</span>
   <p class="test">好吧</p>
</body>
</html>

4. ID选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #First {
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div id="First">HelloWorld</div>
</body>
</html>

5. 属性选择器1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /*1. 必须是input选择器同时具有value这个属性 */
        /* input[value] {
            color: red;
        } */

        /* 2.匹配具有type属性且其值为text的元素 */
        input[type=text] {
            color: green;
        }

        /* 3. 匹配具有class属性且其值以icon开头的元素*/
        div[class^=icon] {
            color: red;
        }

        /* 4. 匹配具有class属性且其值以data结尾的元素 */
        section[class$=data] {
            color: green;
        }

        /* 5. 匹配具有class属性且其值中含有a字母的元素 */
        span[class*=a]{
            color: blue;
        }
    </style>
</head>
<body>
    <!-- 1.利用属性选择器可以不用借助于类或者id选择器 -->
    <!-- <input type="text" name="" id="" value="请输入用户名:"> -->
    <!-- <input type="text" name="" id=""> -->
   
    <!-- 2.属性选择器可以选择 属性=值 的某些元素 -->
    <input type="text" name="" id="">
    <input type="password" name="" id="">

    <!-- 3.属性选择器可以选择属性值开头的某些元素 -->
    <div class="icon1">图标1</div>
    <div class="icon2">图标2</div>
    <div class="icon3">图标3</div>
    <div class="icon4">图标4</div>

    <!-- 4.与3相反,结尾的 -->
    <section class="icon1-data">熊大</section>
    <section class="icon2-data">熊二</section>
    <section class="icon3-data">熊三</section>

    <!-- 5.匹配具有某一属性并且值中含有val的元素 -->
    <span class="rwg">我中没有a</span><br/>
    <span class="fs ">我中没有a</span><br/>
    <span class="te1sa">我中含有a</span><br/>
</body>
</html>

在这里插入图片描述

6. 属性选择器2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        格式:选择器 [属性名 运算符 属性值] 
    -->
    <style>
         /* 等价于.class1 {
             color: red;
         } */
        *.class1 {         
            color: red;
        }

        span *.class2 {
            color: green;
        }

        [href] {                            /* 所有含有href属性的选择器 */
            color: yellow;
        }

        [href="../../res/1.ico"] {          /* 所有含有href属性的选择器中href属性的值为"../../res/1.ico"的选择器 */
            background-color: purple;
        }

        span[self^="zhang"] {               /* 选择器是span, 并且含有属性self, 并且self的值是以zhang开头的 */        
            color: pink;
        }

        span[self$="world"] {               /* ...并且self属性的值是以world结尾的 */    
            color: red;
        }

        span[self*="how"] {                 /* ...并且self属性的值中含有"how" */
            color: blue;
        }

        [class~="class3"] {                 /* 所有包含属性class, 且属性值中带有"class3"单词的选择器 */
            font-weight: bolder;
            font-size: 30px;
        }

        [lang|="xn"] {                      /* 所有包含属性lang, 且属性值以"xn"开头的选择器 */
            border: 1px solid black;
            background-color: green;
        }
    </style>
</head>

<body>
    <div class="class1 class2">helloWorld</div>
    <p><span class="class1">第一个span元素</span></p>
    <p><span>第二个span元素</span></p>
    <p><a href="https://www.baidu.com">百度</a></p>
    <p><a href="../../res/1.ico">图标</a></p>
    <p><span self="zhangXingWei">zhangXingWei</span></p>
    <p><span self="Helloworld">Helloworld</span></p>
    <p><span self="howareyou">howareyou</span></p>
    <p><span class="class4 class2 class3">class4 class2 class3</span></p>
    <p><span class="class4 class3">class1 class3</span></p>
    <p><span lang="xn-cn">lang</span></p>
    <p><span lang="cn-xn">lang</span></p>
    <h3>我是前置h3</h3>
</html>

在这里插入图片描述

7. 伪类选择器1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
    所有伪类:(动态伪类选择器, 状态伪类选择器, 结构伪类选择器, 否定伪类选择器)
        (1) 动态伪类选择器: 
            :link	                a:link	                选择所有未被访问的链接;
            :visited	            a:visited	            选择所有已访问的链接;
            :hover	                a:hover	                选择鼠标悬停其上的链接;
            :active	                a:active	            选择活动的链接;
            :focus	                input:focus	            选择获得焦点的 <input> 元素;

        (2) 状态伪类选择器: 
            :checked	            input:checked	        选择每个被选中的 <input> 元素;
            :disabled	            input:disabled	        选择每个被禁用的 <input> 元素;
            :enabled	            input:enabled	        选择每个已启用的 <input> 元素;

        (3) 结构伪类选择器: 
            :first-child	        p:first-child	        选择作为其父的首个子元素的每个 <p> 元素;
            :last-child	            p:last-child	        选择作为其父的最后一个子元素的每个 <p> 元素;
            :nth-child(n)	        p:nth-child(2)	        选择作为其父的第二个子元素的每个 <p> 元素;
            :first-of-type      	p:first-of-type	        选择作为其父的首个 <p> 元素的每个 <p> 元素;
            :last-of-type	        p:last-of-type	        选择作为其父的最后一个 <p> 元素的每个 <p> 元素;
            :only-of-type	        p:only-of-type	        选择作为其父的唯一 <p> 元素的每个 <p> 元素;
            :root	                root	                选择元素的根元素;
            :nth-last-child(n)	    p:nth-last-child(2) 	选择作为父的第二个子元素的每个<p>元素,从最后一个子元素计数;
            :nth-of-type(n)	        p:nth-of-type(2)	    选择作为其父的第二个 <p> 元素的每个 <p> 元素;
            :nth-last-of-type(n)	p:nth-last-of-type(2)	选择作为父的第二个<p>元素的每个<p>元素,从最后一个子元素计数
            :only-child	            p:only-child	        选择作为其父的唯一子元素的 <p> 元素;
            :empty	                p:empty	                选择没有子元素的每个 <p> 元素;
            
        (4) 否定伪类选择器: 
            :not(selector)	        :not(p)	                选择每个非 <p> 元素的元素;
            
        (5) 其他:
            :in-range	            input:in-range	        选择具有指定范围内的值的 <input> 元素;
            :out-of-range	        input:out-of-range	    选择值在指定范围之外的 <input> 元素;
            :read-only	            input:read-only	        选择指定了 "readonly" 属性的 <input> 元素;
            :read-write	            input:read-write	    选择不带 "readonly" 属性的 <input> 元素;
            :required	            input:required	        选择指定了 "required" 属性的 <input> 元素;
            :valid	                input:valid	            选择所有具有有效值的 <input> 元素;
            :invalid	            input:invalid	        选择所有具有无效值的 <input> 元素;
            :optional	            input:optional	        选择不带 "required" 属性的 <input> 元素;
            :lang(language)	        p:lang(it)	            选择每个 lang 属性值以 "it" 开头的 <p> 元素;
            :target	                #news:target	        选择当前活动的 #news 元素(单击包含该锚名称的 URL);
     -->
</head>

<body>

</body>

</html>

8. 伪类选择器2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
        1.  E:first-child: 匹配父元素中的第一个子元素E;
            E:last-child:  匹配父元素中的最后一个子元素E;
            E:nth-child(n):匹配父元素中的第n个子元素E;  
            
        2. 细说nth-child(n): 
            1. n可以是数字, 关键字和公式; 
            2. n如果是数字, 就是选择第n个子元素, 里面数字从1开始; 
            3. n如果关键字, even是偶数, odd是奇数; 
            4. n如果是公式, 则括号中可以是以下值: (公式中的字母必须是n, 不能是其它字母)
                    (1) n(所有的);
                    (2) 2n(偶数);
                    (3) 2n+1(奇数); 
                    (4) 5n(5,10,15, 5的倍数);
                    (5) n+5(从第5个开始(包括第5个)直到最后);
                    (6) -n+5(前5个(包括第5个)); 
        */
        ul li:first-child {                 /* ul的所有小li中的第一个小li */
            background-color: red;
        }
        ul li:last-child {                   /* ul的所有小li中的最后一个小li */
            background-color: green;
        }
        ul li:nth-child(3) {                /* ul的所有小li中的第三个小li */
            background-color: purple;
        }
        ul li:nth-child(even) {             /* ul中所有偶数行的小li */
            background-color: blue;
        }
        ol li:nth-child(2n) {
            background-color: yellow;
        }
    </style>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
    <br>
    <ol>
        <li>ol-li-1</li>
        <li>ol-li-2</li>
        <li>ol-li-3</li>
        <li>ol-li-4</li>
        <li>ol-li-5</li>
        <li>ol-li-6</li>
    </ol>
</body>
</html>

在这里插入图片描述

9. 伪类选择器3

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            1.  :first-of-type:    
                :last-of-type:     
                :nth-of-type(n):

            2. 细说: nth-of-type(n) 和 nth-child(n)的区别:
                E:nth-child(n)  执行时首先检查n, 确定是第几个孩子, 然后将该孩子的类型与E进行匹配, 若匹配就执行, 否则就不执行; 
                E:nth-of-type(n) 执行时首先检查有无E类型, 如果有, 就从该类型开始将其第n个孩子进行相应的操作; 
         */

         ul li:nth-of-type(2n) {
             background-color: red;
         }

         /* 
            1. 首先检查n, 确定是section的第1个孩子, 然后检查section的第一个孩子, 发现是p, 发现与E类型(div)不匹配, abort;
                下例说明:section中的第一个孩子必须是div类型才能匹配生效; 
         */
         section div:nth-child(1) {
             background-color: yellow;
         }
         
         /* 
            2. 首先检查有无div类型, 发现有, 然后就将section中的第n个div进行相应操作, ...
                下例说明:section中的孩子系列中所有的div类型中的第二个div才能匹配; 
         */
         section div:nth-of-type(2) {
             background-color: blue;
         }
    </style>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
    <br>
    
    <section>
        <p>光头强</p>
        <span>HelloWorld</span><br>
        <div>
            <div>jlk</div>
        </div>
        <span>WorldHello</span><br>
        <div>熊大</div>
        <span>WorldHello</span><br>
        <div>熊二</div>
    </section>
</body>
</html>

在这里插入图片描述

10. 伪元素选择器1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. 所有伪元素:
            ::before	        p::before	            在每个<p>元素之前插入内容; 
            ::after	            p::after	            在每个<p>元素之后插入内容; 
            ::first-letter	    p::first-letter	        选择每个<p>元素的首字母; 
            ::first-line	    p::first-line	        选择每个<p>元素的首行; 
            ::selection	        p::selection	        选择用户选择的元素部分; 
     -->
    <!-- 
        2. before 和 after说明: 
            1. before和after创建一个元素, 但是属于行内元素; 
            2. 新创建的这个元素在文档树中是找不到的, 所以我们称为伪元素; 
            3. 语法: E::before {}; 
            4. before 和 after必须有content属性; 
            5. before在父元素(E)内容的最前面创建元素, after在父元素(E)内容的最后面插入元素; 
            6. 伪元素选择器 和 标签选择器一样, 权重为1; 
      -->
    <style>
        div {
            width: 200px;
            height: 100%;
            background-color: blue;
        }

        /* 
            1. ::before是行内元素, 要给其设置宽高, 则需要将其转化成行内快元素; 
            2. 如下所示, 给::before 和 ::after分别添加了content属性, 必须要有这个content属性; 否则无效; 
        */
        div::before {
            content: '前';
            display: inline-block;
            width: 20px;
            height: 30px;
            background-color: red;
        }

        div::after {
            content: '后';
            color: yellow;
            background-color: purple;
        }

        h4::first-letter {
            /* 选择文本块的首字母 */
            color: red;
            background-color: yellow;
        }

        h4::selection {
            /* 匹配用户选择的部分 */
            background-color: red;
            ;
        }

        h5::first-line {
            /* 匹配指定元素的首行 */
            background-color: green;
        }
    </style>
</head>
<hr>
<div>
    <p>HelloWorld</p>
    <span>666</span>
    <p>Loveyou</p>
    <div></div>
    <p>999888</p>
</div>
    <h4>123456</h4>
    <h5>就克里斯积分了是三角路口水电费简历可实例
        <br>了开发商将jl
        <br>放假了算法了
    </h5>
</body>

</html>

在这里插入图片描述

11. 伪元素选择器2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="">
    <!-- 
        伪元素选择器使用场景1: 伪元素结合字体图标进行使用; 
     -->
    <style>
        @font-face {
            font-family: 'icomoon';
            src: url('fonts/icomoon.eot?ldtv90');
            src: url('fonts/icomoon.eot?ldtv90#iefix') format('embedded-opentype'),
                url('fonts/icomoon.ttf?ldtv90') format('truetype'),
                url('fonts/icomoon.woff?ldtv90') format('woff'),
                url('fonts/icomoon.svg?ldtv90#icomoon') format('svg');
            font-weight: normal;
            font-style: normal;
            font-display: block;
        }

        div {
            position: relative;
            border: 1px solid green;
            width: 200px;
            height: 35px;
        }

        div::after {
            position: absolute;
            top: 10px;
            right: 10px;
            font-family: 'icomoon';
            color: green;
            /* content: ''; */
            content: '\e902';
        }

    </style>
</head>

<body>
    <div>HelloWorld</div>
</body>

</html>

在这里插入图片描述

12. 伪元素选择器3

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        伪元素选择器使用场景2: 仿土豆效果; (参考08_元素的显示和隐藏/04_案例)
     -->
    <style>
        .toDou {
            position: relative;
            width: 444px;
            height: 320px;
            background-color: red;
            margin: 30px auto;
        }

        .toDou img {
            width: 100%;
            height: 100%;
        }

        /*1. 在toDou最前面插入before伪元素 */
        .toDou::before {
            content: '';
            position: absolute;
            display: none;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, .3);
            background-image: url(./play.png);
            background-repeat: no-repeat;
            background-position: center;
        }

        /*2. 鼠标悬浮于toDou上就让before伪元素显示出来(此处display表显示) */
        .toDou:hover::before {
            display: block;     
        }
    </style>
</head>

<body>
    <div class="toDou">
        <img src="./tudou.jpg" alt="">
    </div>
    <div class="toDou">
        <img src="./tudou.jpg" alt="">
    </div>
    <div class="toDou">
        <img src="./tudou.jpg" alt="">
    </div>
    <div class="toDou">
        <img src="./tudou.jpg" alt="">
    </div>
</body>

</html>

请添加图片描述

13. 后代选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        匹配div中的所有后代h1;
     -->
    <style>
        div h1 {
            color: green;
        }
    </style>
</head>

<body>
    <div>
        <h1>HelloWorld</h1>
        <h2>我是h2</h2>
        <div>
            <h1>I love you!</h1>
            <div>
                <h1>how are you?</h1>
            </div>
        </div>
    </div>
</body>

</html>

在这里插入图片描述

14. 子代选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 子代选择器:匹配h2中的所有儿子,孙子及孙子后代不予考虑【只是匹配儿子】 */
        h2 > a {
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <h2>
        <a>大儿子</a><br>
        <a>二儿子</a><br>
        <p>
            <a>孙子</a>
        </p>
    </h2>
</body>

</html>

在这里插入图片描述

15. 相邻兄弟选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 相邻兄弟选择器:匹配[紧跟]在h2之后的第一个h1兄弟元素 【必须相邻】; */
        /* 只是匹配兄弟, 不包括自身; */
        h2+h1 {
            border: 2px solid green;
        }
    </style>
</head>

<body>
    <div>
        <h2>我是h2</h2>
        <h1>我是h1</h1>         <!-- 被匹配了 -->
        <h1>我也是h1</h1>
    </div>
</body>
</html>

在这里插入图片描述

16. 通用(普通)兄弟选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 普通兄弟选择器:匹配h1[之后]的所有兄弟h3,可以不用相邻,只要是之后就可以匹配,但必须是兄弟元素; */
        /* 只是匹配兄弟, 不包括自己本身; */
        h1~h3 {
            color: blue;
        }
    </style>
</head>

<body>
    <div>
        <h1>我是h1</h1>
        <h3>我是h3</h3>
        <h2>我是h2</h2>
        <p>HelloWorld</p>
        <h3>我也是h3</h3>
    </div>
</body>
</html>

在这里插入图片描述

17. 交集选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
        }
        div.test {
            background-color: red;
        }
        div#id1 {
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="test">123</div>
    <div id="id1">456</div>
    <div>789</div>
    <div>8910</div>
</body>
</html>

在这里插入图片描述

18. 选择器优先级

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            font-weight: bolder;
        }
        div {
            color: red;
            /* color: red!important; */
        }
        .test {
            color: green;
        }
        #Id {
            color: blue;
        }
    </style>
</head>
<body>
    <!-- 
        优先级:
            选择器                                                  选择器权重
            !important                                                无穷大
            行内样式"style="                                            1000
            ID选择器                                                    0100
            类选择器,伪类选择器,属性选择器                              0010
            元素选择器,伪元素选择器                                      0001
            继承 或 *                                                  0000
 
            注意事项:
                1.权重是由4位数字组成,不会有进位;
                2.等级判断自左至右,如果某一位数值相同,则判断下一位数值。
     -->
     <div class="test" id="Id" style="color: purple">选择器优先级别问题</div>
</body>
</html>

在这里插入图片描述

19. 权重叠加

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            font-weight: bolder;
        }
        ul {                    /* ul权重:0001 */
            color: red;
        }
        ul li {                 /* ul+li权重:0001+0001=0002 */
            color: green;
        }
        .nav li {               /* .nav+li权重:0010+0001=0011 */
            color: blue;
        }
    </style>
</head>
<body>
    <ul class="nav">
        <li>是的</li>
        <li>好的</li>
        <li>的的</li>
    </ul>
    <!-- 
        权重叠加小练习:
            (1) div ul li => 0003
            (2).nav ul li => 0012
            (3)a:hover    => 0011 (0001 + 0010)
            (4).nav a     => 0011 (0010 + 0001)
     -->
</body>
</html>

在这里插入图片描述

20. 权重练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .nav li {
            color: red;
        }
        .nav .blue {
            color: blue;
        }
    </style>
</head>
<body>
    <ul class="nav">
        <li class="blue">香蕉</li>
        <li>苹果</li>
        <li>葡萄</li>
        <li>梨子</li>
    </ul>

    <!-- 
        实际上之前你可能一眼望去,第一个li的颜色被修改成了蓝色;
        实际这是一种错觉;
        根据权重:.nav li => 0011 (0010 + 0001)
                .blue    => 0010 (0010)
        由于0011 > 0010, 所以第一个小li最终还是显示为红色 。
        如若成功,则必须 .nav .blue => 0020 > 0011
        =>此时第一个小li就真的成了蓝色。
     -->
</body>
</html>

在这里插入图片描述

21. 其他

21.1 多类名选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=\, initial-scale=1.0">
    <title>default</title>
<!-- 多类名选择器  -->
    <style>
        .cls1 {
            color: red;
        }
        .cls2 {
            font-size: 35px;
        }
    </style>
</head>
<body>
    <h1>css多类名选择器</h1>
    <div class = "cls1 cls2"> Hello World!</div>
</body>
</html>

在这里插入图片描述

21.2 复合选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    /* 后代选择器 */
    ol li {
        color: red;
    }

    ol li a {
        color: yellow;
    }

    ul li a {
        font-size: 100px;
        color: pink;
    }

    .test li a {
        font-size: 50px;
        color: green;
        font-weight: bold;
    }

    /*并集选择器 */
    div,
    p,
    .pig li {
        color: green;
        font-weight: bold;
    }
</style>

<body>
    <!-- 
    后代选择器:层层递进;
    并集选择器
    伪选择器
-->
    <h1>ol_后代选择器</h1>
    <ol>
        <li>我是ol的子集</li>
        <li>我是ol的子集</li>
        <li>我是ol的子集</li>
        <li><a href="#">我是孙子集</a></li>
    </ol>

    <!--  -->
    <h1>ul_后代选择器</h1>
    <ul>
        <li>我是ul的子集</li>
        <li>我是ul的子集</li>
        <li>我是ul的子集</li>
        <li><a href="#">HelloWorld</a></li>
    </ul>
    <ul class="test">
        <li>我是ul的子集</li>
        <li>我是ul的子集</li>
        <li>我是ul的子集</li>
        <li><a href="#">HelloWorld world!!!!!!</a></li>
    </ul>

    <!--并集选择器可以选择多组标签,同时为他们定义相同的样式,通常用于集体声明 -->
    <h1>并集选择器</h1>
    <div>熊大</div>
    <p>熊二</p>
    <span>光头强</span>
    <ul class="pig">
        <li>佩奇</li>
        <li>佩奇的爹</li>
        <li>佩奇的妈</li>
    </ul>
</body>

</html>

在这里插入图片描述

21.3 link标签与伪元素选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 为防止不生效,严格按照LVHA的顺序进行写! */
        /* 未访问的链接的颜色 */
        /* 标签a在浏览器中具有默认样式,所以在实际工作中需要单独给链接指定样式  */
        a:link {    
            color: red;
            text-decoration: none;
        }
        /*已访问的链接的颜色  */
        a:visited {
            color: green;
        }
        /*悬浮时的颜色 */
        a:hover {
            color: black;
        }
        /* 活动链接的颜色:点了但没有松开 */
        a:active {
            color: deeppink;
        }
        /* :focus */
        input:focus {
            background-color: red;
        }
    </style>
</head>
<body>
    <a href="#"> Hello World!I am coming!</a><br>
    <table>
        <tr>
            <td><input type="text" value="Hello"></td>
            <td><input type="text" value="World"></td>
            <td><input type="text" value="Hello World"></td>
        </tr>
    </table>
</body>
</html>

请添加图片描述

21.4 伪元素选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 此时只会选择p元素中的首行进行匹配! 默认是对全体元素都有效果,可以加以限定!*/
        p::first-line {
            background-color: red;
        }
        ::first-letter {  /* 此时将对所有的首字母加以修饰 */
            color: green;
            font-weight: bolder;
        }
        a::before {
            content: "Click to here    ";
            color: yellow;
        }
        a::after {
            content: '!';
            color: red;
        }
        /* CSS计数器: */
        body {
            counter-reset: Count 0;
        }
        div::before {
            content: counter(Count) ". ";
            counter-increment: Count 1;
        }
    </style>
</head>

<body>
    <p>
        This is a apple!<br>    
        helloWorld<br>
    </p>
    <p>
        These are bananas!<br>
        i am happy!
    </p>
    <h3>How are you?</h3>
    <h4>you are a good person!</h4>
    <a href="#">我是空链接</a>
    <div>我是div1</div>
    <div>我是div2</div>
    <div>我是div3</div>
</body>

</html>

在这里插入图片描述

21.5 CSS选择器1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 不管任何元素,只要它的第一个儿子是span就能匹配 */
        span:first-child {
            color: red;
        }
        /* 不管任何元素,只要它的最后一个儿子是div就能匹配 */
        div:last-child {
            color: green;
        }
        /* 匹配p的子元素中第一个元素为span的元素,也即是p的第一个儿子为span的元素 */
        p > span:first-child {
            background-color: yellow;
        }
        /* 匹配任意元素中只有一个儿子并且这个儿子必须是p元素 */
        div:only-child {
            border: 1px solid red;
        }
        /*  */
        p:only-of-type {
            color: yellow;
        }
    </style>
</head>
<body>
    <div id="div">
        <span>好吧</span>
        <h4>h4标题</h4>
        <h3>
            <div>你好吗</div>
            <div>还行吧</div>
        </h3>
    </div>

    <h2>中华人民共和国</h2>
    <span>我是span</span></br>
    <p>
        <span>helloWorld</span>
        <span>love you</span>
        <div>美国</div>
    </p>

    <div>
        <!-- <p>This is a paragraph.</p> -->
        <!-- <h2>唯一的一个儿子</h2> -->
        <div>你好!!!</div>
    </div>
</body>
</html>

在这里插入图片描述

21.6 CSS选择器2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /*  */
        p:only-of-type {
            color: red;
        }
        /* 匹配body中的第三个儿子,索引号从1开始: */
        body > :nth-child(3) {
            color: green;
        }
        /*  */
        :enabled {
            border: 1px solid red;
        }
        :disabled {
            background-color: green;
        }
        /*  */
        span {
            color: red;
        }
        :checked + span {
            border: 1px solid blue;
            color: green;
        }
        /*  */
        /* :valid {
            background-color: green;
        }
        :invalid {
            background-color: red;
        } */
        /*  */
        :in-range {
            color: green;
        }
        :out-of-range {
            color: red;
        }
        /*  */
        :required {
            background-color: green;
        }
        :optional {
            background-color: red;
        }
    </style>
</head>
<body>
    <div>
        <p>我是这个div中唯一的段落元素.</p>
    </div>

    <div>
        <p>这个div中有多个段落..</p>
        <p>我也是一个段落.</p>
    </div>

    <div>我是老三</div>

    <!-- <textarea name="" id="" cols="30" rows="10">jfsljfsjflsjfjslfl</textarea><br> -->
    <!-- <textarea name="" id="" cols="30" rows="10" disabled>456488fsf sf </textarea><br> -->

    <input type="checkbox" name="" id="">
    <span>将会被匹配了</span><br>

    <!-- <input type="text" name="" id="" required> -->

    <!-- <input type="number" name="" id="" value="10" min="0" max="100" step="1"> -->

    <input type="number" required><br>
    <input type="number">

</body>
</html>

在这里插入图片描述

21.7 CSS选择器3

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        button:active {
            background-color: green;
        }
        :focus {
            color: red;
        }
        /*  */
        a:not([href*="nihao"]) {
            background-color: red;
        }
        :lang(en) {
            /* border: 1px blue solid; */
        }
        /*  */
        div {
            padding: 40px;
            height: 200px;
            background-color: gray;
            /* border: 20px double black;
            width: 200px;
            height: 200px;
            background-color: blue;
            border-radius: 10px/60px; */
            background-image: url(./res/1.ico);
            background-repeat: no-repeat;
            background-size: auto;
            background-position: 100px 100px;
            background-origin: padding-box;
        }
        p {
            border: 10px;
            background-color: red;
            box-shadow: 5px 4px 10px 10px green , 4px 4px 20px gray inset;
        }
        #span {
            outline: thick solid red;
            outline-offset: 5px;
        }
    </style>
</head>
<body>
    <button>点击</button>
    <input type="text"><br>
    <a href="www.nihao.com">你好</a><br>
    <a href="www.buhao.com">不好</a><br>
    <div>好呗</div>
    <p>好吧</p>
    <span id="span">我好</span>
</body>
</html>

在这里插入图片描述

21.8 伪系列选择器

直译过来就是:css引入伪类和伪元素概念是为了格式化文档树以外的信息。
就是说,伪类和伪元素是用来修饰不在文档树中的部分,
比如,一句话中的第一个字母,或者是列表中的第一个元素。
下面分别对伪类和伪元素进行解释。

伪类 => 用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。
比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。
虽然它和普通的css类相似,可以为已有的元素添加样式,
但是它只有处于dom树无法描述的状态下才能为元素添加样式,所以将其称为伪类。

伪元素 => 用于创建一些不在文档树中的元素,并为其添加样式。
比如说,我们可以通过:before来在一个元素前增加一些文本,并为这些文本添加样式。
虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

CSS3规范中的要求使用双冒号(::)表示伪元素,以此来区分伪元素和伪类,比如::before和::after等伪元素使用双冒号(::),:hover和:active等伪类使用单冒号(:)。
除了一些低于IE8版本的浏览器外,大部分浏览器都支持伪元素的双冒号(::)表示方法。
然而,除了少部分伪元素,如::backdrop必须使用双冒号,大部分伪元素都支持单冒号和双冒号的写法,比如::after,写成:after也可以正确运行。

大概的意思就是:虽然CSS3标准要求伪元素使用双冒号的写法,但也依然支持单冒号的写法。为了向后兼容,我们建议你在目前还是使用单冒号的写法。
实际上,伪元素使用单冒号还是双冒号很难说得清谁对谁错,你可以按照个人的喜好来选择某一种写法。


/
伪元素选择器:
伪元素选择器是用于向某些元素设置特殊效果。
伪元素选择器选中的并不是真实的 DOM 元素,所以叫伪元素选择器。伪元素选择器常用的也就下面 5 个:
::first-line:		为某个元素的第一行文字使用样式。
::first-letter:		为某个元素中的文字的首字母或第一个字使用样式。
::before:			在某个元素之前插入一些内容。
::after:			在某个元素之后插入一些内容。
::selection:		对光标选中的元素添加样式。

这一篇讲了伪类选择器和伪元素选择器,这两种选择器都是为了向元素添加特殊效果,
但这些效果仅用于显示,不能被 js 操作。选择器这部分里列出来的也都是 CSS3 之前版本定义出来的常用选择器。


伪类选择器:
在页面中,有时候同一个元素在不同动作下有不同的样式。
比如链接在没有点击的时候有个样式,在鼠标放上去有另外的样式,
还有在点击完成以后又会又一个样式。这几种情况下这个链接的标签并没有变化,
有变化的只是它的状态,这时候就可以里用伪类来实现这个需求。
在浏览器中,伪类的出现是为了向某些选择器添加特殊的效果或限制。
伪类是在正常的选择器后面加上伪类名称,中间用冒号(:)隔开。比如我们希望一个超链接在鼠标放上去的时候有一个下划线。
伪类主要有两方面的用处,一方面是标记一些特殊的状态,也就是一开始说的那个例子那种;另外还有一类伪类是有筛选的功能。
一、标记状态的伪类:
:link:		选取未访问过的超链接元素。
:visited:	选取访问过的超链接元素。
:hover:		选取鼠标悬停的元素。
:active:	选取点中的元素。
:focus:		选取获得焦点的元素。

二、筛选功能的伪类:
:empty:			选取没有子元素的元素。比如选择空的 span,就可以用 span:empty 选择器来选择。这里要注意元素内有空格的话也不能算空,不会被这个伪类选中。
:checked:		选取勾选状态的 input 元素, 只对 radio 和 checkbox 生效。
:disabled:		选取禁用的表单元素。
:first-child:	选取当前选择器下第一个元素。
:last-child:	选取当前选择器下第一个元素。
:nth-child(an+b):		选取指定位置的元素。
:nth-last-child(an+b):	这个伪类和 nth-child 相似,只不过在计数的时候,这个伪类是从后往前计数。
:only-child:			选取唯一子元素。如果一个元素的父元素只有它一个子元素,这个伪类就会生效。如果一个元素还有兄弟元素,这个伪类就不会对它生效。
:only-of-type:			选取唯一的某个类型的元素。如果一个元素的父元素里只有它一个当前类型的元素,这个伪类就会生效。这个伪类允许父元素里有其他元素,只要不和自己一样就可以。

21.9 图片
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置

目前&#xff0c;在 ZYNQ 中进行以太网开发的方案&#xff0c;大部分都是基于通过 PS 的 MIO 以 RGMII 接口连接外部 PHY 芯片的方式。但是&#xff0c;由于使用 PS 的 MIO 只能以 RGMII 接口连接外部 PHY 芯片&#xff0c;这就限制了支持其他接口 PHY 芯片的使用&#xff0c;如…

分文件实现温湿度数据管理系统项目

目标&#xff1a; 了解分文件的概念&#xff0c;要依次从C语言的函数声明、变量的存储类别、C语言编译预处理&#xff0c;说起。这些知识点我们之前或多或少接触过&#xff0c;这里做个总结与拓展。经过总结&#xff0c;最后我们归纳出一个实现C语言模块化编程的技巧&#xff…

03-bootstrap-响应式布局-栅格系统

一、概述 1、栅格系统是 Bootstrap 中响应式布局的重要组成部分&#xff0c;旨在实现页面元素的自适应排版。Bootstrap 栅格系统将屏幕宽度分为 12 列&#xff0c;通过在 HTML 元素上添加相应的类名&#xff0c;可以让元素占据指定数量的列数&#xff0c;从而实现灵活的布局效…

5种易实现的Linux和 Windows VPS速度提升方法

​  无论是Linux VPS还是Windows VPS&#xff0c;网站速度的提高都是非常重要的。它们在提高网站速度方面都有很多的优化方法。下面我们将介绍 5 种提高网站速度的方法。 1.通过缓存加速 缓存通常是用来加快商业网站加载时间的技术&#xff0c;因此它也可以用在 VPS 上。没有…

车架号查车辆信息-vin查车辆信息api接口

接口地址&#xff1a; https://登录后显示/pyi/88/264(支持:http/https)) 在线查询&#xff1a;https://www.wapi.cn/car_vin.html 网站地址&#xff1a;https://www.wapi.cn 返回格式&#xff1a;json,xml 请求方式&#xff1a;GET,POST 请求说明&#xff1a; Md5验证方式-…

字符串、字符串列表,倒序生成字典。

带数字的字符串以数字为key倒序生成字典&#xff0c;字符串列表按其元素索引为key倒序生成字典。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简…

【MySQL】-- 表的操作

目录 表的操作 创建表 创建表案例 查看表结构 查看表结构案例 查看历史上表的创建语句 修改表 修改表实例 新增列属性 修改列属性 删除列属性 修改列名 修改表名 删除表 表的操作 创建表 语法&#xff1a; CREATE TABLE (if not exists) table_name (fie…

【MyBatisPlus框架】

文章目录 MyBatisPlus1.概述1.1 简介1.2特性1.3支持数据库1.4框架结构 2.入门案例2.1 创建数据库以及表2.2 创建工程2.2.1引入依赖 2.3编写代码 3.基本CRUD3.1BaseMapper3.2插入3.3删除3.4修改3.5查询3.6通用Service 4.常用注解4.1TableName4.1.1问题4.1.2通过TableName解决上述…

简述springmvc的流程

4、SpringMVC的执行流程 用户向服务器发送请求&#xff0c;请求被SpringMVC 前端控制器 DispatcherServlet捕获。 DispatcherServlet对请求URL进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;&#xff0c;判断请求URI对应的映射&#xff1a; a) 不存在 …

day05 java_Spring IoC 和 DI

为什么使用spring框架 1.解耦代码(每次使用都要new一个对象) 2.解决事务繁琐问题(创建对象----初始化----调用方法销毁对象) 3.使用第三方框架麻烦的问题 总结:spring是一个轻量级的Ioc,Di和AOP容器 轻量级:简洁,高效,低依赖 **容器:**创建对象并将对象存储对象,同时管理…

高矿化度矿井水深度除氟装置CH-87技术解析

高矿化度矿井水是指含有高浓度溶解性矿物质的废水&#xff0c;通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征&#xff0c;对环境…

性能测试计划不会写?我告诉你有模板你看不看

目录 1 简介 2 测试进入条件 3 测试退出条件 4 性能测试需求 5 测试风险 6 测试时机 7 测试策略 8 测试资源 9 测试进度 10 交付物 1 简介 1.1 目的 【描述性能测试计划的目的。】 1.2 背景 【描述项目或产品的背景。】 1.3范围 【描述性能测试的整体范围。】 2 测试进入条件 【…

Java如何配置环境变量

Java如何配置环境变量 0. 前言1. 下载Java2. 配置环境变量2.1新建 Java_Home2.2 编辑Path情况1情况2 3. 验证安装 0. 前言 本节记录如何配置Java环境变量&#xff0c;用自己重装过的系统实操 操作系统&#xff1a;Windows10 专业版 Java版本&#xff1a;jdk1.7.0_07 1. 下载…

全网最详细,Selenium自动化测试问题总结+解决,跟着大佬上高速...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Selenium4自动化测…

性能测试工程师必看——性能测试报告模板

目录 1. 测试概述 1.1 测试目标 1.2 指标和术语 2. 环境、工具 2.1 测试环境 2.2 测试工具 3. 测试方案 3.1 测试类型 3.2 业务模型 3.3 加密验签处理 3.4 压力梯度 4. 测试结果 4.1 聚合报告 4.2 系统吞吐量 4.3 资源占用率 5. 分析和建议 5.1 测试结论分析 …

Sqoop伪分布式配置

目录 一、Sqoop下载 二、解压 三、添加环境变量 四、复制sqoop-env-template.sh文件 五、编辑组件路径 六、拷贝Mysql与Hive驱动文件 七、验证 一、Sqoop下载 安装包下载地址&#xff1a;Sqoop 官网 二、解压 解压和重命名文件 tar -zxvf sqoop-1.4.7.bin__hadoop-2.…

006 - STM32学习笔记 - RCC时钟树

006 - STM32学习笔记 - RCC时钟树 本节内容一定要结合RCC时钟树和官方手册学习&#xff0c;如果看不明白的话&#xff0c;建议看一下野火官方的教程&#xff0c;火哥讲这节讲的很详细&#xff0c;看一遍基本就能理解了。 上节内容中分析了启动代码&#xff0c;在启动代码中看…

Redis - Redis16个常见使用场景

1、缓存 String类型 例如&#xff1a;热点数据缓存&#xff08;例如报表、明星出轨&#xff09;&#xff0c;对象缓存、全页缓存、可以提升热点数据的访问数据 作为Key-Value形态的内存数据库&#xff0c;Redis 最先会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数…

【面试题】操作系统面试实战

version&#xff1a;1.0 文章目录 操作系统进程管理&#x1f64e;‍♂️面试官&#xff1a;进程和线程的区别&#xff1f;&#x1f64e;‍♂️面试官&#xff1a;进程有哪几种状态?&#x1f64e;‍♂️面试官&#xff1a;进程间的通信方式&#xff1f;&#x1f64e;‍♂️面试…

体验使用 InsCode AI 创作助手 来帮我完成一篇博客

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 InsCode AI 创作助手 它来啦回答不满意可以要求重新生成在输入 prompt 时&#…