css选择器

147 阅读6分钟

基本选择器

id选择器("#"),class选择器("."),标签选择器("div"),通配符选择器(“*”);

属性选择器(“a[title]”) 按照给定的属性,选择所有匹配的元素。

分组选择器

并集选择器(",") 是将不同的选择器组合到一起的方法,它选择所有能被列表中的任意一个选择器选中的节点。

组合器

后代选择器(“ ”) 组合器选择前一个元素的后代节点。

子元素选择器(">") 组合器选择前一个元素的直接子代的节点。

一般兄弟组合器("~") 组合器选择兄弟元素,也就是说,后一个节点在前一个节点后面的任意位置,并且共享同一个父节点。 例子p ~ span 匹配同一父元素下,<p> 元素后的所有 <span> 元素。

紧邻兄弟组合器("+") 组合器选择相邻元素,即后一个元素紧跟在前一个之后,并且共享同一个父节点。 例子: h2 + p 会匹配所有紧邻在 <h2> 元素后的 <p> 元素。

伪类选择器(":")

伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。

链接伪类选择器

a:link     // 选择所有未被访问过的链接
a:visited  // 选择所有已被访问过的链接
a:hover    // 选择鼠标指针位于其上的链接
a:active   // 选择活动链接(鼠标按下未弹起的链接)

focus伪类选择器

焦点就是光标,一般情况下<input>类表单元素才能获取,因此这个选择器也主要针对表单元素来说。

// 当input获取到光标的时候就改变背景色
input:focus {
    background-color:red;
}
<div>
    <input type="text" />
    <input type="text" />
</div>

结构伪类选择器 E:nth-child(n)

选择符简介
E:first-child匹配父元素中的第一个子元素E
E:last-child匹配父元素中最后一个E元素
E:nth-child(n)匹配父元素中第n个子元素E
E:first-of-type指定类型E的第一个
E:last-of-type指定类型E的最后一个
E:nth-of-type(n)指定类型E的第n个

nth-child 和 nth-of-type 的区别

nth-child 对父元素里面所有孩子排序选择(序号是固定的),先找到第n个孩子,然后看看是否和E匹配。

nth-of-type 对父元素里面指定的子元素进行排序选择。先去匹配E,然后再根据E 找到第n个孩子。

我们看一个简单的例子

<div>
    <p>我是第一个P标签</p>
    <p>我是第二个P标签</p>
</div>
p:nth-child(2) { color: red; }

结果:

p:nth-of-type(2) { color: red; }

结果:

尽管上面两个demo的最后效果一致,但是两个选择器之间存在差异是必然的。

我们把上面的实例稍作修改,就可以看到这两个选择器之间的差异表现了,

<div class="flex">
    <div>我是搅局的div标签</div>
    <p>我是第一个P标签</p>
    <p>我是第二个P标签</p>
</div>
p:nth-child(2) { color: red; }

结果:

p:nth-of-type(2) { color: red; }

结果:

这时候两个选择器所渲染的结果就不一样了。

p:nth-child(2)悲剧了,其渲染的结果不是第二个p标签文字变红,而是第一个p标签,也就是父标签的第二个子元素。

p:nth-of-type(2)的表现显得很坚挺,其把希望渲染的第二个p标签染红了。

对于p:nth-child(2)表示这个元素要是p标签,且是第二个子元素,是两个必须满足的条件。于是,就是第一个p标签颜色为红色(正好符合:p标签,第二个子元素)。如果在div标签后面再插入个span标签,如下:

<div>
    <div>我是搅局的div标签</div>
    <span>我是搅局的span标签</span>
    <p>我是第1个p标签</p>
    <p>我是第2个p标签</p> 
</div>

那么p:nth-child(2)将不会选择任何元素。

p:nth-of-type(2)表示父标签下的第二个p元素,显然,无论在div标签后面再插入个span标签,还是h1标签,都是第二个p标签中的文字变红。

伪元素选择器

伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构。

新创建的这个元素,在文档树中是找不到的,所以我们称为伪元素

选择符简介
::before在元素内部的前面插入内容
::after在元素内部的后面插入内容
  • before 和 after 创建一个元素,但是属于行内元素。

例子:

<div></div>
div::after {
    content: '小猪佩奇';
}

结果:

4.png

:checked

:checked CSS 伪类选择器表示任何处于选中状态的radio(<input type="radio">), checkbox (<input type="checkbox">) 或 ("select") 元素中的option HTML 元素 ("option")。

:default

:default CSS pseudo-class 表示一组相关元素中的默认表单元素。

该选择器可以在 <button><input type="checkbox"><input type="radio">, 以及 <option> 上使用。

:disabled

:disabled CSS 伪类表示任何被禁用的元素。如果一个元素不能被激活(如选择、点击或接受文本输入)或获取焦点,则该元素处于被禁用状态。元素还有一个启用状态(enabled state),在启用状态下,元素可以被激活或获取焦点。

:enabled

CSS 伪类  :enabled 表示任何被启用的(enabled)元素。如果一个元素能够被激活(如选择、点击或接受文本输入),或者能够获取焦点,则该元素是启用的。元素也有一个禁用的状态(disabled state),在被禁用时,元素不能被激活或获取焦点。

:focus-within

:focus-within 是一个CSS 伪类 ,表示一个元素获得焦点,或,该元素的后代元素获得焦点。换句话说,元素自身或者它的某个后代匹配 :focus 伪类。

:has()

:has()  CSS 伪类代表一个元素,其给定的选择器参数(相对于该元素的 :scope)至少匹配一个元素。

in-range

in-range CSS 伪类 代表一个 <input> 元素,其当前值处于属性min 和max 限定的范围之内。

:invalid

:invalid CSS 伪类 表示任意内容未通过验证的 <input> 或其他 <form> 元素。

:not()

:not CSS 伪类表示不匹配选择器列表的元素。 由于它阻止选择特定项目,因此它被称为否定伪类。

:only-child

:only-child CSS伪类表示没有任何兄弟的元素。这与:first-child:last-childor相同:nth-child(1):nth-last-child(1),但特异性较低。

:out-of-range

CSS伪类表示当前值超出和属性指定的范围限制的元素。 :out-of-range <input>minmax

:placeholder-shown

CSS伪类表示当前正在显示占位符文本的任何或元素。 :placeholder-shown <input><textarea>

:read-only

CSS伪类表示用户不可编辑的元素(例如或)。 :read-only input``textarea

:read-write

CSS伪类表示用户可编辑的元素(例如或)。 :read-write input``textarea

:root

CSS伪类匹配代表文档的树的根元素。在 HTML 中,表示元素,与选择器相同,只是它的特异性更高。 :root :root<html>html