CSS - 普通选择器

目录

 

一、基础选择器

1、通配选择器

2、标签选择器

3、类选择器

4、id选择器

二、基础选择器优先级

三、组合选择器

1、群组选择器

2、子代(后代)选择器

3、相邻(兄弟)选择器

4、交集选择器

四、组合选择器优先级

 - 同目录结构下

 - 不同目录结构下

五、属性选择器


一、基础选择器

1、通配选择器

匹配文档中所有标签:通常指html、body及body中所有显示类的标签

* {
    border: solid;
}

2、标签选择器

匹配文档中所有与标签名匹配的标签:
    
如:div{}会匹配文档中全部div,span{}会匹配文档中所有span

div {
    background-color: yellow;
}

3、类选择器

匹配文档中所有拥有class属性且属性值为red的标签:
  如:<sup class="red"></sup>、 <sub class="red"></sub>均会被匹配
.red {
    color: red;
}

4、id选择器

匹配文档中所有拥有id属性且属性值为div的标签:
  如:<div id="div"></div>、 <section id="div"></section>均会被匹配
#div {
    text-align: center;
}

 

二、基础选择器优先级

  • 基础选择器优先级大致与选择器匹配范围成反比,匹配范围越小,优先级越高

  • 基础选择器优先级大致与选择器匹配精度成正比,匹配精度越高,优先级越高

  • 基础选择器优先级:id选择器 > 类选择器 > 标签选择器 > 通配选择器

注意:id选择器必须保证单文档的唯一性

三、组合选择器

1、群组选择器

div, span, .red, #div {
    color: red;
}
  • 一次性控制多个选择器

  • 选择器之间以,隔开,每一个选择器位均可以为任意合法选择器或选择器组合

2、子代(后代)选择器

/*子代选择器用>连接*/
body > div {
    color: red;
}

/* 后代选择器用空格连接*/
.sup .sub {
    color: red;
}

/*
结构如下:
    div_1
        div_2
            div_3

1>2,2>3 属于子代关系   
1 3 属于后代关系,3是1的后代
*/
  • 一次性控制一个选择器(逻辑最后的那个选择器),前置位的选择器为修饰性选择器

  • 每一个选择器位均可以为任意合法选择器或选择器组合

  • 子代选择器必须为一级父子嵌套关系,后代选择器可以为一级及多级父子嵌套关系

 

3、相邻(兄弟)选择器

/*相邻选择器用+连接*/
.d1 + .d2 {
    color: red;
}

/*兄弟选择器用~连接*/
.d1 ~ .d3 {
    color: red;
}

/*
结构如下:
    <div>
        <p1></p>
        <p2></p>
        <p3></p>
    </div>

p1和p2为相邻,p1和p3同级为兄弟
*/
  • 一次性控制一个选择器(逻辑最后的那个选择器),前置位的选择器为修饰性选择器

  • 每一个选择器位均可以为任意合法选择器或选择器组合

  • 相邻选择器必须为直接相邻关系,兄弟选择器可以为直接相邻或间接相邻关系

4、交集选择器

/*满足类为d,id为dd的div <div class="d" id="dd"></div>*/
div.d#dd {
    color: red;
}
​
/*满足class为d1 d2 d3的所有选择器 <div class="d1 d2 d3"></div>*/
.d1.d2.d3 {
    color: red;
}
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>组合选择器</title>
	<style type="text/css">
        /*交集选择器*/
	/*即是选择器1又是选择器2*/
	i.s.s2 {
	    color: yellow;
	}
		
        /*多类名选择器*/
	.d1 {
	     color: blue;
	}
	.d1.d2 {
	    color: tan;
	}
	.d1.d2.d3 {
	    color: red;
	}
	</style>
</head>
<body>
	<!-- div{div}+span{span}+section{section} -->
	<div>div</div>
	<span class="s">span</span>
	<section>section</section>
	<div>
	    <a href="">a标签</a>
            <section>section2222</section>
	</div>
	<i class="s s2">iiii</i>
	<div class="d1 d2 d3">呵呵</div>
</body>
</html>

四、组合选择器优先级

 - 同目录结构下

  1. 子代与后代的优先级相同  body>div == body div
  2. 相邻与兄弟的优先级相同  div+span == div~span

 - 不同目录结构下

  1. 根据权值大小进行比较,即标签权重和
  2. 权值比较,只关心大小,而不关心位置与具体选择器
  3. 固定不变的大小:id>class>标签 (只有控制同一目标,才具有可比性)
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>组合选择器优先级</title>
	<style type="text/css">
		/*权值:10*/
		div {
			color: red;
		}
		/*权值:20*/
		div div {
			color: yellow;
		}
		/*大于一切标签*/
		.d2 {
			color: blue;
		}
		/*与上比较,.d2抵消,剩权重10*/
		div .d2 {
			color: orange;
		}
		/*等价于div .d2,权值相同,上下文位置决定覆盖与否*/
		.d1 div {
			color: pink;
		}
		/*与上相比,多10*/
		div .d1 div {
			color: tan;
		}
		/*针对不同目标,不具有可比性*/
		div .d1 > div{
			color: green;
		}
		/*id高于一切class及标签*/
		#dd1 div {
			color: #000;
		}
	</style>
</head>
<body>
	<!-- div>.d1>#dd1>div>.d2 -->
	<div>
		<div class="d1">
			<div id="dd1">
				<div>
					<div class="d2">12345</div>
				</div>
			</div>
			<!-- <div id="dd2">
				<div>
					<div class="d2">12345</div>
				</div>
			</div> -->
		</div>
	</div>
</body>
</html>
  • 组合选择器优先级与权值相关,权值为权重和

  • 权重对应关系

选择器权重
通配1
标签10
类、属性100
id1000
!important10000
  • 选择器权值比较,只关心权重和,不更新选择器位置

  • 不同级别的选择器间不具备可比性:1个类选择器优先级高于n个标签选择器的任意组合

 

五、属性选择器

  • [attr]:匹配拥有attr属性的标签

  • [attr=val]:匹配拥有attr属性,属性值为val的标签

  • [attr^=val]:匹配拥有attr属性,属性值以val开头的标签

  • [attr$=val]:匹配拥有attr属性,属性值以val结尾的标签

  • [attr*=val]:匹配拥有attr属性,属性值包含val的标签

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>属性选择器</title>
	<style>
		.d2 {
			color: red;
		}
		/*属性选择器权重 == class选择器权重*/
		/*有属性class的所有标签*/
		[class] {
			color: orange;
		}

		/*有属性class且值为d2的所有标签(值不影响权重)*/
		[class="d2"] {
			color: pink;
		}
		
		/*是div且class='d2',增加了权重*/
		div[class='d2'] {
			color: blue;
		}
		
		/*属性以什么开头: ^= */
		/*属性以什么结尾: $= */
		/*属性模糊匹配: *= */
		[class ^= 'he'] {
			color: yellow;
		}
		[class $= 'ld'] {
			color: tan;
		}
		[class *= 'ow'] {
			color: cyan;
		}
		[class][dd] {
			color: brown;
		}

	</style>
</head>
<body>
	<!-- div.d1>.d2 -->
	<div class="d1">00000
		<div class="d2">12345</div>
		<!-- dd与do为自定义属性 -->
		<div class="helloworld" dd do="do something">helloworld</div>
	</div>
</body>
</html>

注意:

  1. 属性选择器权重等价于类选择器
  2. 掌握所有选择器,并熟知选择器优先级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值