定位上一个兄弟元素 CSS

Targeting Previous Sibling Element CSS

我正在使用关闭的 canvas 菜单,我一直在努力使它正常工作。为了让我的固定菜单和 off-canvas 正常播放,我不得不将我的 header 从关闭的 canvas 内包装中取出,但现在我的 header 不会打开菜单时移动。

当 off canvas 打开时,它应用一个 .is-open-right 到内包装,然后应用 CSS。

只有当 .is-right-open class 添加到我的包装器时,我才尝试将 CSS 这行添加到我的 header 中。

-webkit-transform: translateX(-450px);
    transform: translateX(-450px);

我试图以这种方式定位:

.is-open-right, .is-open-right > .header  {
-webkit-transform: translateX(-$offcanvas-size-large);
transform: translateX(-$offcanvas-size-large);

}

我的 HTML 菜单关闭时看起来像这样:

<div class="off-canvas-wrapper">
<header class="header scrolled" role="banner"></header>
<div class="off-canvas-wrapper-inner" data-off-canvas-wrapper=""></div>
</div>

HTML 打开时

<div class="off-canvas-wrapper">
<header class="header scrolled" role="banner"></header>
<div class="off-canvas-wrapper-inner is-off-canvas-open is-open-right" data-off-canvas-wrapper=""></div>
</div>

只有当下一个兄弟元素具有 class .is-open-right 时,我才能定位我的 header 元素吗?从我读到的...看来我可能需要使用 JS 解决方案。

没有 'previous sibling' 选择器。您的解决方案应该是确保将 类 应用于父元素。

您的 HTML 应如下所示:

<div class="off-canvas-wrapper is-off-canvas-open is-open-right">
  <header class="header scrolled" role="banner"></header>
  <div class="off-canvas-wrapper-inner" data-off-canvas-wrapper=""></div>
</div>

另一种选择是将 header 移到 off-canvas-wrapper-inner 下方,这样您就可以将其定位为下一个同级(使用 +)。

当前的 W3 规范草案还包括 :has pseudoselector。完全支持后,我们可以使用以下选择器解决此问题:.previous-class:has(+ .next-class)