[desc1]::before,[desc2]::after{位置:绝对;opacity:0;}[desc1]::before{content:attr(desc1);}[desc2]::after{content:attr(desc2);}[desc1]:hover::before,[desc2]:hover::after{opacity:1;}看效果:CodePenDemo--通过属性选择器给图片添加标签属性选择器配合伪元素实现下载提示我们知道HTML5在标签中添加了下载属性,指示浏览器下载URL而不是导航到它。然后,我们可以使用属性选择器来提示所有带有此类标签的元素。像这样:
logo[download]{position:relative;color:hotpink;}[download]:hover::before{content:"点击下载此资源!";位置:绝对;...}当我们悬停到这个链接时,会是这样,提示用户这是一个可以下载的按钮:CodePenDemo--属性选择器配合伪元素提示下载。属性选择器配合伪元素提示链接协议(http/https)。现在大多数网站要么已经切换到https,要么正在切换到https。如果页面上的链接比较多或者对跳转页面的协议有要求,使用属性选择器和伪元素来提示链接的协议也是一个不错的方法。a[href^="http:"]:hover::before{content:"这是一个http链接";...}a[href^="https:"]:hover::before{content:"ThisItisanhttpslink";}CodePenDemo--属性选择器配合伪元素提示协议链接(http/https)。当然,伪元素的内容不一定是纯文本。或者您可以添加图片和文字。比如我们可以在https链接站点上直观的加一个绿色的小锁,这很符合用户的一些普遍认知。这里我把小绿锁的图片使用base64嵌入到伪元素中,简单的使用text-indent来控制图文的排版:a[href^="https:"]:hover::before{内容:””;左填充:16px;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAb0lEQVQoz2NkQAJc5aIc//7962VgYIiDCi1iYmIq/tb5+gdMDROyBqhiGWYmJlVmJiZVBgYGGagYdsBRKvyZu1xUAsbnLheV4CgV/oxbQ4nwf0JiTAwkAkaIU4QaGf4z1uFX+b/pR/e7epJtGJEaAKDXHzEJ3KYmAAAAAElFTkSuQmCC");...}这里只是一个非常小的Demo,实际情况是大部分用户不理解这个绿色小锁的含义,所以实际使用时要伴随文字辅助提示。CodePenDemo--属性选择器配合伪元素为https协议提供图文提示。属性选择器还可以在处理文件类型时为一些可下载资源提供可视化的图标提示。- Word文件
- PPT文件
- PDF文件
- MP3文件
- AVI文件
a[href$=".doc"i]::before{content:"doc";背景:#a9c4f5;}a[href$=".ppt"i]::before{content:"ppt";背景:#f8e94f;}a[href$=".pdf"i]::before{content:"pdf";背景:#fb807a;}a[href$=".mp3"i]::before{content:"mp3";背景:#cb5cf5;}a[href$=".avi"i]::before{content:"avi";background:#5f8ffc;}CodePenDemo--属性选择器选择文件名后缀属性选择器处理输入类型属性选择器其实是输入类型元素的好帮手,因为输入是常用的,经常会匹配很多不同的属性值功能。但是,由于输入类型的原因,无法添加伪元素。所以有了属性选择器,你可以通过属性的各种状态来更多的改变自己的风格。简单举个例子,比如:input[type=text][disabled]{border:1pxsolid#aaa;背景:#ccc;}这里,我们选择了type=text和disabled属性的input元素,并将它的背景颜色和边框颜色设置为灰色。给用户更好的视觉提示。注意点注意选择器的优先级,.class和[class=xxx]是否等价考虑这个问题,下面两个选择器是否等价?.header{color:red;}[class~="header"]{color:blue;}上面两个选择器的作用完全一样。但是,如果是下面的情况,两者是不同的:比属性选择器[id="header"]具有更高的权重。虽然两者都可以选择相同的元素,但它们并不完全等价。需要报价吗?考虑以下三种情况,它们是否一致?[class="header"]{...}[class='header']{...}[class=header]{...}其实从HTML2开始,已经支持不用引号的写法了,所以以上三种写法都是正确的。但是,能用引号不加引号是有限制的,看下面:a[href=bar]{...}a[href^=http://]{...}第二个选择器这是一个无效的选择器。如果不加引号://,将被错误识别。必须这样引用a[href^="http://"],这里的具体原因可以参考这篇文章:Unquotedattributevaluevalidator。所以为了保险起见,建议加上引号。CSS语义书写“语义HTML”原则是现代专业前端开发的基础。当然,我们常说的是语义HTML。那么,CSS是否需要语义化?CSS是语义化的吗?就像上面的例子一样,它可以用一个特定的类名或一个id选择器来完成。那么使用属性选择器的基本原理是什么?我的理解是属性本身已经具有一定的语义,表达了元素的某些特征或者功能,使用属性来选择元素然后对属性值进行特定的操作也可以在一定程度上帮助提高代码的语义改变。至少它提高了CSS代码的可读性。但是CSS是否需要语义化是见仁见智的事情。最后,这里有几篇文章也涵盖了很多其他用途,可以对比查看:SemanticCSSWithIntelligentSelectorsSplicingHTML'sDNAWithCSSAttributeSelectors更多精彩的CSS技术文章汇总在我的Github--iCSS,持续更新中,欢迎点击这里star订阅收藏夹。好了,本文到此结束,希望对大家有所帮助:)有什么问题或者建议可以多交流,原创文章,文笔有限,知识匮乏,如有不妥之处,敬请谅解!文章,请告诉我。最后,新开的公众号求关注。希望格式更短、质量更高的技术文章,包括但不限于CSS: