CSS:仅在以后的兄弟存在时选择元素

Oma*_*mar 17 html javascript css css-selectors css3

在我的HTML结构中,我设置如下:

<body>
   <main>
      <section>
      ...
      </section>

      <aside>
      ...
      </aside>
   </main>
</body>
Run Code Online (Sandbox Code Playgroud)

问题是,并非所有页面都有 <aside>

我需要选择<section>max-width: 500px; <aside>存在时给它一个.默认值是section { max-width: 1000px; }(何时<aside>不存在)

选择器不同,一个标签后面跟着另一个标签 ; 用户[提问]想要一直设置"B"样式.此外,在这个问题中,用户想要选择"B"(不是"A")


  • <section>如果<aside>存在,我只需要设计样式.
  • 我无法更改HTML> _ <的顺序
  • 它只能用CSS完成吗?
  • 我需要什么选择器或如何设置它?
  • 如果不能用CSS完成(我宁愿它只是CSS),我怎么能做到这一点?

waw*_*awa 21

一个巧妙的小技巧

你可以实现你用了一招,以检查想要的东西,如果<section>元素是唯一的元素<main>.如果那里有任何其他元素,这将无效.在你的情况下,它应该像这样工作(http://jsfiddle.net/Ljm323qb/2/):

section {
     max-width: 500px;
}
/* The STAR of the show */
section:only-child {
     max-width: 1000px;
}
Run Code Online (Sandbox Code Playgroud)

如此代码中所示:http://codepen.io/omarjuvera/pen/ByXGyK?editors = 110


兄弟选择器的一般内容

+选择器可以选择元素之后的兄弟(https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_selectors)

并且有~选择器选择所有以下兄弟姐妹(https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_selectors)

您可以通过将<aside>元素放在元素之前<section>并使用兄弟选择器来实现它.

这是一个例子:http://jsfiddle.net/Ljm323qb/1/

快速浏览一下
很快这将是可能的,有一个新的:has伪类(http://dev.w3.org/csswg/selectors-4/#relational)
你可以调用类似的东西,main:has(> aside) > section { ... }但我们会不幸的是,不得不等待:(


deo*_*owk 5

没有 JavaScript

如果您可以将 html 元素的顺序更改为:

<body>
   <main>
      <aside>
      ...
      </aside>

      <section>
      ...
      </section>
   </main>
</body>
Run Code Online (Sandbox Code Playgroud)

您可以使用同级选择器来做到这一点:

aside ~ section {
    max-width: 500px;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果他可以改变 DOM,这个解决方案就会起作用。不幸的是,他写道:“我无法更改 HTML &gt;_&lt; 的顺序,所以我想,这行不通。” (2认同)
  • 您说“仅 CSS”,但接着又说“更改 html 元素的顺序”。这是没有意义的。 (2认同)