0621:通过CSS实现圆角渐变边框

76 阅读2分钟

border-image :设置边框的颜色,可实现渐变的颜色变化

border-radius :设置边框的弧度

当同时使用上面的两种属性的时候,仅保存了渐变色

那么如何实现圆角渐变呢?

我第一个想到的办法就是盒子的嵌套

通过嵌套实现boder的渐变和弧度

具体实现的代码是

<div class="background-border">
  <div class="slides">
  </div>
</div>
.background-border {
  padding: 6px;
  border-radius: 8px;
  background-image: linear-gradient(180deg, rgba(34, 109, 140, 1), rgba(96, 172, 187, 0.3));
}
.slides {
  background-color: black;
  border-radius: 8px;
  background-image: url('../../assets/images/7_1.jpg');
  background-size: 100% 100%;
}

这种实现方式存在一个问题,当slides的颜色为透明的时候,这会出现底色不满足需要

实操案例:bg + overflow 实现渐变边框 (codepen.io)

针对这一问题尝试了新的解决方案,使用background-clip

background-clip的

border-box意味着背景图铺满整个盒子,能够实现图片内嵌相框吃掉周边的效果

padding-box意味着背景图片仅在内边距框,实现图片在相框内完全展示的效果

content-box意味着背景图片仅在内容框中展示,会出现留白效果

使用这一方案之后能够实现圆角渐变,不过需要使用 background-origin,

语法:

background-origin:属性值;

说明

属性值

属性值说明
border-box从*边框区域(含边框)*开始显示背景图像
padding-box默认值,从*内边距区域(含内边距)*开始显示背景图像
content-box从*内容区域(含内容)*开始显示背景图像

实操案例:background-clip 实现渐变边框 (codepen.io)

除此外我同事给出了一个方案,使用border-image + overflow:hidden

通过添加一个div强制进行弧度的修饰

实操案例: A Pen by Li15072425824 (codepen.io)

后面看到大佬使用了clip-path,直接使用css实现

clip-path:clip-path - CSS:层叠样式表 | MDN (mozilla.org)

在border-image的基础上,叠加clip-path即可实现我们的目的

这个方案存在一个问题,其是对整个图片进行裁剪的,因此,会导致弧度位置边框展示不完全,当border为1px的时候几个边角的样式会被吃掉

clip-path: inset(0 round 10px) 

对图片进行裁剪,将弧度为10px的贴边矩形外部的全部剪切掉

实操案例:clip方法 (codepen.io)

引用文章:使用 clip-path 和 border-image 实现圆角渐变边框 (chokcoco.github.io)

juejin.cn/post/701770…