javascript - CSS 使带有边框的容器在其所有内容都被隐藏时消失

标签 javascript html css

这是一个常见的需求,源于我制作快捷菜单的经验。

您有一个具有某些样式(框阴影...边框...)的容器,并且动态地在其中包含元素。

当容器为空时,我希望容器消失而不是用样式渲染退化的形状。

这很容易(或多或少优雅地)通过使用类似 container:empty { display: none; 的东西来实现。

当您拥有这些类型的容器的层次结构时,问题就真正出现了。考虑:

<div>
  <span id=b></span>
  <span id=a></span>
<div>

两个 span 都是空容器,它们没有绘制样式,因为我们有一个很好的 :empty 样式,使它们 display: none

但是我们现在无法对元容器使用该技巧。 :empty 伪元素样式不能使 span 不复存在,因此 div 不被认为是空的。

问题是有没有聪明的 CSS 主义可以缓解这种情况?

在下一个即将到来的 CSS 草稿中有没有?

如果两者都不是这种情况,那么可能需要添加什么?这种“不完整性”是当今 CSS 的最大局限之一。

我知道如果更改规范以允许子节点的任何方面影响父节点,则在扫描子节点之前不可能知道如何设置父节点的样式,但是我们是否可以不允许父节点有一次机会重新获得- 在解析其子项的末尾设置样式?这难道不会改变算法的时间复杂度吗? (我意识到这是多么愚蠢,因为我肯定会大大简化它,但这一点可能仍然成立。)

最佳答案

你不能通过 css 做到这一点。但是你可以使用 javascript:

$(".container:not(:has(:not(:empty)))").hide ();

关于javascript - CSS 使带有边框的容器在其所有内容都被隐藏时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48122486/

相关文章:

javascript - yarn 和 npm 的主要区别是什么?

html - 将鼠标悬停在父元素上以显示覆盖的子元素

javascript - 应用某些 css 样式后,fileupload click 事件未正确触发(在 IE 8 上)

javascript - 使用 AJAX 将给定位置与 SQL 数据库中存储的地理编码进行比较

javascript - 有没有办法同步服务器端和客户端的验证过程?

javascript - 动态否定外部脚本

javascript - 如何使 HTML 页面保持事件状态

html - 在 css 中,如何让一个列表为水平列表,一个列表为垂直列表?

javascript - 与闭包的混淆以及为什么返回不正确的值

javascript - 滚动位置如何保持在侧边栏中的事件项目上?