background-clip升级,支持边框或文字应用背景

这篇文章发布于 2026年08月6日,星期四,20:24,归类于 CSS相关。 阅读 57 次, 今日 56 次 没有评论

 

一、渐变边框的实现

在过去,渐变边框的主要实现方法,一是嵌套或伪元素模拟嵌套,二是使用border-image属性,相关实现在“被低估的border-image属性”一文中有介绍。

但是border-image属性实现渐变边框有个知名的弱点,那就是不支持圆角!

渐变边框

如果支持圆角,哪怕border-image属性的语法再难以理解,也还是与应用场景的。

本以为这件事情就到此为止了,没想到峰回路转,background-clip属性升级了,居然可以用来实现边框背景效果了,那自然将边框背景设置成渐变不再话下,需要用到全新的属性值 border-area.

border-area与渐变边框

例如:

<style>
canvas {
  border: 1em solid #0000;
  background: linear-gradient(deepskyblue, deeppink);
  background-origin: border-box;
  background-clip: border-area;
  border-radius: 20px;
}
</style>
<canvas></canvas>

就可以得到如下图所示的圆角渐变边框效果了:

渐变边框效果示意

效果很赞!

这里有一些细节需要说明。

当值border-area值合写的时候,background-origin属性是可以省略的,也就是:

canvas {
  border: 1em solid #0000;
  background: linear-gradient(deepskyblue, deeppink) border-area;
  border-radius: 20px;
}

但是如果分开书写,就必须设置background-origin:border-box,否则按照默认的padding-box渲染,渐变边框的效果会比较奇怪,会像下面这样。

奇怪渐变边框效果示意

兼容性

目前Chrome和Safari都已经支持边框背景图了。

border-area的兼容性示意

二、和border-shape属性配合使用

上上个月介绍了全新的CSS border-shape属性,可以轻松实现不规则边框效果,于是可以强强联合,实现不规则图形的特殊边框效果。

例如:

<style>
.star {
    width: 150px;
    aspect-ratio: 1;
    border: 10px dotted #0000;
    border-shape: polygon(
  50% 5%,
  61.8% 34.5%,
  95% 34.5%,
  68.9% 57.3%,
  79.4% 90.45%,
  50% 69.1%,
  20.6% 90.45%,
  31.1% 57.3%,
  5% 34.5%,
  38.2% 34.5%
);
  box-shadow: 2px 2px 4px #0008;
  background: conic-gradient(from -36deg, 
    deepskyblue 72deg, 
    deeppink 0 144deg, 
    rebeccapurple 0 216deg,
    orange 0 288deg,
    green 0
  ) border-area;
}
</style>
<canvas class="star"></canvas>

此时,就可以得到如下图所示的五角色值都不一样的图像效果了:

五色五角星边框效果示意

三、文本背景也规范化了

除了边框支持背景,文本也支持背景了。

实际上,在Chrome浏览器诞生之初,其就支持background-clip:text了,不过那时候还是私有特性,非Web标准。

现在迎来了好消息,自Chrome 120之后,background-clip:text无需私有前缀了,已经晋升为CSS标准属性了。

文字背景兼容性

于是乎,我们就可以将边框背景和文字背景结合起来使用,实现更加炫酷的按钮效果。

例如:

<style>
.button {
  font-size: 14px;
  padding: 6px 12px;
  border: 1px solid #0000;
  border-radius: 4px;
  color: transparent;
  background: linear-gradient(deepskyblue, deeppink) border-area text, 
    linear-gradient(#fff, #fe000005);
  &:active {
    filter: brightness(0.95);
  }
}
</style>
<button class="button">我是按钮</button>

实时渲染效果如下(需要Chrome 150+):

Nice表情包

四、结语说明

没啥好说的,是个相当实用的特性,要是10年前出现,肯定会有很多讨论,朋友圈也可以看到相关文章的转发。

现在么,就像是路边的石头,无人问津。

最后,炫一下周末的渔获吧。

周六老鬼垂钓农家乐,特价108元8小时,钓了32斤;周日天天渔场,188元6小时,钓了七八十斤,两个鱼护。

渔获展示

(本篇完)

分享到:


发表评论(目前没有评论)