是否有可能为任何具有“icon-”类的元素创建 CSS 定义,然后是一组字母而不是数字。根据这篇文章,类似:
[class^='/icon\-([a-zA-Z]+)/'] {}
应该有效。但由于某种原因,它没有。
特别是我需要为“icon-user”、“icon-ok”等所有元素创建样式定义,但不是“icon-16”或“icon-32”
有可能吗?
是否有可能为任何具有“icon-”类的元素创建 CSS 定义,然后是一组字母而不是数字。根据这篇文章,类似:
[class^='/icon\-([a-zA-Z]+)/'] {}
应该有效。但由于某种原因,它没有。
特别是我需要为“icon-user”、“icon-ok”等所有元素创建样式定义,但不是“icon-16”或“icon-32”
有可能吗?
CSS 属性选择器不支持正则表达式。
如果你真的仔细阅读那篇文章:
正则表达式匹配属性选择器
它们不存在,但这不是很酷吗?我不知道实现起来有多难,或者解析起来有多昂贵,但它不就是炸弹吗?
注意前三个词。它们不存在。那篇文章只不过是一篇博文,感叹CSS 属性选择器中缺少正则表达式支持。
但如果您使用 jQuery,James Padolsey 的:regex
jQuery 选择器可能会让您感兴趣。例如,您给定的 CSS 选择器可能如下所示:
$(":regex(class, ^icon\-[a-zA-Z]+)")
我在 facebook 上回答了这个问题,但我认为我最好也在这里分享:)
我还没有测试过,所以如果它不起作用,请不要开枪:) 但我的猜测是明确定位类名中包含单词 icon 的元素,但指示浏览器不要包含那些包含数字的类.
示例代码:
div[class|=icon]:not(.icon-16, .icon-32, icon-64, icon-96) {.....}
参考:
属性选择器...(http://www.w3.org/TR/CSS2/selector.html#attribute-selectors):[att|=val]
表示具有 att 属性的元素,它的值要么正好是“val”,要么以“val”开头,紧跟“-”(U+002D)。
:不是选择器...(http://kilianvalkhof.com/2008/css-xhtml/the-css3-not-selector/)
希望这可以帮助,
瓦西姆
我测试了我以前的解决方案,可以确认它不起作用(请参阅 BoltClock 的评论)。然而,这确实:
OP:“特别是我需要为“icon-user”、“icon-ok”等所有元素创建样式定义,但不是“icon-16”或“icon-32” ”
所需的 CSS 代码如下所示:
/* target every element were the class name begins with ( ^= ) "icon" but NOT those that begin with ( ^= ) "icon-16", or "icon-32" */
*[class^="icon"]:not([class^="icon-16"]):not([class^="icon-32"]) {.....}
或者
/* target every element were the class name begins with ( ^= ) "icon" but NOT those that contain ( *= ) the number "16" or the number "18" */
*[class^="icon"]:not([class*="16"]):not([class*="32"]) { ...... }
测试代码:
<!DOCTYPE html>
<html>
<head>
<style>
div{border:1px solid #999;margin-bottom:1em;height:100px;}
*[class|=icon]:not([class|=icon-16]):not([class|=icon-32]) {background:red;color:white;}
</style>
</head>
<body>
<div class="icon-something">
<h4>icon-something</h4>
<p><strong>IS</strong> targeted therfore background colour will be red</p>
</div>
<div class="icon-anotherthing">
<h4>icon-anotherthing</h4>
<p><strong>IS</strong> targeted therfore background colour will be red</p>
</div>
<div class="icon-16-install">
<h4>icon-16-install</h4>
<p>Is <strong>NOT</strong> targeted therfore no background colour</p>
</div>
<div class="icon-16-redirect">
<h4>icon-16-redirect</h4>
<p>Is <strong>NOT</strong> targeted therfore no background colour</p>
</div>
<div class="icon-16-login">
<h4>icon-16-login</h4>
<p>Is <strong>NOT</strong> targeted therfore no background colour</p>
</div>
<div class="icon-32-install">
<h4>icon-32-install</h4>
<p>Is <strong>NOT</strong> targeted therfore no background colour</p>
</div>
<div class="icon-32-redirect">
<h4>icon-32-redirect</h4>
<p>Is <strong>NOT</strong> targeted therfore no background colour</p>
</div>
<div class="icon-32-login">
<h4>icon-32-login</h4>
<p>Is <strong>NOT</strong> targeted therfore no background colour</p>
</div>
</body>
</html>