gpt4 book ai didi

html - 无法单击div中的输入复选框

转载 作者:太空宇宙 更新时间:2023-11-04 14:55:11 24 4
gpt4 key购买 nike

出于某种原因,将我的标签和输入内容放入 div 时,我无法点击它们。这是我的观点。

#menu {
display: none;
justify-content: center;
align-items: center;
flex-direction: column;

}

#menu > a {
color:#212121;
text-align: center;
width: 100%;
background-color: darkorange;
height: 50px;
margin-bottom: 1px;
text-decoration: none;
}

#menu > .button > p {
font-family: 'Roboto'
}

#menu > a:hover {
background-color: orangered;
}

#menu > a:visited {
color:#212121;
}

------------------

.show-menu {
display: flex;

justify-content: center;
width: 100%;
text-align: center;

}

input[type=checkbox] {
display: none;
}

input[type=checkbox]:checked ~ #menu {
display: flex;
}

.show-menu {
display: block;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
text-decoration: none;
color: #fff;
background: #19c589;
text-align: center;
padding: 10px 0;
}
<body>



<div class="open">
<label for="show-menu" class="show-menu">Show Menu</label>
<input type="checkbox" id="show-menu" role="button">
</div>



<div id="menu">
<a href="#"><div class="button"><p>HOME</p></div></a>
<a href="#"><div class="button"><p>ARTICLES</p></div></a>
<a href="#"> <div class="button"><p>ADVISORS</p></div></a>
<a href="#"><div class="button"><p>HELP</p></div></a>

</div>





</body>

但如果我在 .open div 之外使用它,它就可以工作。我尝试使用其中两个标签和输入,一个在内部,一个在外部,如果我这样做,它们都可以工作。不过,我只想使用一个。

为什么 div 不允许输入起作用?

你能帮帮我吗?

谢谢!

最佳答案

您的问题出在这个选择器上:input[type=checkbox]:checked ~ #menu .查看您的 DOM,您会发现 #menu 不是复选框的一般兄弟,因为您已将复选框嵌套在一个 div 中。 CSS 无法向上遍历 DOM 树并检查父级的兄弟节点——这是您打算做的事情:

├── div.open
│ ├── label
│ └── input // input ~ #menu will not select anything
└── div#menu

当您移动 <input> 时元素脱离其包装父元素,您将其放置在与 #menu 相同的级别,这意味着您的选择器将起作用 ;) 即使此解决方案可能看起来很奇怪,但由于您的复选框是永久隐藏的,所以它位于 DOM 树中的哪个级别和位置并不重要。

├── div.open
│ └── label
├── input // input ~ #menu or input + #menu will work ;)
└── div#menu

#menu {
display: none;
justify-content: center;
align-items: center;
flex-direction: column;
}

#menu>a {
color: #212121;
text-align: center;
width: 100%;
background-color: darkorange;
height: 50px;
margin-bottom: 1px;
text-decoration: none;
}

#menu>.button>p {
font-family: 'Roboto'
}

#menu>a:hover {
background-color: orangered;
}

#menu>a:visited {
color: #212121;
}

------------------ .show-menu {
display: flex;
justify-content: center;
width: 100%;
text-align: center;
}

input[type=checkbox] {
display: none;
}

input[type=checkbox]:checked~#menu {
display: flex;
}

.show-menu {
display: block;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
text-decoration: none;
color: #fff;
background: #19c589;
text-align: center;
padding: 10px 0;
}
<div class="open">
<label for="show-menu" class="show-menu">Show Menu</label>
</div>

<input type="checkbox" id="show-menu" role="button" />

<div id="menu">
<a href="#">
<div class="button">
<p>HOME</p>
</div>
</a>
<a href="#">
<div class="button">
<p>ARTICLES</p>
</div>
</a>
<a href="#">
<div class="button">
<p>ADVISORS</p>
</div>
</a>
<a href="#">
<div class="button">
<p>HELP</p>
</div>
</a>

</div>

另一种解决方案是去除包装 <div>围绕标签 + 输入元素:

├── label
├── input // input ~ #menu or input + #menu will work ;)
└── div#menu

#menu {
display: none;
justify-content: center;
align-items: center;
flex-direction: column;
}

#menu>a {
color: #212121;
text-align: center;
width: 100%;
background-color: darkorange;
height: 50px;
margin-bottom: 1px;
text-decoration: none;
}

#menu>.button>p {
font-family: 'Roboto'
}

#menu>a:hover {
background-color: orangered;
}

#menu>a:visited {
color: #212121;
}

------------------ .show-menu {
display: flex;
justify-content: center;
width: 100%;
text-align: center;
}

input[type=checkbox] {
display: none;
}

input[type=checkbox]:checked~#menu {
display: flex;
}

.show-menu {
display: block;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
text-decoration: none;
color: #fff;
background: #19c589;
text-align: center;
padding: 10px 0;
}
<label for="show-menu" class="show-menu">Show Menu</label>
<input type="checkbox" id="show-menu" role="button" />

<div id="menu">
<a href="#">
<div class="button">
<p>HOME</p>
</div>
</a>
<a href="#">
<div class="button">
<p>ARTICLES</p>
</div>
</a>
<a href="#">
<div class="button">
<p>ADVISORS</p>
</div>
</a>
<a href="#">
<div class="button">
<p>HELP</p>
</div>
</a>

</div>

注意:如果你想要一个基于 JS 的解决方案,你可以更自由地编写你的 DOM :)

关于html - 无法单击div中的输入复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com