CSS选择器全局归纳

这篇博客是我在b站学习狂胜说CSS时,对于CSS选择器部分进行的个人理解归纳,因为发现在测试过程中,按照狂神的代码运行有些问题,所以之后又借鉴了尚硅谷的部分教学视频进行归纳。主要包括标签选择器、类别选择器、id选择器、层次选择器(后代选择器、子选择器、相邻的兄弟选择器、通用选择器)、结构伪类选择器和属性选择器。

1、选择器入门

在CSS中什么是选择器呢?

我们知道CSS是对网页起到美化作用的。CSS通过控制HTML中的指定元素,让这些元素的样式变成我们想要的样子,从而使整个网页看起来赏心悦目的同时,也提高我们开发网页的效率!

程序猿编写出来的CSS样式多种多样,第一种样式的字体是宋体,第二种样式的字体是楷体,如果我们网页上有一首情诗,我们想指定第一行是宋体,第二行是楷体,我们如何实现?

CSS选择器是CSS实现对HTML页面中的元素进行一对一,一对多或者多对一的控制的工具。HTML页面中的元素就是通过CSS选择器进行控制的。

每一条CSS样式定义由两部分组成,形式如下:

[code] 选择器{

​ 样式

}[/code]。在{}之前的部分就是选择器。选择器指明了{}中的样式的作用对象,也就是样式作用于网页中的哪些元素。

<style>
    p{	/*"p"就是选择器,并且是标签选择器*/
        font-family:Arial,宋体;
    }
</style>

2、基本选择器(重点)

2.1、标签选择器

标签选择器控制HTML中指定标签中的元素的样式。

格式:标签{}

例如,对< p >标签中元素的样式进行指定就用 p{}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>民国动人情话</title>
    <style>
        h1{
            color:red;
            background:blue;
        }
        p{
            font-family:Arial,楷体
        }
    </style>
</head>
<body>
<h1>
    林徽因
    </h1>
<p>
    你是一树一树的花开
    </p>
<p>
    是燕在梁间呢喃
    </p>
<p>
    你是爱是暖是希望
    </p>
<p>
    你是人间的四月天
    </p>
</body>
</html>

标签选择器配置的样式对所有指定标签的元素内容都生效,如果我们希望在同样的标签中的元素之间样式有区别的话,标签选择器显然不能满足我们的需求。

2.2、类别选择器class

我们可以将HTML中的元素进行分类,对于被划分为同一个类别的元素,它们的样式应该是相同的,不论标签被定义的样式如何。

格式:.类名{}

例如:.class01{}

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .class01{
            color:red
        }
        .class02{
           	color:blue
        }
        .class03{
            color:green
        }
    </style>
</head>
<body>
<p class="class01">Java从入门到精通<p>
<p class="class02">Python从入门到精通</p>
<p class="class03">C#从入门到精通</p>
</body>

类别选择器能够指定一个类别的元素都是同一个样式,但是如果我们需要让HTML中某一个单独的元素,有它独特的样式,id选择器比类别选择器更符合我们的需要。

2.3、id选择器

id选择器是CSS实现对HTML元素一对一或者多对一的重要选择器。我们通过对元素指定id,再对这个id编写单独的样式。

id必须全局唯一!

格式:#id名 {}

例如:#para1 {}

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #para1{
            color: red;
        }
        .class01{
            color: green;
        }
    </style>
</head>
<body>
    <h1 id="para1" class="class01">Java从入门到精通</h1>
    <h1 class="class01">Java从入门到精通</h1>
</body>

2.4、小结

CSS的基本选择器有如下三种:

  • 标签选择器
  • 类别选择器class
  • id选择器

基本选择器的优先级是固定的:id选择器的优先级最高,标签选择器的优先级最低。

id选择器实现了CSS对HTML元素一对一的控制;

标签选择器和类别选择器实现类CSS对HTML元素一对多的控制;

id选择器搭配上标签选择器和类别选择器可以实现CSS对HTML元素多对一的控制,比如类别选择器指定元素A的背景颜色是灰色,字体是黑体,id选择器可以指定元素A的字体大小是20px。(如果类别选择器指定了字体大小,id选择器会覆盖类别选择指定的字体大小样式)

除此之外,如果HTML网页中某个元素独霸了一个类别选择器,那么我们可以理解为类别选择器也能够实现CSS对HTML元素一对一的控制!

3、高级选择器

3.1、层次选择器

层次选择器又分为以下4种:

  1. 后代选择器
  2. 子代选择器
  3. 相邻的兄弟选择器
  4. 通用选择器

**什么是层次?**假设我们手上有10本书,那么每一本书是一个层次,书的每一页又是一个层次,每一页的每一个段落也是一个层次……

联系生活中的辈分,爷爷奶奶是一个辈分,爸爸妈妈是一个辈分,我们是一个辈分。我们可以用“辈分”这个词来理解“层次”这个词。

在这里插入图片描述

后代选择器

在某个元素的后面 祖爷爷->爷爷->爸爸->你

<style>
    /*语法 body p{}*/
    body p{
        background:red;
    }
</style>

body p{}这个语法可以理解为,body层级后所有p标签的元素都执行{}中的样式。

子选择器

只控制下一代,body>p就只控制body层级下的p标签

<style>
    /*语法 body>p{}*/
    body>p{
        color:red;
    }
</style>
相邻兄弟选择器

选择相邻的、同层级的指定标签元素(同辈)

<style>
    /*语法 .active+p{}*/
    .active+p{
        background:red;
    }
</style>
<body>
    <p class="active">
        p1
    </p>
</body>
通用选择器

通用选择器选择同层级的下面的所有元素

<style>
    /*语法 .active~p{}*/
    background:red;
</style>
<body>
    <p class="class">
        p1
    </p>
</body>
层次选择器测试实例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*后代选择器*/
        body div{
            color:red;
        /*我爷爷到我这一代应该都是红色的字体*/
        }
        /*子代选择器*/
        div > span{
            color: blue;
            /*我爸这一辈应该都是蓝色的字体*/
        }
        /*兄弟选择器*/
        .myself + span{
            color: orange;
            /*我兄弟应该是橘黄色的字体*/
        }
        /*通用选择器*/
        .sister + span{
            color: brown;
            /*我老妹之后的同辈份都是棕色的字体*/
        }

    </style>
</head>
<body>
    <!--父元素
            -直接包含子元素的元素叫做父元素
        子元素
            -直接被父元素包含的元素是子元素
        祖先元素
            -直接或间接包含后代元素的元素叫做祖先元素
            -一个元素的父元素也是它的祖先元素
        后代元素
            -直接或间接被祖先元素包含的元素叫做后代元素
            -子元素也是后代元素
        兄弟元素
            -拥有相同父元素的元素是兄弟元素
    -->
    <div>
        我爷爷
        <p>
            我爸
            <span class="myself"></span>
            <span>我兄弟</span>
            <span class="sister">我老妹</span>
            <span>我表妹</span>
        </p>
        <span>我爸的兄弟</span>
    </div>
    <div>
        我爷爷的兄弟
    </div>
</body>
</html>
小结

层次选择器分为以下4类:

  • 后代选择器 语法:父层级名 标签名{}
  • 子代选择器 语法: 父层级名>标签名{}
  • 相邻兄弟选择器 语法: .类名 +标签名{}
  • 通用选择器 语法:.类名~标签名{}

所有选择器的作用域都是指定层级元素之后的HTML元素。

3.2、结构伪类选择器(尚硅谷笔记)

伪类是不存在的类,特殊的类。伪类用来描述一个元素的特殊状态。比如:第一个子元素、被鼠标点击的元素、鼠标移入的元素。

伪类一般情况下都是使用 : 开头

伪类有如下几个种类:

1.:first-child	第一个子元素
2.:last-child	最后一个子元素
3.:nth-child(int n)	选中第n个子元素
	这个伪类有特殊值的情况:
		直接输入“n”	就是选中第n个元素
		输入“2n”或者“even”	表示选中偶数位的所有元素
		输入“2n+1”或者“odd”	表示选中奇数位的所有元素
4.:first-of-type
5.:last-of-type
6.:nth-of-type()

特别注意:前三种伪类都是根据所有的子元素进行排序的。比如:

ul > li:first-child	指的是ul中的第一个子元素,如果ul中是这样的结构:
	<ul>
		<span></span>
		<li></li>
		<li></li>
	</ul>
那么first-child指的是<span>元素,这时显示出来的结果就不会是我们预想的那样。

而后三种伪类的功能和前三种类似,不同点就在于他们是在同类型元素中进行排序,first-chile指的是第一个 < li ></ li >

测试实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*第一个子元素设置为红色*/
        ul > li:first-child{
            color: red;
        }
        /*最后一个子元素设置为蓝色*/
        ul > li:first-child{
            color: blue;
        }
        /*设置第3个元素为绿色*/
        ul > li:nth-child(3){
            color: green;
        }

        ol > li:first-of-type{
            color: red;
        }

        ol > li:last-of-type{
            color: blue;
        }

        ol > li:nth-of-type(2){
            color: brown;
        }

    </style>
</head>
<body>
    <ul>
        <li>第一个</li>
        <li>第二个</li>
        <li>第三个</li>
        <li>第四个</li>
        <li>第五个</li>
    </ul>
    <ol>
        <span>第0个</span>
        <li>第1个</li>
        <li>第2个</li>
        <li>第3个</li>
    </ol>
</body>
</html>

3.3、属性选择器(重要且常用)

具有特定属性的HTML元素样式不仅仅有id和class选择器,还有属性选择器。

属性选择器根据元素的属性来定义样式,标签中如class,id,type,href等等均是元素的属性。【attr = value】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*
            第一种:[属性名] 选择含有指定属性的元素
            第二种:[属性名=属性值] 选择含有指定属性和属性值的元素
            第三种:[属性名^=属性值] 选择属性值以指定值开头的元素
            第四种:[属性名$=属性值] 选择属性值以指定值结尾的元素
            第五种:[属性名*=属性值] 选择属性值中含有某值的元素的元素
        */
        p[title=abc]{
            color: orange;
        }
        p[title$=hello]{
            color: gray;
        }

    </style>
</head>
<body>
    <p title="abc">床前明月光</p>
    <p title="hello">疑是地上霜</p>
    <p>举头望明月</p>
    <p>低头思故乡</p>
</body>
</html>

4、结尾

我的目标是成为Java后端工程师,因此,站在后端开发的角度,我觉得重点掌握id、class和属性选择器就可以了。其它的选择器了解即可,只要知道存在,需要的时候再翻笔记。

如果博客中出现了错误的地方,欢迎读者指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值