CSS选择器

目录

1、基本选择器

1)标签选择器

2)id选择器

3)类选择器

4)通配选择器

2、交集选择器

3、派生选择器

1)后代选择器

2)子元素选择器

3)兄弟选择器

4)邻居选择器

4、属性选择器

1)简单属性选择器

2)具体属性选择器

3)子串属性选择器

5、伪类选择器

1) :first-child 和 :last-child

2) :nth-child(n)

3)状态伪类

6、伪元素选择器

7、结构伪类选择器

1、:root

2、:not

3、:empty

4、:only-child

5、:target


1、基本选择器

1)标签选择器

标签选择器指用HTML元素的标签名做选择器的名字。被标签选择器定义的样式,所有同名HTML标签都会自动套用该样式,我们通常把所有同类标签都相同的样式标签选择器定义。

//直接使用div标签选择 并添加样式
div{
    color:red;
    font-size:16px;
}

2)id选择器

id选择器以“#”开头,选择器名称自定义,可以包含字母、数字、下划线或美元符号,必须以字母或下划线开头,id选择器定义的样式,HTML中具有同名id属性的元素会套用,HTML元素的id选择器属性必须是唯一的,因此,一个id选择器样式唯一对应一个HTML元素,我们通常把元素特有的样式用id选择器来定义。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#aa{
				color: red;
				font-size: 18px;
			}
		</style>
	</head>
	<body>
		<div id="aa">
			id选择器
		</div>
	</body>
</html>

3)类选择器

类选择器是以“.”开头,选择器名称自定义,可以包含字母、数字、下划线或美元符号,必须以字母或下划线开头。类选择器定义样式,HTML元素包含同名 class 属性的元素会套用,多个 HTML 元素可以拥有相同的 class 属性值,因此一个类选择器样式可以被多个 HTML 元素套用,我们通常把多个 HTML 元素共有的样式用类选择器来定义。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.aa{
				color: red;
				font-size: 18px;
			}
		</style>
	</head>
	<body>
		<div class="aa">
			类选择器
		</div>
	</body>
</html>

4)通配选择器

通配选择器用 “*” 表示,*{} 该选择器表示选中页面的所有元素。

2、交集选择器

交集选择器是由两个选择器直接连接构成的,selector1.selector2,其中selector1必须是标签选择器,selector2可以是类别选择器、id选择器、或伪类选择器、伪元素选择器,两个选择器之间不能有空格,必须连续书写。

p.one{
    color:red;
    font-size:16px;
}
h1#two{
    font-size:30px;
    color:blue;
}

3、派生选择器

1)后代选择器

selector1 selector2

selector1 和 selector2 可以是任意类型的选择器,他的选择范围是selector1 后代中的 selector2。只要 selector2 是 selector1 的后代元素都可以被选中,后代选择器中两个元素之间的层次间隔可以是无限的。

2)子元素选择器

selector1 > selector2

 子元素选择器只能选择 selector1 选择范围内元素的直接子元素。

3)兄弟选择器

selector1 ~ selector2

兄弟选择器是在选择器 selector1 所选择元素后面的、并且拥有相同父节点的元素中查找符合sekector2 条件的元素,也就是说 selector1 同父元素且在 selector1 后的所有 selector2。

4)邻居选择器

selector1 + selector2

邻居选择器和兄弟选择器类似但是它只选择 selector1 所选择元素后面的且拥有相同父节点元素的第一个元素。

4、属性选择器

1)简单属性选择器

简单属性选择器只有属性名,表示只要有这个属性,不管值是什么,都会被选择。

//具有 href 属性的 <a> 元素
a[href] {color : red;}
//具有 type 属性的所有元素
*[type] {color : red;]

2)具体属性选择器

除了拥有属性的元素,还可以进一步缩小选择范围,只选择有特定属性值的元素。

//选择所有表单元素中仅选择文本框元素
input[type="text"]{background:yellow;}

3)子串属性选择器

具有属性选择器中的属性值必须完全匹配的时候才能被选择,CSS还提供了5中子串属性选择器,只要元素属性值中包含选择器中设定的值,就会被选中。

子串属性选择器
类型描述
[attr^="val"]选择attr属性值以 val 开头的所有元素
[attr$="val"]选择attr属性值以 val 结尾的所有元素
[attr*="val"]选择attr属性值中包含子串 val 的所有元素
[attr~="val"]选择attr属性值中包含 val 的元素, val 是一个独立的属性值
[attr|="val"]选择attr属性值以 val 开头的所有元素,val 必须是一个单词

5、伪类选择器

1) :first-child 和 :last-child

伪类选择器 :first-child 选择第一个元素,伪类选择器 :last-child 选择最后一个元素。他们的使用方式都一样,一个是从前往后选,一个是从后往前选。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
		/* 选择第一个p元素 */
			p:first-child{
				color: red;
				font-size: 20px;
			}
        /* 选择最后一个p元素 */
			p:last-child{
				color: blue;
				font-size: 18px;
			}
		</style>
	</head>
	<body>
		<div>
			<p>第1个段落</p>
			<p>第2个段落</p>
			<p>第3个段落</p>
			<p>第4个段落</p>
		</div>
	</body>
</html>

2) :nth-child(n)

:nth-child(n) 的使用原则和 :first-child 相同,这里的参数 n 可以是数字、关键字或公式。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
		p:nth-child(1){
			color: red;
			font-size: 20px;
		}
		</style>
	</head>
	<body>
		<div>
			<p>第1个段落</p>
			<p>第2个段落</p>
			<p>第3个段落</p>
			<p>第4个段落</p>
		</div>
	</body>
</html>

参数 n 可以使用 odd 和 even 关键词代替,odd 表示排序为奇数的元素, even 表示排序为偶数的元素。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
		/* 选择奇数的元素1、3 */
		p:nth-child(odd){
			color: red;
			font-size: 20px;
		}
		/* 选择偶数的元素2、4 */
		p:nth-child(even){
			color: red;
			font-size: 20px;
		}
		</style>
	</head>
	<body>
		<div>
			<p>第1个段落</p>
			<p>第2个段落</p>
			<p>第3个段落</p>
			<p>第4个段落</p>
		</div>
	</body>
</html>

3)状态伪类

常用状态伪类
选择器描述常用标签
:link未被访问的元素<a>
:visited已被访问的元素<a>
:hover鼠标指针位于元素上<a>
:active鼠标指针在元素上左键被按下还没有松开<a>
:focus获取焦点的元素<input>
:checked被选中的元素<input>

6、伪元素选择器

常用的伪元素选择器
选择器描述
:first-letter内容文本的第一个字母
:first-line内容文本的第一行字母
:before在元素之前添加内容
:after在元素之后添加内容

7、结构伪类选择器

1、:root

:root 选择器可以匹配文档根元素,在 HTML 中,根元素始终是 HTML 元素,因此当 :root 单独使用时,就表示 <html> 标签,也可以和后代选择器配合使用,表示指定范围内的元素

2、:not

:not 选择器的完整用法是 ":not(selector)" 匹配非指定元素/选择器的每个元素,这个选择器在使用时要慎重。例如以下代码,本意是想将 <h1> 和 <div> 两个标签中的文字设置为红色,但是运行后会发现所有文字的颜色都变为红色。这是因为 :not 选择器相对于整个网页匹配非 <p> 元素,所以 <body> 、<html> 都在选择范围之内。有以下两种修改方法。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			:not(p){
				color: red;
			}
		</style>
	</head>
	<body>
		<div>
			<h1>标题标签</h1>
			<p>第1个段落</p>
			<p>第2个段落</p>
			<p>第3个段落</p>
			<p>第4个段落</p>
			<div>div标签</div>
		</div>
	</body>
</html>

 

1)通过后代选择器缩小选择范围

如果把选择范围定义在 <body> 标签的子元素,那么除 <p> 标签外的标签就只有 <h1> 和 <div>。因此修改选择器":not(p)" 为 "body>:not(p)" 通过后代选择器把选择范围定义在 <body> 标签的所有直接子元素。

2)重定义 <p> 标签样式

还可以在 css 样式表中重定义 <p> 标签样式,设置字体颜色为黑色。

<style type="text/css">
			:not(p){
				color: red;
			}
			p{
				color: black;
			}
		</style>

3、:empty

:empty 选择器用于匹配没有子元素的每个元素,所有单标签一定不包含子元素,所以都属于 :empty 选择器的选择范围,对于双标签,只有开始标签和结束标签紧紧相连的情况下才符合,哪怕只有一个空格,也不会被选中。

:empty 选择器可以和交集选择器结合使用,用于限定某一种标签的非空元素。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
		/* 选择没有子元素的 p 标签 */
			p:empty{
				background-color: red;
				height: 30px;
			}
		</style>
	</head>
	<body>
		<div>
			<p>第1个段落</p>
			<p>第2个段落</p>
			
			<p> </p><!-- 有空格也不会被选中 -->
			<p></p>
		</div>
	</body>
</html>

4、:only-child

:only-child 选择器用于匹配属于父元素的唯一子元素的每个元素,通常和交集选择器结合使用,用于限定某一种标签的父元素只有它一个子元素。如以下代码运行后发现只有“我是唯一的”段落会添加样式。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			p:only-child{
				background-color: red;
				height: 30px;
			}
		</style>
	</head>
	<body>
		<div>
			<p>我是唯一的</p>
		</div>
		<div>
			<span></span>
			<p>我有一个兄弟</p>
		</div>
	</body>
</html>

5、:target

:target 选择器可用于选取当前活动的目标元素。URL 后面跟有锚名称 # ,用于执行文档内某个具体的元素,这个被链接的元素就是目标元素。设置了这个选择器后,当单击锚记链接转跳到目标位置时,目标元素就会应用选择器样式。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr.蔬菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值