Skip to content

切角效果

渐变方案

把一个透明色标放在切角处,然后在相同位置设置另一个色标,并且把它的颜色设置成背景色

css
.box {
    background: #58a; /* 回退机制 */
    background: linear-gradient(-45deg, transparent 15px, #58a 0);
}

多个切角:多层渐变叠加

css
.box {
    background: #58a; /* 回退机制 */
	background: 
        linear-gradient(-45deg, transparent 15px, #58a 0) right,
        linear-gradient(45deg, transparent 15px, #58a 0) left;
    background-size: 50% 100%; /* 各占一半 */
    background-repeat: no-repeat;
}
css
.box {
    background: #58a; /* 回退机制 */
    background: 
        linear-gradient(135deg, transparent 15px, #58a 0) top left,
        linear-gradient(-135deg, transparent 15px, #58a 0) top right,
        linear-gradient(-45deg, transparent 15px, #58a 0) bottom right,
        linear-gradient(45deg, transparent 15px, #58a 0) bottom left;
    background-size: 50% 50%;
    background-repeat: no-repeat;
}

重复性很高,要改切角宽度,需要改很多处

弧形切角

和上面类型,只是换成 radial-gradient

css
.box {
    background: #58a; /* 回退机制 */
    background: 
        radial-gradient(circle at top left, transparent 15px, #58a 0) top left,
        radial-gradient(circle at top right, transparent 15px, #58a 0) top right,
        radial-gradient(circle at bottom right, transparent 15px, #58a 0) bottom right,
        radial-gradient(circle at bottom left, transparent 15px, #58a 0) bottom left;
    background-size: 50% 50%;
    background-repeat: no-repeat;
}

border-imagesvg 方案

裁剪边角即可,中间的会自动扩展

css
.box {
    border: 20px solid #58a;
    border-image: 1 url('data:image/svg+xml,\
        <svg xmlns="http://www.w3.org/2000/svg" width="3" height="3" fill="%2358a"> \
            <polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2" /> \
        </svg> \
    ');
    background-clip: padding-box; /* 令背景不延伸到 border 上 */
}

裁剪路径方案

方案用到 clip-path,但此属性未完全支持

css
.box {
    background: #58a;
    clip-path: polygon(
        15px 0, calc(100% - 15px) 0, 100% 15px,
        100% calc(100% - 15px), calc(100% - 15px) 100%,
        15px 100%, 0 calc(100% - 15px), 0 15px
    );
}

虽然重复性挺高,但可以裁剪任意背景,如图片