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运算,实现"挖空"效果,只保留边框区域

相关推荐
非优秀程序员37 分钟前
第10章 千团出世|《互联网产品恩仇录》
前端
非优秀程序员42 分钟前
第11章 小高在对面|《互联网产品恩仇录》
前端
非优秀程序员42 分钟前
第14章 只剩美团|《互联网产品恩仇录》
前端
非优秀程序员44 分钟前
第09章 老乡何必为难老乡|《互联网产品恩仇录》
前端
非优秀程序员1 小时前
第03章 三大门户,烽烟起于瀛海威|《互联网产品恩仇录》
前端
程序员大阳5 小时前
HTML+CSS+JS对话式实战(5)-活动管理页之查看报名名单的实现
javascript·css·html·查看报名名单
曦樂~5 小时前
【Web Development】02 CSS
前端·css
风骏时光牛马5 小时前
后端服务接口开发与数据逻辑处理
前端
东鹏特饮5 小时前
经典打砖块(Breakout)游戏
前端·css·css3
IT_陈寒5 小时前
Vite的HMR把我整不会了:一个生产环境的热更新坑
前端·人工智能·后端