当前位置: 首页 > Web前端 > CSS

CSS属性选择器深钻

时间:2023-03-30 22:26:22 CSS

CSS属性选择器可以通过已有的属性名或属性值来匹配元素。属性选择器在CSS2中引入,并在CSS3中得到广泛扩展。本文将更全面地介绍属性选择器,并尽可能多地探索这个选择器在不同场景下的不同用途。语法简单介绍[attr]:这个选择器选择所有包含attr属性的元素,不管attr的值是多少。[attr=val]:该选择器只选择其attr属性被赋值为val的所有元素。[attr~=val]:该选择器只选择具有attr属性的元素,并且要求val值是attr值中包含的以空格分隔的值列表之一。子字符串值(Substringvalue)属性选择器,以下是CSS3新语法,也称为“伪正则选择器”,因为它们提供了类似于正则表达式的灵活匹配方式。[attr|=val]:选择attr属性值为val或以val-开头的元素(注意这里的“-”不是报错,是用来处理语言编码的)。[attr^=val]:选择attr属性值以val开头(包括val)的元素。[attr$=val]:选择attr属性值以val(含)结尾的元素。[attr*=val]:选择attr属性包含子串val的元素(子串只是字符串的一部分,例如“cat”是字符串“caterpillar”的子串)CSS属性选择器最基本的用法属性选择器最基本的用法就是通过属性值来选择DOM元素,这样,所有具有href属性的DOM元素都会被选中:[href]{color:red;}CodePenDemo--属性选择器的基本用法稍微复杂一点,层叠选择div[href]{...}多条件复合选择选择一个img标签,里面有title属性,里面有类名是logo.img[title][class的元素~=logo]{...}伪正则写法i参数忽略类名大小写限制,选择包含类类名子串的p元素为text,Text,TeXt...和很快。这里i的意思就是正则表达式中参数i的意思,ignore,意思是忽略大小写。p[class*="text"i]{...}所以上面的选择器可以像这样选择目标元素:

g参数与正则表达式不同,这里的g参数表示区分大小写。但是,这个属性目前还不是标准的,很多浏览器都不支持。CodePenDemo--属性选择器与:not()伪类的伪正则用法另一种常见的场景是匹配:not()伪类来完成一些判断和检测的功能。例如,下面的选择器可以选择所有没有[href]属性的a标签,并添加红色边框。a:not([href]){border:1pxsolidred;}当然更复杂了,我们可以匹配多个:not()伪类,像这样,可以和多个一起使用同时,选择一个href,target,一个没有rel属性的标签:a:not([href]):not([target]):not([rel]){border:1pxsolidblue;}CodePenDemo--属性选择器匹配:不是伪类覆盖内联样式?甚至,如果有这种场景,我们也可以覆盖内联样式,像这样:xxxxxx

我们可以使用属性选择器强制覆盖上面的Style:[style*="color:red"]{color:blue!important;}组合装箱用法,配合伪元素提升用户体验当然,属性选择器并不一定只是标签选择。使用伪元素,我们可以实现许多有助于改善用户体验的功能。角标函数这里有一个小知识点,伪元素的content属性,通过attr(xxx)可以读取名为xxx的DOM元素标签对应的属性值。因此,通过属性选择器,我们可以很方便的实现一些角标功能:Message
div{position:relative;宽度:200px;height:64px;}div::before{content:attr(count);...}这里右上角的数字5是用属性选择器和伪元素实现提示角标,可以适配各种长度,也可以中英文,可以省去一些标签。CodePenDemo--属性选择器实现角标功能属性选择器配合伪元素实现类title功能我们都知道给图片添加title属性,鼠标悬停在图片上时,title属性中附加的内容会显示,像这样:这个不一定是img标签,给其他标签加上title属性也可以达到类似的效果。但是这里有两个问题:响应速度太慢,通常鼠标悬停到标题框出现需要1秒左右。框架结构不可自定义,弹框样式不可自定义。您可以自定义一个可以快速响应的浮动层的类似标题的属性。我们称之为popTitle,因此您可以这样操作:Thisisadescriptivetext

Thisisadescriptivetext

p[popTitle]:hover::before{content:attr(popTitle);位置:绝对;红色;边框:1px实心#000;...}对比一下,第一个是原生的title属性,下面两个是伪元素模拟使用属性选择器的小技巧:浏览器自带的title属性延迟响应是加了一层防抖保护,避免频繁触发。这里也可以给伪元素加上100毫秒的transition-delay来实现延时显示。CodePenDemo--属性选择器配合伪元素实现类标题功能,商品展示提示效果好。下面我们对上面的应用实例进行扩展,考虑如何更好的应用到实际业务中。其实有很多用途。比如通过属性选择器给图片添加标签,类似于一些电商网站会用到的一个效果。我们想给图片添加一些标签,当鼠标悬停在图片上时会显示这些标签。当然,在CSS中,