我想在以下情况下显示div:
这是我的HTML:
<div>
<input type="text" />
<div>
...some content
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的CSS:
input + div {
background: #f0a;
display: none;
height: 200px;
width: 200px;
overflow-x: auto;
overflow-y: scroll;
}
input:focus + div {
display: block;
}
Run Code Online (Sandbox Code Playgroud)
目前的行为:
input,我可以看到div.input消失时,我看不到div.div,它会隐藏.我不想要那种行为(当我试图点击时div,它会隐藏).
如果可能,我想要一个纯粹的CSS解决方案.
当我使用reactJS时,我不想使用jQuery.
div专注
div默认情况下,元素不可聚焦.如果你想强制它们可以聚焦添加tabindex="0"(参见MDN:tabindex)
如果您希望元素可以聚焦而不是通过键盘导航 - 那么添加 tabindex="-1"
既然div是可聚焦,我们可以使用的:focus-within伪类(caniuse)到被集中在容器专区内检查所有元素:
.wpr:focus-within div {
display: block;
}
Run Code Online (Sandbox Code Playgroud)
现在我们还可以删除用于检查输入是否为焦点的CSS.
input + div {
background: #f0a;
display: none;
height: 200px;
width: 200px;
overflow-x: auto;
overflow-y: scroll;
}
.wpr:focus-within div {
display: block;
}Run Code Online (Sandbox Code Playgroud)
<div class="wpr">
<input type="text" />
<div tabindex="-1">
...some content
</div>
</div>Run Code Online (Sandbox Code Playgroud)
注意:如果浏览器兼容性存在问题(缺少IE/Edge支持:focus-within),您可以使用@Temani Afif的解决方案作为后备
input+div {
background: #f0a;
display: none;
height: 200px;
width: 200px;
overflow-x: auto;
overflow-y: scroll;
}
.wpr:focus-within div {
display: block;
}
input:focus + div {
display: block;
}
.wpr div:hover {
display: block;
}Run Code Online (Sandbox Code Playgroud)
<div class="wpr">
<input type="text" />
<div tabindex="-1">
...some content
</div>
</div>Run Code Online (Sandbox Code Playgroud)