继承父元素颜色的气泡箭头

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费额度!

有趣的问题


Jin 所说的“css3 气泡”是指在容器上使用伪元素来添加一个小指针箭头(三角形)。 并不是真正的 CSS3,但这有点吹毛求疵了。

假设在外部 CSS 文件中设置粉红色是不切实际的。 也许它是一个用户设置,或者也许它是以某种方式动态设置的。

<div class="speech-bubble" style="background: pink;">
   I like bananas, because they have no bones.
</div>

使用内联样式设置容器很好,但不幸的是,伪元素没有内联样式。 因此,我们最终可能会得到如下所示的内容

太糟糕了。

不过,有一个解决方案! 当我们为容器设置内联样式时,我们也可以为border-color设置内联样式。 即使容器实际上没有边框,我们也可以依靠继承将该颜色传递给伪元素,伪元素被视为子元素。

<div class="speech-bubble" style="border-color: pink; background: pink;">
   I like bananas, because they have no bones.
</div>

然后,在我们针对伪元素的代码中,我们将明确地让它继承颜色

.speech-bubble:after {
   content: "";
   position: absolute;
   top: 100%;
   left: 20px;
   border-top: 20px solid black;
   border-top-color: inherit; 
   border-left: 20px solid transparent;
   border-right: 20px solid transparent; 
}

请注意,我将inherit应用于border-top-color而不是速记属性border-top。 出于某种原因(欢迎您赐教),inherit在速记中不起作用。 另请注意,当您使用inherit覆盖颜色时,它不会“继承”刚刚在其上方设置的颜色(黑色),而是继承自其父元素。 因此,如果您需要默认值,则需要在父元素上设置border-color

查看演示