css3 选择器

CSS(层叠样式表)选择器是CSS规则的一部分,用来指定需要设置样式的HTML元素。是元素和其他部分组合起来告诉浏览器哪个 HTML 元素应当是被选为应用规则中的 CSS 属性值的方式。选择器所选择的元素,叫做“选择器的对象”。通过选择器可以实现CSS对HTML元素的一对一、一对多、多对一的控制。

CSS选择器主要分为三类,第一类是基础选择器,这又包括通配选择器、标签选择器、ID选择器、CLASS选择器、属性选择器以及组合选择器;第二类是伪类选择器;最后一类是伪元素选择器。

当有多个不同的CSS选择器需要应用相同的样式,这个时候就可以使用选择器列表将样式应用到所有的单个选择器上。

下面来分别介绍一下各类选择器以及选择器列表:

基础选择器
1、通配选择器

在 CSS 中,一个星号 (*) 就是一个通配选择器。它可以匹配任意类型的 HTML 元素。在配合其他简单选择器的时候,省略掉通配选择器会有同样的效果。比如,*.warning 和.warning 的效果完全相同。

<p class="warning">
  <span lang="en-us">A green span</span> in a red paragraph.
</p>
<p id="maincontent" lang="en-gb">
  <span class="warning">A red span</span> in a green paragraph.
</p>
*[lang^=en]{color:green;}
*.warning {color:red;}
*#maincontent {border: 1px solid blue;}
2、标签选择器

CSS 元素选择器 (也称为标签选择器) 通过 node 节点名称匹配元素。因此,在单独使用时,寻找特定类型的元素时,元素选择器都会匹配该文档中所有此类型的元素。

<span id="identified">Here's a span with some text.</span>
<span>Here's another.</span>
span#identified {
  background-color: DodgerBlue;
}
3、ID选择器

在一个 HTML 文档中,CSS ID 选择器会根据该元素的 ID 属性中的内容匹配元素,元素 ID 属性名必须与选择器中的 ID 属性名完全匹配,此条样式声明才会生效。

<span id="identified">Here's a span with some text.</span>
<span>Here's another.</span>
span#identified {
  background-color: DodgerBlue;
}
4、CLASS选择器

在一个 HTML 文档中,CSS 类选择器会根据元素的类属性中的内容匹配元素。类属性被定义为一个以空格分隔的列表项,在这组类名中,必须有一项与类选择器中的类名完全匹配,此条样式声明才会生效。

<span class="classy">Here's a span with some text.</span>
<span>Here's another.</span>
span.classy {
  background-color: DodgerBlue;
}
5、属性选择器

CSS 属性选择器通过已经存在的属性名或属性值匹配元素。属性的选择可以使用正则表达式来匹配。

<ul>
  <li><a href="#internal">Internal link</a></li>
  <li><a href="http://example.com">Example link</a></li>
  <li><a href="#InSensitive">Insensitive internal link</a></li>
  <li><a href="http://example.org">Example org link</a></li>
</ul>
a {
  color: blue;
}
/* 以 "#" 开头的页面本地链接 */
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;
}
/* 以 ".org" 结尾的链接 */
a[href$=".org"] {
  color: red;
}

在这里插入图片描述

6、组合选择器

组合选择器包括四种组合方式:后代选择器、子代选择器、相邻选择器、兄弟选择器。通过间隔符将基础选择器连接起来,实现组合选择的效果。

在这里插入图片描述

li li {
  list-style-type: circle;
}
div > span {
  background-color: DodgerBlue;
}
img + p {
  font-weight: bold;
}
p ~ span {
  color: red;
}
伪类选择器

CSS 伪类是添加到选择器的关键字,指定要选择的元素的特殊状态。例如,:hover 可被用于在用户将鼠标悬停在按钮上时改变按钮的颜色。常用的伪类如下表所示:

在这里插入图片描述

/* 所有用户指针悬停的按钮 */
button:hover {
  color: blue;
}
/* 匹配任意被勾选/选中的 radio(单选按钮),checkbox(复选框),或者 option(select 中的一项) */
:checked {
  margin-left: 25px;
  border: 1px solid blue;
}
/* p标签的一组兄弟元素中的第一个元素*/
p:first-child {
  color: lime;
}
伪元素选择器

伪元素是一个附加至选择器末的关键词,允许你对被选择元素的特定部分修改样式。伪元素选择器通过选择元素的某个部分,对元素的特定部分单独设置样式。

伪元素是某个元素的子元素,是逻辑上存在的虚拟元素,但是实际并不存在与DOM树中。为了便于区分伪类选与伪元素,使用双冒号::作为伪元素选择符。

在这里插入图片描述

/* 每一个 <p> 元素的第一行。 */
p::first-line {
  color: blue;
  text-transform: uppercase;
}
/* 将li元素内容前的符号设置为星号 */
ul li::marker {
  content: '★';
}
选择器列表

如果你有多个使用相同样式的 CSS 选择器,那么这些单独的选择器可以被混编为一个选择器列表,这样,规则就可以应用到所有的单个选择器上了。例如,如果我的h1和.special类有相同的 CSS,那么我可以把它们写成两个分开的规则。

h1 {
  color: blue;
}
.special {
  color: blue;
}

将它们组合起来,在它们之间加上一个逗号,变为选择器列表。

h1, .special {
  color: blue;
}

另外,还有一点需要补充说明的是,选择器也是有优先级的。当通过不同的选择器来定位到某一标签时,该标签会应用优先级高的选择器的样式。

CSS的优先级为:内联样式 > ID选择器 > 类选择器、属性选择器、伪类选择器 > 标签选择器 、伪元素选择器。优先级相同时,根据HTML代码从上往下执行的特点,后面选择器会覆盖前面选择器中相同的属性;优先级不同时,优先级高的选择器生效。通配符选择器*和关系选择符+(相邻选择符)、>(子代选择符)、~(兄弟选择符)、空格(后代选择符)等对优先级没有影响。

在选择器使用较多的情况下,使用CSS优先级判断元素的属性值显示很容易出错且不利于排错,可以通过给选择器添加权重的概念来帮助我们更好的理解CSS选择器的优先级。

在这里插入图片描述

比如,有如下一个选择器:

#header .nav li { list-style: none; }

那么该选择器的权重 = ID选择器100 + 类选择器10 + 标签选择器1 = 111。当有多个选择器时,权重相同时,根据HTML代码从上往下执行的特点,后面选择器会覆盖前面选择器中相同的属性;权重不同时,权重大的选择器生效。

CSS 中的 !important 规则用于增加样式的权重。!important 与优先级无关,但它与最终的结果直接相关,使用一个 !important 规则时,此声明将覆盖任何其他声明。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不负韶华ღ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值