[css]切角

使用css实现一个切角的功能,有以下几种方案:

html 复制代码
<div class="box"></div>

方案一:linear-gradient

linear-gradient配合backgroud-image可以实现背景渐变的效果。linear-gradient的渐变过渡区的占比是总的空间(高度或宽度)减去上下两个着色块空间占比剩下的空间,所以如果后一个颜色的百分比比前一个颜色小的话,会自动将当前颜色值的百分比设置为前面颜色中的最大百分比值,也就是说

css 复制代码
background:linear-gradient(
    red 50%,
    orange 40%
);

其实相当于

css 复制代码
background:linear-gradient(
    red 50%,
    orange 50%
);

其效果就是过渡区没有空间,即没有过度效果,两个颜色之间是一条直线。

所以可以使用这种方式实现切角效果:

css 复制代码
div{
    margin: 50px;
    width: 200px;
    height: 100px;
}
.box{
    background:linear-gradient(135deg,transparent 10px,lightskyblue 0) left top,
               linear-gradient(-135deg,transparent 10px,lightskyblue 0) right top,
               linear-gradient(-45deg,transparent 10px,lightskyblue 0) right bottom,
               linear-gradient(45deg,transparent 10px,lightskyblue 0) left bottom;
    background-size: 50% 50%;
    background-repeat: no-repeat;
}

方案二:clip-path

clip-path: polygon可以将图形进行切割。图形的左上角为(0,0)坐标,根据坐标进行切割。

所以假设需要切一个20px的角,可以设置:

css 复制代码
.box{
    width: 200px;
    height: 100px;
    background-color: lightskyblue;
    clip-path: polygon(20px 0,calc(100% - 20px) 0,
                        100% 20px, 100% calc(100% - 20px),
                        calc(100% - 20px) 100%, 20px 100%,
                        0 calc(100% - 20px), 0 20px);
}

边框

上述两种方案如果加上边框,边框还是矩形,无法实现切角效果。

结合clip-path和linear-gradient可以实现加上边框的效果。

首先把linear-gradient的第一个颜色设成跟border同一个颜色,获得如下效果:

css 复制代码
.box {
    background: linear-gradient(-45deg, #289eef 8px, lightskyblue 0) bottom right,
        linear-gradient(45deg, #289eef 8px, lightskyblue 0) bottom left,

        linear-gradient(135deg, #289eef 8px, lightskyblue 0) top left,

        linear-gradient(-135deg, #289eef 8px, lightskyblue 0) top right;
    background-size: 50% 51%;
    background-repeat: no-repeat;
    border: solid 1px #289eef;

}

使用clip-path把角切掉,这里注意取值的计算,如果linear-gradient的分割线是8px,88 + 88再开根号,那么clip-path的取值应该是11px。

css 复制代码
.box {
    clip-path: polygon(11px 0, calc(100% - 11px) 0,

            100% 11px, 100% calc(100% - 11px),

            calc(100% - 11px) 100%, 11px 100%,

            0 calc(100% - 11px), 0 11px);

    background: linear-gradient(-45deg, #289eef 8px, lightskyblue 0) bottom right,
        linear-gradient(45deg, #289eef 8px, lightskyblue 0) bottom left,

        linear-gradient(135deg, #289eef 8px, lightskyblue 0) top left,

        linear-gradient(-135deg, #289eef 8px, lightskyblue 0) top right;

    background-size: 50% 51%;

    background-repeat: no-repeat;

    border: solid 1px #289eef;

}
相关推荐
Hy行者勇哥5 小时前
HTML5 + 原生 CSS + 原生 JS 网页实现攻略
javascript·css·html5
小王码农记17 小时前
CSS中自定义属性函数var()
前端·css·vue.js
BD_Marathon20 小时前
【JavaWeb】CSS浮动
前端·css
写代码的皮筏艇1 天前
CSS中常使用的函数
前端·css
草字1 天前
css 按钮的脉冲光环动画,强调动画。
前端·css
BD_Marathon1 天前
【JavaWeb】CSS_三大选择器
前端·css
苦夏木禾1 天前
使用css制作一个环形进度展示圈
前端·css
软件技术NINI1 天前
html css js网页制作成品——成毅html+css+js 5页附源码
javascript·css·html
苏打水com1 天前
第四篇:Day10-12 JS事件进阶+CSS动画——实现“复杂交互+视觉动效”(对标职场“用户体验优化”需求)
javascript·css·交互
苏打水com1 天前
第六篇:Day16-18 AJAX进阶+接口对接——实现“前后端数据交互”(对标职场“接口开发”核心需求)
css·okhttp·html·js