浅析纯css实现虚线渐变边框的2种方式:反向镂空与mask遮罩
border-image 可以实现实线渐变边框,但是如果需要虚线渐变边框,则设置 dashed 之后,还是实线,那么如何实现虚线渐变边框呢?
一、反向镂空的方式
如果对边框的样式细节不是很在意,则可以借助反向镂空的方法实现,也就是虚线原本实色的地方和周围颜色融为一体,看上去透明,而原来虚框透明的部分透出渐变背景色,于是看上去像是渐变色。
<div class="box">
<div class="content"></div>
</div>
.box {
width: 150px;
border: 2px dashed #fff;
background: linear-gradient(to bottom, #34538b, #cd0000);
background-origin: border-box;
}
.content {
height: 100px;
background-color: #fff;
}
效果就像这样,其实可以理解为 2px dashe #fff,白色的是本来的边框,透明出来的原 box 内容的渐变底色是原来的虚线镂空位置
虽然这种实现兼容性不错,IE10+都支持,但是,虚实比例由于反过来了,因此,虚线太稀疏,而且边角无法形成直角。在实际项目中,是过不了设计师这一关的。 那有没有效果更精致的虚线边框渐变实现方法呢,有!我们可以借助CSS3 mask遮罩来实现
二、借助CSS遮罩实现精致的渐变虚框
这个方法HTML只需要一层标签即可,而且没有冗余的纯色覆盖,适用于各种背景场合,HTML代码如下:
<div class="box"></div>
CSS代码如下,渐进增强,不支持遮罩的浏览器还是纯色虚框:
.box {
width: 200px;
height: 150px;
border: 2px dashed #cd0000;
box-sizing: border-box;
}
@supports (-webkit-mask: none) or (mask: none) {
.box {
border: none;
background: linear-gradient(to bottom, #34538b, #cd0000) no-repeat;
-webkit-mask: linear-gradient(to right, red 6px, transparent 6px) repeat-x,
linear-gradient(to bottom, red 6px, transparent 6px) repeat-y,
linear-gradient(to right, #000 6px, transparent 6px) repeat-x 0 100%,
linear-gradient(to bottom, #000 6px, transparent 6px) repeat-y 100% 0;
-webkit-mask-size: 8px 2px, 2px 8px, 8px 2px, 2px 8px;
}
}
这个虚框本质上是CSS绘制的,因此,我们可以随意控制虚线的虚实比例,非常灵活。就是上面的 mask-size 和 mask 里的 6px,需要注意的是 6px 那里不能设置为大于 mask-size 的 8px,否则会变成实线
更多内容可见这篇文章:《妙法攻略:渐变虚框及边框滚动动画的纯CSS实现》- https://www.zhangxinxu.com/wordpress/2018/08/css-gradient-dashed-border/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律