【发布时间】:2015-07-13 20:54:15
【问题描述】:
我google了一下,但也许这里有人可以向我解释为什么伪元素,即:before和:after会这样。
我有一个内容 div,里面有一些元素 - 段落、锚点、图标等。假设我在一个锚元素上添加了一个 :after 伪元素并填充了一个内容,该内容将显示图标
a:after{
content:"\f001";
font-family: "Awesome icon font";
display: inline-block;
}
我可以通过单击按钮来切换该元素的可见性。
问题是当该元素被隐藏时,DOM 中不会显示任何伪元素。一旦我切换它的可见性(从display:none; 到,比如说display: inline-block;),就会显示伪元素。
在一个更具体的示例中,我有一个导航菜单,如果我单击“汉堡”菜单,可以隐藏或显示该菜单。一个导航项目是一个购物车图标。我通过单击菜单图标来切换上滑动画。所有的文本菜单都会很好地向上滑动,但只有当动画完成时,商店图标才会“弹出”。这看起来有点草率。
为什么会这样?为什么在嵌套伪元素的容器上的显示值控制伪元素的显示(即使它们本身的显示值与none 不同)?不仅影响它们的显示值,当你检查 DOM 时,如果容器有display: none; 值,就不会有任何伪元素存在。
编辑:
【问题讨论】:
-
伪元素被插入到元素中,即它们被添加到满足选择器的元素中。它们不是独立于元素的单独兄弟节点,因此将与所述元素一起消失。尝试将伪元素视为直接后代,添加到元素的开头或结尾。
-
所以基本上如果我想保持他们的可见性,我必须切换
visibility规则而不是display。这很奇怪,因为当您在 div 容器上有display: none;规则并且里面有一些元素时,当您检查 DOM 时,它们仍然存在(html 代码在那里,它们里面是什么),但是伪元素会完全消失。这让我有点困惑。 -
这最后一部分更像是 Inspect/Firebug 工具的问题。无需显示不会生成的内容,因为该元素具有
display: none。:hover和:focus可能会或不会:在这种情况下不会发生 -
你试过'visibility:hidden'吗?
-
我想我必须使用
visibility属性来避免这个问题。