首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有相邻类限制的css匹配选择器

具有相邻类限制的css匹配选择器
EN

Stack Overflow用户
提问于 2015-07-20 04:11:47
回答 3查看 157关注 0票数 10

当我想要匹配一个在同一元素上也有另一个类my-other-class-a的特定类my-class-b时,我可以这样做

代码语言:javascript
运行
复制
.my-class-b.my-other-class-a {
}

另外,当我想要通过部分类名进行匹配时,我可以使用

代码语言:javascript
运行
复制
[class^="my-class-"] {
}

现在我想混合这两种方法,但它似乎不起作用。我该怎么做?

代码语言:javascript
运行
复制
[class^="my-class-"].my-other-class-a {
}
EN

回答 3

Stack Overflow用户

发布于 2015-07-20 04:24:44

这是因为从css选择器[class^="abc"]中指定的类开始测试class属性。

如果选择器是

代码语言:javascript
运行
复制
[class^="my-"]

然后

代码语言:javascript
运行
复制
class="my-class red"

不同于

代码语言:javascript
运行
复制
class="red my-class"

http://jsfiddle.net/u5sfge94/上查看它

解决这个问题的一种方法是指定一个新的类作为class^="abc“。它可能会使您的样式表更有条理,代码更易读,css呈现速度更快。

票数 8
EN

Stack Overflow用户

发布于 2015-07-20 05:28:12

在前面的答案中对@juank的解释是正确的:编写类的顺序很重要,因为^代表值的开始。

但是还有许多其他使用正则表达式的属性选择器:^=*=$=;for以,anywhere开始,以匹配结束。

如果希望选择器与包含my-class的类匹配,则应该使用*= (请参阅代码段1)。

但是,它也会匹配任何不是以my-class开头但仍然包含它的类。为了避免这种情况,您可以像以前对^=所做的那样进行匹配,也可以匹配[class*=" my-class"] (带有空格):它将考虑到它不是写入属性的值中的第一个类的情况(请参见2)。

资源: CSS3.info上的 CSS3 Substring Matching Attribute Selectors (链接到最后的REC CSS level 3选择器)

代码片段1:

代码语言:javascript
运行
复制
[class*='my-class'].my-other-class-a {
  background-color: lightgreen;
}
代码语言:javascript
运行
复制
<div class="my-class-a my-other-class-a">Should match 1</div>
<div class="my-class-b my-other-class-a">Should match 2</div>
<div class="my-other-class-a">Nope</div>
<div class="my-other-class-a my-class-a">Should match 3</div>
<div class="my-other-class-a my-class-b">Should match 4</div>
<div class="whatever my-other-class-a my-class-a">Should match 5</div>
<div class="other my-other-class-a my-class-b">Should match 6</div>
<div class="my-other-class-a maybe-maybe-not-my-class-a">Beware</div>

代码片段2:

代码语言:javascript
运行
复制
[class^='my-class'].my-other-class-a,
[class*=' my-class'].my-other-class-a {
  background-color: lightgreen;
}
代码语言:javascript
运行
复制
<div class="my-class-a my-other-class-a">Should match 1</div>
<div class="my-class-b my-other-class-a">Should match 2</div>
<div class="my-other-class-a">Nope</div>
<div class="my-other-class-a my-class-a">Should match 3</div>
<div class="my-other-class-a my-class-b">Should match 4</div>
<div class="whatever my-other-class-a my-class-a">Should match 5</div>
<div class="other my-other-class-a my-class-b">Should match 6</div>
<div class="my-other-class-a maybe-maybe-not-my-class-a">Beware</div>

票数 5
EN

Stack Overflow用户

发布于 2015-07-20 04:21:34

它并不是万无一失的,但只要你的“变量”类是第一个,它就可以工作:

代码语言:javascript
运行
复制
div[class^='my-class'][class~='my-other-class-a'] {
  background-color: red;
}
代码语言:javascript
运行
复制
<div class="my-class-a my-other-class-a">Hello</div>
<div class="my-class-b my-other-class-a">World</div>
<div class="my-other-class-a">Bye</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31505489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档