CSS实现透明内层+渐变边框的优雅方案

效果展示

实际应用场景 :毛玻璃效果,希望有渐变边框的同时,内层也是渐变背景(需要透最外面的背景色)

解决

border-image 方案❌

/* 这个方法不行 */

直接用 border-image会破坏圆角效果:border-imageborder-radius是互斥的

javascript 复制代码
.element {
  border: 1px solid;
  border-image: linear-gradient(...) 1;
  border-radius: 22px; /* 这个会失效! */
}

伪元素和CSS mask✔

html 复制代码
<!-- template -->
<div class="wrap">
    <div class="content">
        test
    </div>
</div>
javascript 复制代码
// css
.wrap {
    position: relative;
    border-radius: 22px;

    /* 用伪元素实现边框 */
    &::before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        border-radius: 22px;
        padding: 0.55px; /* 边框宽度 */
        background: linear-gradient(
            180deg,
            rgba(255, 255, 255, 0.3) 0%,
            rgba(255, 255, 255, 0.06) 100%
        );
        
		/* 关键:mask技术实现"边框挖空"效果 */
        mask:
            linear-gradient(#fff 0 0) content-box,
            linear-gradient(#fff 0 0);
        -webkit-mask-composite: xor;
        mask-composite: exclude;
        pointer-events: none;
        z-index: 0;
    }

    /* 内容区域在伪元素之上 */
    & > * {
        position: relative;
        z-index: 1;
    }
}

/* 内层内容区域 */
.content {
    background: linear-gradient(
        180deg,
        rgba(255, 255, 255, 0.1) 0%,
        rgba(255, 255, 255, 0.02) 100%
    );
}
  1. 伪元素的妙用

    使用 ::before伪元素专门负责边框绘制

    主元素保持透明,不干扰背景显示,伪元素的层级在内容之下(z-index: 0)

  2. mask

    它的工作原理:

    创建两个相同的蒙版

    第一个蒙版覆盖 content-box(内容区域)

    第二个蒙版覆盖整个元素

    使用 xor运算,实现"挖空"效果,只保留边框区域

相关推荐
光影少年2 分钟前
AI 前端 / 高级前端
前端·人工智能·状态模式
一位搞嵌入式的 genius3 分钟前
深入 JavaScript 函数式编程:从基础到实战(含面试题解析)
前端·javascript·函数式
anOnion14 分钟前
构建无障碍组件之Alert Dialog Pattern
前端·html·交互设计
choke23322 分钟前
[特殊字符] Python 文件与路径操作
java·前端·javascript
云飞云共享云桌面25 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
Deng94520131437 分钟前
Vue + Flask 前后端分离项目实战:从零搭建一个完整博客系统
前端·vue.js·flask
威迪斯特39 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
大鱼前端1 小时前
为什么我说CSS-in-JS是前端“最佳”的糟粕设计?
前端
不爱吃糖的程序媛1 小时前
Capacitor:跨平台Web原生应用开发利器,现已全面适配鸿蒙
前端·华为·harmonyos