html - 使用纯 css 在输入或 div 未聚焦时隐藏 div

标签 html css

我只想在以下情况下显示一个 div:

  • 重点输入。
  • div 是重点。

这是我的 HTML:

<div>
    <input type="text" />
    <div>
        ...some content
    </div>
</div>

这是我的 CSS:

input + div {
    background: #f0a;
    display: none;
    height: 200px;
    width: 200px;
    overflow-x: auto; 
    overflow-y: scroll;
}

input:focus + div { 
    display: block; 
}

当前行为:

  • 当焦点位于 input 上时,我可以看到 div
  • input 的焦点消失时,我看不到 div
  • 当我尝试点击 div 时,它隐藏了。

我不想要这种行为(当我尝试点击 div 时,它会隐藏)。

如果可能,我想要一个纯 css 解决方案。

因为我正在使用 reactJS,所以我不想使用 jQuery。

最佳答案

div is focused

div 元素默认是不可聚焦的。如果你想强制它们成为焦点,请添加 tabindex="0"(参见 MDN: tabindex)

如果您希望元素可聚焦但不是通过键盘导航 - 然后添加 tabindex="-1"

现在 div 是可聚焦的,我们可以使用 the :focus-within pseudo class ( caniuse ) 来检查容器 div 中任何被聚焦的元素:

.wpr:focus-within div {
  display: block;
}

现在我们还可以删除检查输入是否聚焦的 CSS。

input + div {
    background: #f0a;
    display: none;
    height: 200px;
    width: 200px;
    overflow-x: auto; 
    overflow-y: scroll;
}


.wpr:focus-within div {
  display: block;
}
<div class="wpr">
    <input type="text" />
    <div tabindex="-1">
        ...some content
    </div>
</div>

注意:如果浏览器兼容性有问题(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;
}
<div class="wpr">
  <input type="text" />
  <div tabindex="-1">
    ...some content
  </div>
</div>

关于html - 使用纯 css 在输入或 div 未聚焦时隐藏 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47737282/

相关文章:

html - 将鼠标悬停在下拉列表中的子 <a> 上时,请在父 <a> 上突出显示

html - 统计数据怎么会像那样上下

css - 在 iPad View 中,如何将双列布局的右栏放在顶部?

javascript - 如何制作像 Youtube 中那样具有标记功能的文本区域

hover - 仅限 Opera 的错误 : CSS hover menus leftover repaint bug - workaround?

android - 在 NativeScript for Android 中使用边框

javascript - 如果在 mousedown 之后移动鼠标,则取消传入的 jQuery 单击事件

html - 表格固定标题和带滚动条的第一列

javascript - Css 在 asp.net c# 中不起作用?

html - 将图像悬停添加到链接