CSS如何选中除某一个特定元素之外的所有同类型元素?
选中除特定元素外所有同类型元素的实现方案
针对你说的「统一给<a>标签设置链接色,排除单个特殊链接让它和普通文本同色」的场景,直接用下面的方案即可:
方案1::not()伪类选择器(优先推荐,原生CSS实现)
这是最直接的实现方式,不需要额外写冗余的覆盖样式:
- 第一步先给不需要应用统一样式的特殊
<a>标签加一个专属标识,推荐用类名,后续如果有其他要排除的链接也能复用:<!-- 普通链接,会应用统一样式 --> <a href="/home">首页</a> <a href="/about">关于我们</a> <!-- 特殊链接,加标记类 --> <a href="/copyright" class="inherit-text-color">备案信息</a> - 第二步写全局链接样式时,直接通过
:not()排除掉带标记类的元素即可:
用/* 选中所有a标签,排除带.inherit-text-color类的元素 */ a:not(.inherit-text-color) { color: #1677ff; /* 你设置的统一链接文字颜色 */ } /* 给特殊链接设置颜色继承,自动和父级普通文本颜色保持一致 */ a.inherit-text-color { color: inherit; text-decoration: none; /* 如果不需要链接下划线也可以在这里加 */ }color: inherit不需要硬编码普通文本的色值,后续修改全局正文颜色时,这个特殊链接会自动同步颜色,不需要重复修改样式。如果你的特殊链接有唯一id,也可以直接用id做排除,选择器写成a:not(#copyright-link)即可,效果完全一致。
方案2:样式覆盖(兼容极老旧浏览器)
如果需要兼容IE8这类完全不支持:not()伪类的古董浏览器,可以先统一设置所有<a>的样式,再单独给特殊链接写样式覆盖前面的规则(CSS同优先级下,后写的规则会覆盖先写的规则):
/* 先给所有a设置统一链接样式 */ a { color: #1677ff; } /* 单独给特殊链接写样式覆盖 */ a.inherit-text-color { color: inherit; }
注意:如果你的全局链接样式写了很高的优先级(比如绑定了id选择器、多层父级嵌套选择器),那覆盖样式的选择器优先级需要至少和全局样式持平,否则会出现覆盖失效的问题。
内容的提问来源于stack exchange,提问作者Josh Darling
相关产品推荐
相关产品推荐

