这将选择所有<B>
直接在<A>
标签之后的标签:
A+B {
/* styling */
}
对于所有的选择是什么<A>
直接的标签,随后通过<B>
标签?
这是适合我的问题的示例HTML:
<a>some text</a>
<b>some text</b>
Answers:
你不能在CSS。
编辑:要有更多帮助,如果使用例如jQuery(JavaScript库),则可以使用.prev()
。
您是说给A样式,因为它直接在内部或后面有B元素吗?像这样:
<A>
<B>
</B>
</A>
// OR
<A>
</A>
<B>
</B>
您还不能在CSS中做这样的事情。埃里克·迈耶(Eric Meyer)指出,这种选择器已经在CSS邮件列表中讨论了很多次,并且不可行。WebKit核心开发人员之一Dave Hyatt对此做出了很好的解释,解释了为什么它无法完成。
查看:Shaun Inman的博客文章和Eric Meyer的评论。
戴维·凯悦(David Hyatt)也参与其中。
您只能相反:选择所有直接在标签前面的标签。
从逻辑上讲,这等效于您的请求。
我经常用它来设置许多带有标签的复选框的样式
CSS:
label+input {
margin-left: 4px;
}
DOM:
<input id="a" name="a" type="checkbox"/><label for="a">...</label>
<input id="b" name="b" type="checkbox"/><label for="b">...</label>
<input id="c" name="c" type="checkbox"/><label for="c">...</label>
label+input
,从第二个input
元素开始,对所有元素应用了空白。这是一种在它们之间创建空间的创造性方法,但不能在行的开头或结尾。在这种情况下,它等效于input:not(:first-child)
。
尽管这不是很方便,现在你可以通过你扭转元素的顺序实现这种行为既当您生成HTML和通过应用CSS规则:display: flex
和flex-direction: column-reverse
ul {
display: flex;
flex-direction: column-reverse;
}
.b ~ .a {
color: red;
}
<ul>
<li class="a">A 3</li>
<li class="c">C 2</li>
<li class="c">C 1</li>
<li class="b">B 1</li>
<li class="a">A 2</li>
<li class="a">A 1</li>
</ul>
另外,如果您有2个或更多内联元素,则可以通过应用来实现float: right
,因为它们将以相反的顺序显示:
ul {
float: left;
list-style-type: none;
}
li {
float: right;
}
li:not(:first-child) {
margin-right: 20px;
}
.b ~ .a {
color: red;
}
<ul>
<li class="a">A 3</li>
<li class="c">C 2</li>
<li class="c">C 1</li>
<li class="b">B 1</li>
<li class="a">A 2</li>
<li class="a">A 1</li>
</ul>
A
与和如何B
关联。