css选择器总结

136 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情

最近项目中有一些手写样式的地方,我发现居然有很多css的知识忘记了,关于选择器这部分现在再重新总结回忆一下吧!

css2中基础选择器

  • 元素类型选择器

    直接将标签作为选择器,如直接使用divullih1~h6bodypa等标签名。

  • id选择器#

    使用元素的id属性做选择器,如<div id='app'></div>,css中#app{/** ..样式 */}

  • class选择器 .

    使用元素是class属性做选择器,如<div class='list'></div>,css中.list{/** ..样式 */}

css3中的选择器

css3中的选择器可以分为两大类,属性选择器和伪类选择器,伪类选择器有分多种:

  1. 属性选择器
  2. 伪类选择器
    • 结构性伪类
    • 目标伪类
    • UI元素伪类
    • 语言伪类
    • 否定伪类
    • 动态伪类
    • 层级选择器

1、属性选择器

  1. 标签[属性]{/** ..样式 */}:匹配有改属性的标签元素,不管这个属性的值是什么。

    示例:a[href]{color: red}。解释:找到所有带href属性的a标签设置样式。

  2. 标签[属性 = ‘属性值’]{/** ..样式 */}:匹配属性等于特定值的元素。

    示例:input[type="checkbox"]{background: '#fff'}。找到所有的checkbox框设置背景颜色。

  3. 标签[attr^ = 'value']{/** ..样式 */}:匹配attr属性的属性值以value开头的标签元素

  4. 标签[attr$ = 'value']{/** ..样式 */}:匹配attr属性的属性值以value为结尾的标签元素

  5. 标签[attr* = 'value']{/** ..样式 */}:匹配attr属性的属性值中包含value的标签元素

2、为元素(伪对象)选择器

  1. 标签::frist-line伪元素选择器

    用于某个元素的第一行的文字设置样式。

    示例:p:frist-line{font-wight: 600}将p标签中文字的第一行加粗。

  2. 标签::frist-letter伪元素选择器

    用于某标签中首个文字或字母的样式修改。

  3. 标签::before

    在标签前插入一些内容,设置样式。

  4. 标签::after

    在标签后插入什么内容并设置样式

这里提一下伪元素和伪类的的区别:

通过一个示例看一下这个区别:

<div>
  <p >111</p>
  <i >222</i>
  <i >333</i>
  <p >pp44</p>
</div>
<div>
  <p >一一</p>
  <i >二二</i>
  <i >三三</i>
  <p >pp44</p>
</div>

css样式:

/** 伪元素 */
div::before{color: green; content: 'before';}
p::first-letter{color: red}

/** 伪类 */
div:first-child{border: 2px solid #a00;}
p:first-child{background: #faa}

结果:

image-20220430214418893.png

总结一下伪类和伪元素的区别:

  1. 伪元素语法上是双冒号::,伪类是单冒号
  2. 伪元素是要具体到某一个或某一类标签,比如示例中的所有div前面都要加'before'字符串,或者是所有p的第一个字符变成红色。我们着重关心的是这个div或者是p标签。
  3. 伪类是不用指定具体标签中的内容,比如上面示例中,我们只需要在有p标签的同级元素列表中设置第一个p标签的样式,而不关心这个列表在哪里,列表中都有什么元素,这个列表的父元素是什么。伪类着重关心的是这个标签是否满足条件。

3、结构性伪类选择器

选择器示例解释
:first-childli:first-child{ color:yellow; }选择父元素的子元素列表中第一个子元素是<li> 的每个<li>元素。(需要满足子元素列表的第一个必须是li才能设置上样式)
:last-childp:last-child选择其父元素中最后一个子元素是<p> 的每个<p>元素
:nth-child(n).list:nth-child(3){color: blue}选择父元素的子元素列表中,class名为list的元素列表中的第3个class名为list的元素并设置样式
:nth-last-child(n)p:nth-last-child(2){样式}选择元素列表中倒数第2个p标签
:first-of-typep:first-of-type选择父元素的子列表中的第一个<p>标签。(不限制整个子元素列表的第一个是什么,只需要找到列表中的第一个p)
:last-of-typep:last-of-type选择父元素的子列表中最后一个<p>标签。
:nth-of-type(n)p:nth-of-type(2)选择属于其父元素第二个 <p> 元素
:only-of-typep:only-of-type选择属于其父元素唯一的<p> 元素的每个<p> 元素。
:only-childp:only-child选择属于其父元素的唯一子元素是<p>的每个<p>元素
:emptyp:empty选择没有子元素的每个 <p>元素(包括文本节点)。
:not(标签):not(p)选择非 <p> 元素的每个元素。