从零开始学前端:CSS复合选择器 --- 今天你学习了吗?(CSS:Day10)

从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(CSS)

复习:从零开始学前端:CSS背景颜色 — 今天你学习了吗?(CSS:Day09)

前言

发现眼睛看一遍,第二天该用的时候还是想不起来,所以打算尽量抽时间定时在重新过一遍,敲代码重新过一遍,知识点重新过一遍。。。给自己加油!

第十节课:CSS复合选择器

一、复合选择器

复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。

优点

  • 复合选择器可以更准确、更高效的选择目标元素(标签);
  • 复合选择器是有两个或多个基础选择器,通过不同的方式组合而成的;
  • 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等。

二、后代选择器

后代选择器又称为包含选择器,可以选择父元素里的子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套式。内层标签就成为外层标签的后代。

语法:

 元素1 元素2 {样式声明}

注意点:

  • 元素1和元素2中间一定要空格隔开;
  • 元素1是父级,元素2是子级,最终选择的是元素2;
  • 元素2可以是儿子,也可以是孙子,只要是元素1的后代即可;
  • 元素1和元素2可以是任意的基础选择器。

html文件:

<!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>后代选择器</title>
    <style>
        div div{
            color: aqua;
        }
    </style>
</head>
<body>
    <div>
        <p>段落一</p>
        <p>段落二</p>
        <div>
            第一个div
            <div>第一个div的孩子</div>
        </div>
        <div>
            第二个div
        </div>
    </div>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

三、子选择器

子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。简单理解就是选亲儿子元素。
使用的符号:>

语法:

元素1>元素2 {样式声明}

注意点:

  • 元素1和元素2之间用大于号隔开;
  • 元素1是父级,元素2是子级,最终选择的是元素2;
  • 元素2必须是亲儿子,左右亲儿子都可以选择,其孙子、后代之类的都不归他管。

html文件:

<!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>复合选择器</title>
    <style>
        div>p{
            color: red;
        }
    </style>
</head>
<body>
    <div>
        初始div
        <p>段落一</p>
        <p>段落二</p>
        <div>
            第一个div
            <a>第一个div的孩子</a>
            <p>第2个div的孩子</p>
            <p>第3个div的孩子</p>
        </div>
        <div>
            第二个div
        </div>
    </div>
</body>
</html>

在这里插入图片描述

四、兄弟选择器

兄弟选择器使用符号:+,可以除了子级集体声明,选择的元素就是除了自身,选择其他的兄弟元素只有后面的前面的不管。

语法:

元素1+元素2 {样式声明}

注意点:

  • 元素1和元素2中间用加号隔开;
  • 元素2是元素1的兄弟,最终选择的是除了元素1的其他元素;

例子:
html文件:

<!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>复合选择器</title>
    <style>
        div+p{
            color: rgb(134, 238, 179);
        }
    </style>
</head>
<body>
    <div>
        初始div
        <p>段落一</p>
        <p>段落二</p>
        <div>
            第一个div
            <a>第一个div的孩子</a>
            <p>第2个div的孩子</p>
            <p>第3个div的孩子</p>
        </div>
        <p>段落三</p>
        <p>段落四</p>
        <div>
            第二个div
        </div>
    </div>
</body>
</html>

效果图:
在这里插入图片描述

五、并集选择器

并集选择器是个选择器通过英文“,”连接而成,任何形式的选择器都可以作为并集选择器的一部分。

语法:

元素1,元素2{样式声明}

注意点:

  • 元素1和元素2中间用逗号隔开,都好可以理解为和的意思;
  • 并集选择器可以选择多组标签,同时他们定义相同的样式,通过常用于集体声明。

例子:
html文件:

<!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>复合选择器</title>
    <style>
        a,p{
            color: rgb(231, 157, 122);
        }
    </style>
</head>
<body>
    <div>
        初始div
        <p>段落一</p>
        <p>段落二</p>
        <em>rtyu</em>
        <div>
            第一个div
            <a>第一个div的孩子</a>
            <p>第2个div的孩子</p>
            <p>第3个div的孩子</p>
        </div>
        <a>123</a>
        <p>段落三</p>
        <p>段落四</p>
        <div>
            第二个div
        </div>
    </div>
</body>
</html>

效果:
在这里插入图片描述

六、伪类选择器

伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第一个,第n个元素。伪类选择器书写最大的特点是用冒号“:”,比如:hover、:first-child。伪类选择器有几种。

  1. 链接伪类选择器
  2. :focus伪类选择器
  3. 结构伪类选择器

例子:
html文件:

<!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>复合选择器</title>
    <style>
        p:first-child{
            color: plum;
        }
    </style>
</head>
<body>
    <div>
        <p>伪类选择器</p>
        <p>这是一个段落</p>
    </div>
</body>
</html>

效果:
在这里插入图片描述

七、链接伪类选择器

  1. a:link:选择所有未被访问的链接
  2. a:visited:选择所有已被访问的链接
  3. a:hover:当鼠标移动在链接上产生的样式(最常用)
  4. a:active:选择活动链接(鼠标按下未弹起的链接)

注意
为了确保生效,请按照顺序声明:link、:visited、:hover、:active。
因为a链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。在实际开发中最常用的是a:hover

例子:
html文件:

<!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>复合选择器</title>
    <style>
        a:link{
             color: rgb(0, 0, 0);
            text-decoration: none;
        }
        a:visited{
            color: skyblue;
        }
        a:active{
            color: red;
        }
        a:hover{
            color: pink;
            font-size: 18px;
        }
    </style>
</head>
<body>
    <div>
        <p>伪类选择器</p>
        <p><a href="#">这是一个显示链接</a></p>
    </div>
</body>
</html>

效果图:
点击前:
在这里插入图片描述

鼠标悬停时:
请添加图片描述

点击时:
在这里插入图片描述

点击后:
在这里插入图片描述

八、focus伪类选择器

:focus伪类选择器用于选取获得焦点的表单元素。
焦点就是光标,一般情况<input>类表单元素才能获取,因此这个选择器也主要针对于表单元素来说。

语法

input:focus{样式1;样式2}

例子:
hml文件:

<!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>复合选择器</title>
    <style>
        /* table{
            border-collapse: collapse;
        } */
        input:focus{
            background-color: thistle;
        }
    </style>
</head>
<body>
    <table border="0px">
        <tr>
            <th colspan="2">登录</th>
        </tr>
        <tr>
            <th>账户:</th>
            <th>
                <input type="text">
            </th>
        </tr>
        <tr>
            <th>密码:</th>
            <th>
                <input type="password">
            </th>
        </tr>
    </table>
</body>
</html>

效果:
点击后聚焦:
在这里插入图片描述

九、结构伪类选择器

  1. first-child:选择父元素里面的第一个儿子
  2. last-child:选择父元素里面的最后一个儿子
  3. nth-child(n):选择父元素里面的某一个,n填自然数从1开始,代表意思选择到父元素里面第n个元素。n的值也可以是odd、even,“odd”代表队是基数,even代表偶数(table各行换色),或者也可以写表达式,(2n+1)取值从0开始。
  4. nth-of-type(n):选择父元素内具有指定类型元素的第几个。比如.nav li p:nth-of-type(2)这里写的代表的意思就是选择ul父元素里面子元素p的第二个(想看元素,再看个数)

例子:
html文件:

<!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>复合选择器</title>
    <style>
        div p:first-child{
            color: plum;
        }
        p:last-child{
            color: royalblue;
        }
        div>p:nth-child(2){
            color: rgb(169, 228, 194);
        }
        div ul li p:nth-of-type(3){
            color: tomato;
        }
    </style>
</head>
<body>
    <div>
        <p>你好</p>
        <p>你好</p>
        <p>你好</p>

        <ul>
            <li>无序列表
                <p>段落</p>
                <p>段落</p>
                <p>段落</p>
                <p>段落</p>
            </li>
            <li>无序列表</li>
            <li>无序列表</li>
            <li>无序列表</li>
            <li>无序列表</li>
        </ul>
        <p>你好</p>
        <p>你好</p>
    </div>
</body>
</html>

效果:
在这里插入图片描述

十、复合选择器总结

选择器作用特征使用情况使用符号
后代选择器用来选择后代元素可以是子孙后代较多空格隔开
子选择器选择最近一级元素只能选择亲儿子较少使用>符号
并集选择器选择某些相同样式的元素可以用于集体声明较多使用,
兄弟选择器可选择紧接在元素后的元素就是选择兄弟较少使用“+
链接伪类选择器选择不同状态的链接跟链接相关较多a:hover
:focus选择器选择获得光标的表单跟表单相关较少input:focus
结构伪类选择器选择所需要的标签根据需要使用不同的结构伪类选择器较少

十一、练习

table结合编写:
请添加图片描述
源码:
html文件:

<!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>Hover</title>
    <link rel="stylesheet" href="hover.css">
</head>
<body>
    <div>
        <table border="0px">
            <tr class="head">
                <!-- <th></th> -->
                <th colspan="5">
                    全部商品分类
                </th>
                <th class="img">
                    <img src="./img/arrow-down.gif" alt="">
                </th>
            </tr>
            <tr class="body">
                <!-- <td>&nbsp;&nbsp;&nbsp;&nbsp;</td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>图书</td>
                <td>图像</td>
                <td colspan="2">数字商品</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>家用电器</td>
                <td>手机</td>
                <td colspan="2">数码</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>电脑</td>
                <td colspan="3">办公</td>
                <td class="img"> 
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>家居</td>
                <td>家装</td>
                <td colspan="2">厨具</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>服饰</td>
                <td>鞋帽</td>
                <td colspan="2">个护化妆</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>礼品箱包</td>
                <td>钟表</td>
                <td colspan="2">珠宝</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>食品饮料</td>
                <td colspan="3">保健食品</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
            <tr>
                <!-- <td></td> -->
                <td class="img">
                    <img src="./img/arrow-icon.gif" alt="">
                </td>
                <td>彩票</td>
                <td>旅行</td>
                <td>充值</td>
                <td>票务</td>
                <td class="img">
                    <img src="./img/arrow-right.gif" alt="">
                </td>
            </tr>
        </table>
    </div>
</body>
</html>

CSS文件:

.head{
    color: seashell;
    background-color: red;
}
.head th{
    text-align: left;
}
.head th:hover{
    color: black;
    font-size: 18px;
}
.img{
    width: 20px;
    text-align: right;
}
tr td{
    font-size: 14px;
    width: 70px;
}
table{
    border-collapse: collapse;
    line-height: 20px;
    background-color: rgb(215,215,215);
}
table tr td:hover{
    color:lightcoral;
    font-size: 16px;
}

直接div编写:
在这里插入图片描述
html文件:

<!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>商品分类</title>
    <link rel="stylesheet" href="./css/商品分类.css">
</head>
<body>
    <div>
        <h2>全部商品分类</h2>
        <ul>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="1">图书</a>
                <a href="2">图像</a>
                <a href="3">数字商品</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="11">家用电器</a>
                <a href="12">手机</a>
                <a href="13">数码</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="21">电脑</a>
                <a href="22">办公</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="31">家居</a>
                <a href="32">家装</a>
                <a href="33">厨具</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="41">服饰</a>
                <a href="42">鞋帽</a>
                <a href="43">个护化妆</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="51">礼品箱包</a>
                <a href="52">钟表</a>
                <a href="53">珠宝</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="61">食品饮料</a>
                <a href="62">保健食品</a>
            </li>
            <li>
                <img src="../img/arrow-icon.gif" alt="">
                <a href="71">彩票</a>
                <a href="72">旅行</a>
                <a href="73">充值</a>
                <a href="74">票务</a>
            </li>
        </ul>
    </div>
</body>
</html>

CSS文件:

div{
    /* height: 300px; */
    width: 250px;
    background-color: rgb(215,215,215);
}
h2{
    color: burlywood;
    font-size: 20px;
    /* height: 40px; */
    line-height:40px;
    text-indent: 2em;
    background: rgb(220,20,60) url(../../img/arrow-down.gif) no-repeat right bottom;
    background-size: 25px;
}
a{
    /* background-attachment:固定背景图像,滚动还是固定 */
    /* 下划线、上划线、删除线 */
    text-decoration: none;
    color: black;
}
a:hover{
    color: red;
    font-size: 16px;
}
ul{
    height: 200px;
    /* background-color: green; */
    list-style-type: none;
}
ul li{
    background: rgb(215,215,215) url(../../img/arrow-right.gif) no-repeat right;
    height: 24px; 
    font-size: 14px;
    line-height: 24px;
}

预习: 从零开始学前端:复习课程 — 今天你学习了吗?(CSS:Day11)

------纸上得来终觉浅,绝知此事要躬行。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coisini_甜柚か

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值