在CSS中使用正则表达式?


127

我有一个带有div的html页面,这些div具有形式为s1s2等的id

<div id="sections">
   <div id="s1">...</div>
   <div id="s2">...</div>
   ...
</div>

我想将css属性应用于这些部分/ div的子集(取决于id)。但是,每次添加div时,都必须像这样分别为该部分添加css。

//css
#s1{
...
}

css中是否存在诸如正则表达式之类的东西,可用于将样式应用于一组div


9
您可能应该使用该class属性来标识具有这些ID的元素的类别
LeeGee 2014年

Answers:


191

您可以设法选择那些元素而无需任何形式的正则表达式,如前面的答案所示,但是要直接回答问题,可以在选择器中使用形式的正则表达式:

#sections div[id^='s'] {
    color: red;  
}

也就是说,请选择#section div中任何具有以字母“ s”开头的ID的div元素。

在这里小提琴

W3 CSS选择器文档在这里


1
这是针对CSS 2.1的建议;IE 7,Opera 9等受支持。来源:developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S

2
你让我今天很开心。我希望在搜寻器中包含一些高级CSS选择器,以使其可用户配置。^ =就像沙漠中的水一样。
DGoiko

59

作为此答案的补充,您可以$用来获取结束匹配并*在值名称中的任何位置获取匹配。

匹配任何地方:.col-md.left-col.col.tricolor,等。

[class*="col"]

比赛伊始:.col-md.col-sm-6,等。

[class^="col-"]

匹配的结局:.left-col.right-col,等。

[class$="-col"]

(我知道这听起来很疯狂,但是)是否有可能在每场比赛中都进行“破坏”?
沃尔特

24

ID旨在唯一地标识元素。应用于它的任何样式也应该对该元素唯一。如果您有要应用于许多元素的样式,则应向所有元素添加一个类,而不要依赖ID选择器...

<div id="sections">
   <div id="s1" class="sec">...</div>
   <div id="s2" class="sec">...</div>
   ...
</div>

.sec {
    ...
}

或者在您的特定情况下,可以选择父容器内的所有分区(如果其中没有其他内容),如下所示:

#sections > div {
    ...
}

10

首先,有很多方法可以匹配HTML文档中的项目。从此参考资料开始,可以查看一些可用的选择器/样式,您可以使用这些选择器/样式将样式规则应用于元素。

http://www.w3.org/TR/selectors/

匹配所有div是的直接后代的#main

#main > div

匹配所有div是的直接或间接后代的#main

#main div

匹配第一个div是的直接后代#sections

#main > div:first-child

div与特定属性匹配。

#main > div[foo="bar"]

5

您可以仅向每个DIV添加一个类,然后通过以下方式将规则应用于该类:

HTML:

<div class="myclass" id="s1">...</div>
<div class="myclass" id="s2">...</div>

CSS:

//css
.myclass
{
   ...
}

3
同样作为一般规则,我尽量不要使用ID选择器来设置样式。它调整了特异性,因此它们很难被覆盖,这通常给我带来的伤害大于对经验的帮助。我使用id的...只是不用于应用CSS。
prodigitalson

我只是在说我要尽量避免使用id选择器,因为那样的话,如果以后再覆盖样式(让特定页面说),那么最终就不得不使用相同的选择器+其他任何可以用来使它更多的东西比原始选择器更具体。这样做还不错,.thepage #someid但是在高级表或列表样式上可能会花费很多时间。它不是对您的答案的批评,而是对您的答案的一般建议:-)
prodigitalson 2012年

0

我通常*在要获取包含所需字符的所有字符串时使用。

* 在正则表达式中使用,替换所有字符。

在SASS或CSS中使用类似的东西[id*="s"],它将获得所有ID为“ s ......”的DOM元素。

/* add red color to all div with id s .... elements */

div[id^="s"] {
    color: red;
}

-4

试试我的通用CSS正则表达式

(([a-z]{5,6}.*?\))|([\d.+-]?)(?![a-z\s#.()%])(\d?\.?\d?)?[a-z\d%]+)|(url\([/"'][a-z:/.]*['")]\))|(rgb|hsl)a?\(\d+%?,?\s?\d+%?,?\s?\d+%?(,\s?\d+\.?\d?)?\)|(#(\w|[\d]){3,8})|([\w]{3,8}(?=.*-))

演示https://regexr.com/4a22i


-11

还有另一种简单的方法也可以在CSS中选择特定元素...

#s1, #s2, #s3 {
    // set css attributes here
}

如果您只有几个元素可以选择,并且不想打扰类,那么这也很容易工作。


3
@AustinHenley Bcoz这不是解决方案。我不想像我在问题中提到的那样每次都编辑CSS规则。
Ankit 2012年

这不应该被否决。例如,如果您知道最多有10个div,则可以将#s1到#s10,而不必触摸选择器。正确的方法是使用类,但是此解决方案需要您的假设并尝试解决方案。
jcuenod 2015年

4
对于这种给定情况,这是否可行,并不重要。这个答案根本无法回答问题,因为任何具有最基本的CSS知识的人都知道如何使用多个选择器或类。
Jayant Bhawal '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.