实现一个半透明的边框,会的举手🙋‍

258 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

有一天老王和他的产品聊了一些需求后跟我抱怨,寻求帮助。事情是这样的:

产品:这个按钮加个半透明的边框,这样显得高大上点。

老王:简单!安排!

一小时后...

产品:做好了吗?

老王:这个有毒啊,怎么不行呢?再让我研究下...

于是就有了今天这个文章。

边框

白色实心边框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            padding: 50px 180px;
            background: url(./images/lolbg.png) no-repeat;
        }
        .demo {
            width: 100px;
            height: 100px;
            border: 10px solid rgb(255, 255, 255);
            background-color: #f8b62a;
        }
    </style>
</head>
<body>
    <div class="demo"></div>
</body>
</html>

image.png

白色半透明边框

为了先确定白色半透明的样子,我们先把背景色注释掉:

.demo {
    width: 100px;
    height: 100px;
    border: 10px solid rgba(255, 255, 255, .5);
    /* background-color: #f8b62a; */
}

image.png

加上背景色:

image.png

????????why?明明我的边框设置的是白色半透明的啊?怎么回事?还好我不是老王,这点小事怎么可能难得到我?(偷偷百度了一下)于是一分钟后:

 .demo {
    width: 100px;
    height: 100px;
    border: 10px solid rgba(255, 255, 255, .5);
    background-color: #f8b62a;
    background-clip: padding-box;
}

image.png

何方神圣

我们注意到一个我们不太熟悉得css属性,background-clip,它有3个可能的值:

  • border-box: 背景被裁剪到边框盒(默认)。
  • padding-box: 背景被裁剪到内边距框。
  • content-box: 背景被裁剪到内容框。

盒子模型

5342d86395c0422c8d2a2fd848210352.png

黄色区域就是上述的content-box,绿色+黄色区域就是padding-box,黑色border+绿色+黄色就是我们的border-box,具体看以下例子:

border-box

.demo {
    width: 100px;
    height: 100px;
    border: 10px solid rgba(255, 255, 255, .5);
    background-color: #f8b62a;
    background-clip: border-box;
    padding: 40px;
}

image.png

padding-box

.demo {
    width: 100px;
    height: 100px;
    border: 10px solid rgba(255, 255, 255, .5);
    background-color: #f8b62a;
    background-clip: padding-box;
    padding: 40px;
}

image.png

content-box

.demo {
    width: 100px;
    height: 100px;
    border: 10px solid rgba(255, 255, 255, .5);
    background-color: #f8b62a;
    background-clip: content-box;
    padding: 40px;
}

image.png

学会了吗?学会了记得点个赞啊,不然我叫老王找你问问题。老王很烦的~

参考

# CSS background-clip 属性

《CSS揭秘》纸质书本

往期精彩文章

# 扫福开始了,自己写个福来扫啊~

# 从零开始做一个贪吃蛇游戏,会vue就行

# 血条消失术?用css教你实现

# 用canvas生成一个佛系头像

# 我用一个div就画出了一个大西瓜~