【发布时间】:2021-06-30 03:20:18
【问题描述】:
我创建了一个自定义非粘性子菜单,我希望在单击某个菜单项时显示该子菜单。单击时我将其滚动到位置,并且我决定要使用 height 属性控制可见性。使用 CSS 执行此操作的正确方法是什么?
这也是我的第一个问题。我很欣赏有关提出更好问题的提示。
结构看起来像这样
#submenu {
height: 0;
overflow: hidden;
}
.submenu-trigger:focus~#submenu {
height: 134px !important;
}
<div id="wrapper">
<header>
<nav>
<ul>
<li><a>Item 1</a></li>
<li><a>Item 2</a></li>
<li><a class="submenu-trigger" href="#submenu">Item 3</a></li>
<li><a>Item 4</a></li>
</ul>
</nav>
</header>
<!-- Placed outside to follow page scroll -->
<section>
<div id="submenu">
<nav>
<ul>
<li><a>Item 1</a></li>
<li><a>Item 2</a></li>
<li><a>Item 3</a></li>
</ul>
</nav>
</div>
</section>
<main>
…
</main>
</div>
编辑:这似乎用 CSS 是不可能的。当主菜单项不再处于焦点时,如何使用 JS 使子菜单收回?
编辑 2:在 https://ensjotannklinikk.no/forside-wip/ 处实现了 @biberman's suggestion 的变体。以下是现场版的不同之处:
-
“Behandlinger” = 相关菜单项
-
.behandlinger-meny而不是#submenu -
.behandlinger-item而不是.submenu-trigger -
55px而不是auto,以保留 CSS 过渡
document.querySelector('.behandlinger-item').addEventListener('click', function() {
var submenu = document.querySelector('.behandlinger-meny');
submenu.style.height = '55px';
});
真的很接近,感谢@biberman。
唯一缺少的是
-
让它在每次点击时保持打开状态(而不是打开和关闭)。我自己想通了。 -
当单击除@biberman 再次触发。.behandlinger-meny和.behandlinger-item之外的任何其他位置时关闭(返回到高度0) -
此修复不适用于移动设备。 New question.
非常感谢,堆栈溢出!
【问题讨论】:
-
你可以用JS来实现。
-
感谢您提出更好问题的提示。请edit在您的问题中添加stack snippet。所以你的问题包括minimal reproducible example。
-
@Developer 谢谢。如果可能的话,我很想学习用 CSS 来做这件事
-
您的主菜单在
<header>中,而您的子菜单在页面上的其他位置<section>。由于子菜单不在 html 流中,因此仅在您发布的 html 结构中使用 css 似乎是不可能的。 Javascript 是解决方案。
标签: html css css-selectors pseudo-class siblings