> 没明白这里祖父背景和伪元素的关系 **伪元素** 是一个“不存在”的 dom 节点,是在父元素内出现的,比如一个 `` 这样的结构, `img` 是 `div` 的子元素,同时,这个 `div` 有两个伪元素存在于,如果对 `::before` 和 `::after` 设置了 `content: ''` 属性后,会在 **devtools** 中看到 `div` 的结构是这样的: ::before ::after 简单粗暴理解就是,这个时候,伪元素是与 `img` 同级的,但是存在顺序关系的两个“元素”。 为什么要提到**顺序** 关系呢,因为在层叠的时候,dom 中后出现的元素会覆盖之前出现的元素,除非你用 `z-index` 改变。 至于 `z-index` 的值,是正还是负,这就是另外一个话题了。 如果是负值的话,会跑到父元素下面去,而父元素如果有背景色的话,那么这个设置了 `z-index` 负值的元素可能就看不到了。