四时宝库

程序员的知识宝库

超深入理解css选择器(着重css3伪类选择器)

属性选择器

对带有指定属性的 HTML 元素设置样式。

ps:这个属性你可以自定义,随便啦,想写什么写什么。

eg:

vue中的scoped作用域属性就是用它来实现的。

在template模板中给style标签加上scoped属性就可以实现不同template页面其样式互不干扰

当然,属性选择器远远不止这些:

我们可以给相同的属性不同的值定义不同的样式

还可以向正则表达式那样,给属性值开头不同,结尾不同,中间含义不同分别设置不同的样式!

input[attr^=a] ------ 属性值【开头】为【“a”】的元素

input[attr$=a] ------ 属性值【结尾】为【“a”】的元素

input[attr*=a] ------ 属性值中含有【“a”】的元素

ps: 我属性前面的input是标签选择器的意思,你也可以用类名,id, 标签什么的都可以!

就像这样:

还有就是我上面css中写属性选择器中,我把属性的中用引号包裹了,事实上,你带不带引号都对!看个人习惯!

伪类选择器

选择第一个子元素:

父元素>子元素:first-child{}

ps:如果有很多父元素,要选择指定的用选择器就行 指定父元素>一堆子元素:first-child

选择最后一个子元素:

父元素>子元素:last-child{}

用法相同。

匹配属于父元素中唯一子元素的元素。

要匹配的子元素:only-child {}

当你使用这个选择器的时候,它会找一个自己是不是独生子女(父元素没有出了自已以外的其它子元素了),如果是独生子女,那就匹配成功,不是,不好意思,匹配失败!

匹配属于其父元素的特定类型的唯一子元素的每个元素。

要指定的子元素类型类型:only-of-type{}

这个真的不是很好理解,和only-child不同(only-child选择器选择的是父元素中只有一个子元素,而且只有唯一的一个子元素。也就是说,匹配的元素的父元素中仅有一个子元素,而且是一个唯一的子元素。),在伪类选择器前面是要指定的子元素类型, 然后当它匹配时候,会找自己在父元素里面是不是独一份(假设我们把标签比作男女的话,它的父亲有很多个孩子,但是其它的都是男孩,只有它是女孩),如果是,匹配成功,否则匹配失败

eg:

ps:大家看了这个选择器,现在可以把它忘掉了,因为讲道理来说,既然它是父元素里的唯一此标签子元素,我们完全可以通过: 父元素>此子元素标签 直接就把它定位了!完全不需要这么麻烦!

nth-child(n)系列伪类选择器

子元素列表 :nth-child(要选择的第几个)

需要注意一点就是,他不是从0开始选择,比如你要选择第一个子元素,那么

子元素列表 :nth-child(1)即可

子元素列表:nth-last-child((要选择的倒数第几个)

同 :nth-child类似,它也是从1开始的,nth-last-child(1)代表倒数第一个,也就是最后一个!

eg:

子元素列表:nth-child(odd) 匹配下标是奇数的子元素
子元素列表:nth-child(even) 匹配下标是偶数的子元素

嗯,可以用它来实现经典的隔行变色是在恰当不过的了!

除此之外,:nth-child里面还可以写一些计算。

:nth-child(数字n) 表示匹配该数字的倍数的意思,比如nth-child(3n)就表示匹配该元素下的所有3的倍数:

eg:

:nth-child(数字n) ,这个数字还可以进行简单的计算,比如,如果我写 :nth-child(3n-1),则会匹配到下标分别为 2,5,8的子元素,因为3的一倍为3,3减1得到下标2的子元素, 3的2倍为6, 6减1得到下标5的子元素。

子元素集合:nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素.

好吧,官方描述可能坑,我们用例子来理解:

不同于 :nth-child(n) (选取父元素的第 N 个子元素,不论元素的类型。n 可以是数字(从 1 开始),关键词(even/odd),或者公式(3n + 1, 2n + 1...))

:nth-of-type(n)与 :nth-child(n) 的区别就在于 :nth-child(n) 不论元素的类型,而nth-of-type(2)选取父元素的第 N 个类型为 你所知道 的子元素。

上图中,父元素有2个span标签,第一个span标签在父元素的子元素集合中下标为2的位置,第二个span在父元素的子元素集合中下标为3的位置

我们使用 span:nth-child(2) 会选中第一个sapn标签,因为下标为1的子元素是p标签,

但是使用 span:nth-of-type(2) 则会选中第二个span标签,因为在该父元素的子元素集合中,第二个span标签是依据该父元素的子元素集合中的span标签集合中的第二个!!!!!!!

子元素集合:nth-last-of-type(n) 
n 可以是数字、关键词或公式。

这个用法同 :nth-of-type(n) 保持一致,只不过它是从倒数开始。

比如 span:nth-last-of-type(2)意思就是说选择父元素的倒数第二个span标签。

eg:

表单系列伪类选择器

:focus {}

表示该表单光标获得焦点时触发。

:

:enabled{} 选择启用状态的元素

凡是没有设置属性为disabled的表单都会匹配到,disabled为禁用该表单的意思

与:enabled{} 相对的,:disabled{}为选择 选择禁用状态的元素 例如:<input type="text" disabled />
:valid {} 验证输入合法时触发
与:valid {} 相对于,:invalid{}选择器在匹配不合法时触发,这里就不写例子了

伪对象选择器

:before

在【当前元素】之前插入【额外内容】 ,需要配合【content】一起

使用。【content】的值就是插入的内容,这个和:after是很常用的,因为可以把一个标签当三个标签来用,大网站经常用它来提示性能。

同:before{}对应,:after{}会在元素之后插入内容,同样,也需要配合content来使用
::selection 指鼠标选中“网页文本”状态的设定。

默认,我们的浏览器选中网页文本效果都是蓝色背景,白色文字:

我们可以通过::selection来更改默认样式:

ps: 记着是两个冒号!!!!! ::selection

好了,差不多就是这些,要是后面还有比较重要的我在补充!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接