CSS选择器及其优先级

选择器的种类

基础选择器

  1. 标签选择器 (tagName)
body { 
	width: 100%;
	background: pink;
}
  1. 类选择器 (.)
.class { 
	width: 100%;
	background: pink;
}
  1. ID选择器 (#)
#id { 
	width: 100%;
	background: pink;
}
  1. 通配选择器 (*)

    在CSS3中,星号(*)可以和命名空间组合使用:
    ns| * - 会匹配ns命名空间下的所有元素
    * | * - 会匹配所有命名空间下的所有元素
    | * - 会匹配所有没有命名空间的元素

  2. 属性选择器 ([])

    属性选择器通过已经存在的属性名或属性值匹配元素

    语法:
    [attr]
    表示带有以 attr 命名的属性的元素。
    [attr=value]
    表示带有以 attr 命名的属性,且属性值为 value 的元素。
    [attr~=value]
    表示带有以 attr 命名的属性的元素,并且该属性是一个以空格作为分隔的值列表,其中至少有一个值为 value。
    [attr|=value]
    表示带有以 attr 命名的属性的元素,属性值为“value”或是以“value-”为前缀("-"为连字符,Unicode 编码为 U+002D)开头。典型的应用场景是用来匹配语言简写代码(如 zh-CN,zh-TW 可以用 zh 作为 value)。
    [attr^=value]
    表示带有以 attr 命名的属性,且属性值是以 value 开头的元素。
    [attr$=value]
    表示带有以 attr 命名的属性,且属性值是以 value 结尾的元素。
    [attr=value]*
    表示带有以 attr 命名的属性,且属性值至少包含一个 value 值的元素。
    [attr operator value i]
    在属性选择器的右方括号前添加一个用空格隔开的字母 i(或 I),可以在匹配属性值时忽略大小写(支持 ASCII 字符范围之内的字母)。
    [attr operator value s]
    在属性选择器的右方括号前添加一个用空格隔开的字母 s(或 S),可以在匹配属性值时区分大小写(支持 ASCII 字符范围之内的字母)。

/* 存在title属性的<a> 元素 */
a[title] {
  color: purple;
}

/* 存在href属性并且属性值匹配"https://example.org"的<a> 元素 */
a[href="https://example.org"] {
  color: green;
}

/* 存在href属性并且属性值结尾是".org"的<a> 元素 */
a[href$=".org"] {
  font-style: italic;
}

/* 存在class属性并且属性值包含以空格分隔的"logo"的<a>元素 */
a[class~="logo"] {
  padding: 2px;
}
/* 以 "#" 开头的页面本地链接 */
a[href^="#"] {
  background-color: gold;
}

/* 包含 "example" 的链接 */
a[href*="example"] {
  background-color: silver;
}

/* 包含 "insensitive" 的链接,不区分大小写 */
a[href*="insensitive" i] {
  color: cyan;
}

/* 包含 "cAsE" 的链接,区分大小写 */ 
a[href*="cAsE" s] { 
  color: pink; 
}

组选择器(选择器列表)

span, 
div {
  border: red 2px solid;
}

选择器列表无效化:
在选择器列表中,如果有一个选择器不被支持,那么整条规则就会失效。这种情况下可以使用:is(),但是会影响整个选择器列表的优先级。

关系选择器

  1. 后代元素选择器 ( A B)
/* p可能是div的子孙重孙等等 */
div p {
	color: red;
}
  1. 直接子元素选择器 (A > B)
/* p肯定是div的儿子 */
div > p {
	color: red;
}
  1. 兄弟元素选择器 (A ~ B)
/* img后面所有同级的p将被选中 */
img ~ p{
	background: grey;
}
  1. 邻近兄弟元素选择器 (A + B)
/* img后面紧跟着的p将被选中 */
img + p {
  font-style: bold;
}

伪选择器

  1. 伪类 ( : )
    为选择的元素的 特殊状态 应用样式
/* 所有用户指针悬停的按钮 */
button:hover {
  color: blue;
}
  1. 伪元素 ( :: )
    可被用于为一个元素的 特定部分 应用样式
/* 每一个 <p> 元素的第一行。 */
p::first-line {
  color: blue;
  text-transform: uppercase;
}

选择器优先级

一个选择器的优先级由四位数组成

  1. 千位内联样式,即声明在style的属性1000
  2. 百位ID选择器0100
  3. 十位类选择器、属性选择器、伪类0010
  4. 个位元素、伪元素选择器0001

在计算时不进位,即使一百个十位也比不了一个百位,级别碾压。

通用选择器 (*),组合符 (+, >, ~, ’ '),和否定伪类 (:not) 不会影响优先级。

看下图:
在这里插入图片描述
h1 + p::first-letter的选择器权重:

选择器选择器类型权重
h1标签选择器0001
p标签选择器0001
::first-letter伪元素选择器0001
合计0003

li > a[href*="en-US"] > .inline-warning的选择器权重:

选择器选择器类型权重
li标签选择器0001
a标签选择器0001
[href*=“en-US”]属性选择器0010
.inline-warning类选择器0010
合计0022

其他优先级规则:

  • 最近的祖先样式比其他祖先样式优先级高
  • 直接样式比祖先样式优先级高
  • !important优先级最高
  • 多类选择器<div class="blue red">xxx</div>中的顺序无关紧要,不牵扯优先级顺序(也可以写成red blue都不影响样式)
  • 一个元素应用多个class样式,后定义的优先,如.red { color: red} .blue{ color: blue},若应用了red、blue两种样式,则会展示blue定义的样式

一个栗子

下面这个例子中的111、222分明是什么颜色,你答对了吗?

<style>
	.red { color: red;}
	.blue { color: blue;}
</style>

<body>
	<div class="red blue">111</div>
	<div class="blue red">222</div>
</body>

答案在此,看下图:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值