如何使用 CSS 在两个 div 之间移动?
How to maneuver between two divs using CSS?
我正在尝试以下操作:
<header>
<input type="checkbox" class="menu-toggle">
</header>
<nav class="top-navigation">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
我的 CSS 如下所示:
.top-menu{
display: none;
}
.menu-toggle:checked .top-menu{
display: block;
}
但我没能做到。我也试过:
.menu-toggle:checked ~ .top-menu
但也失败了
如果我可以将 input[checkbox]
放在 <nav>
中,我就能让它工作。但实际上出于模板目的,我需要像上面那样放置它 HTML (彼此分开)。
我该怎么做?我在这里做错了什么?
像这样将导航包裹在 header 内:
<header>
<input type="checkbox" class="menu-toggle">
<nav class="top-navigation">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
</header>
并且只有您可以使用:
.top-menu{
display: none;
}
.menu-toggle:checked + .top-navigation .top-menu{
display: block;
}
.top-menu{
display: none;
}
.menu-toggle:checked + .top-navigation .top-menu{
display: block;
}
<header>
<input type="checkbox" class="menu-toggle">
<nav class="top-navigation">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
</header>
感谢@BhojendraSah 的回答。对我来说,它是在说:抱歉,这是不可能的——正如@dsfq 在评论中所说的那样:
With this HTML structure it's not possible with :checked
. Checkbox needs to be at least outside of header
.
但我已经说过,我不能更改我的模板以将它们放在一个容器中。但是我得到的没有这个,这是不可能的。
所以我决定执行B计划:
<nav class="top-navigation">
<input type="checkbox" class="menu-toggle">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
并做一些额外的浮动和保证金工作人员:
.menu-toggle{
float: right;
margin-top: -35px; /* as per my template */
margin-right: 20px; /* as per my template */
}
让复选框感觉在 <header>
内。非常感谢,我不接受 Bhojendra 的回答,因为我已经说过,我现在实际上不能去做那样的事情。谢谢 Bhojendra。
我正在尝试以下操作:
<header>
<input type="checkbox" class="menu-toggle">
</header>
<nav class="top-navigation">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
我的 CSS 如下所示:
.top-menu{
display: none;
}
.menu-toggle:checked .top-menu{
display: block;
}
但我没能做到。我也试过:
.menu-toggle:checked ~ .top-menu
但也失败了
如果我可以将 input[checkbox]
放在 <nav>
中,我就能让它工作。但实际上出于模板目的,我需要像上面那样放置它 HTML (彼此分开)。
我该怎么做?我在这里做错了什么?
像这样将导航包裹在 header 内:
<header>
<input type="checkbox" class="menu-toggle">
<nav class="top-navigation">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
</header>
并且只有您可以使用:
.top-menu{
display: none;
}
.menu-toggle:checked + .top-navigation .top-menu{
display: block;
}
.top-menu{
display: none;
}
.menu-toggle:checked + .top-navigation .top-menu{
display: block;
}
<header>
<input type="checkbox" class="menu-toggle">
<nav class="top-navigation">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
</header>
感谢@BhojendraSah 的回答。对我来说,它是在说:抱歉,这是不可能的——正如@dsfq 在评论中所说的那样:
With this HTML structure it's not possible with
:checked
. Checkbox needs to be at least outside ofheader
.
但我已经说过,我不能更改我的模板以将它们放在一个容器中。但是我得到的没有这个,这是不可能的。
所以我决定执行B计划:
<nav class="top-navigation">
<input type="checkbox" class="menu-toggle">
<ul class="top-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</nav>
并做一些额外的浮动和保证金工作人员:
.menu-toggle{
float: right;
margin-top: -35px; /* as per my template */
margin-right: 20px; /* as per my template */
}
让复选框感觉在 <header>
内。非常感谢,我不接受 Bhojendra 的回答,因为我已经说过,我现在实际上不能去做那样的事情。谢谢 Bhojendra。