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

效果展示

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

解决

border-image 方案❌

/* 这个方法不行 */

直接用 border-image会破坏圆角效果:border-image和 border-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运算,实现"挖空"效果,只保留边框区域

相关推荐
vivo互联网技术7 小时前
域名埋点零侵入实时校验实践:基于代理转发与规则驱动的工具设计
前端·测试·监控·代理·埋点
喵个咪7 小时前
GoWind ShortPlay 拆解:Flutter 沉浸式 Feed 的播放器工程——生命周期、手势状态机与游客降级
前端·flutter·架构
白日做梦Q7 小时前
Chrome商店访问不了,无法现在安装插件?利用Edge商店迁移扩展完整实操教程问题背景
前端·chrome·edge
涛涛ing8 小时前
2026年,你的前端终于不用再“算随机数”和“量高度”了
前端
用户298698530148 小时前
React 前端 Word 转图片:页面与元素级导出的工程实践
前端·javascript·react.js
彭亚川Allen8 小时前
从零手搓 RAG 之分块策略
前端·后端·面试
迷途小羔羊8 小时前
环境搭建
前端·javascript·后端
夕阳_醉了8 小时前
让 AI 回答“打字般”浮现:用 Vue 3 + DeepSeek 实现流式聊天
前端·vue.js·人工智能
SabrinaW7118 小时前
基于 C++17 与 RTTR 的注册式对象工厂:配置驱动的动态对象创建
java·前端·数据库