《css揭秘》笔记(九),切角效果

本文详细介绍了CSS中实现切角效果的三种方法:普通切角、弧形切角和裁切路径方案。通过线性渐变和径向渐变的巧妙运用,可以创建出各种复杂的切角效果,包括四角切角和弧形内凹圆角。同时,文章提到了使用clip-path实现切角可能带来的问题,即会裁切掉容器内的文字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

切角效果

普通切角

假设我们只需要一个角被切掉的效果,以右下角为例。渐变可以接受一个角度(45deg)作为方向,而且色标的位置信息可以是绝对的长度值。因而我们可以用一个线性渐变就能完成右下角被切掉的效果,只需要把一个透明色标放在切角处。

.box1{
  width:200px;
  height: 100px;
  background: 
    linear-gradient(45deg, transparent 15px, #58a 0);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsu9jF1T-1589878078403)(3图形/img/44.png)]

现在我们想要两个角被切掉的效果,以底部的两个角为例,只用一层渐变是不够的,还需要再加一层。

.box2{
  margin: 20px;
  width: 200px;
  height: 100px;
  background: 
    linear-gradient(-45deg, transparent 15px, #58a 0) right,
    linear-gradient(45deg, transparent 15px, #655 0) left;
}

然而这两层渐变会相互覆盖,最终得到的效果是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2W1sZ4xd-1589878078407)(3图形/img/45.png)]

所以我们用background-size使两层渐变分开。

.box3{
  margin: 20px;
  width: 200px;
  height: 100px;
  background: 
    linear-gradient(-45deg, transparent 15px, #58a 0) right,
    linear-gradient(45deg, transparent 15px, #655 0) left;
  background-size: 50% 100%;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmT9Yxty-1589878078410)(3图形/img/46.png)]

然后这依然不是想要的效果,原因在于background默认是repeat的,需要把background-repeat设置成no-repeat

.box4{
  margin: 20px;
  width: 200px;
  height: 100px;
  background:
    linear-gradient(-45deg, transparent 15px, #58a 0) right,
    linear-gradient(45deg, transparent 15px, #655 0) left;
  background-size: 50% 100%;
  background-repeat: no-repeat;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rzoa0hPU-1589878078414)(3图形/img/47.png)]

如果我们想要四个角都被切掉的效果,就可以用四层渐变:

.box5{
  margin: 20px;
  width: 200px;
  height: 100px;
  background: 
    linear-gradient(-45deg, transparent 15px, #58a 0) bottom right,
    linear-gradient(45deg, transparent 15px, #58a 0) bottom left,
    linear-gradient(-135deg, transparent 15px, #58a 0) top right,
    linear-gradient(135deg, transparent 15px, #58a 0) top left;
  background-size: 50% 50%;
  background-repeat: no-repeat;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8daYs5W-1589878078419)(3图形/img/48.png)]

弧形切角

上述渐变还有一个变种,可以用来创建弧形切角(也叫“内凹圆角”)。我们使用径向渐变来达到这种效果:

.box6{
  width: 200px;
  height: 100px;

  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;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEd9MHPE-1589878078421)(3图形/img/49.png)]

裁切路径方案

可以使用clip-path将一个元素切出20px大小(以水平方向度量)的斜面切角:

.box7{
  width: 200px;
  height: 100px;
  background-color: #58a;
  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
    );
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WIYFxkO-1589878078423)(3图形/img/50.png)]

这个方案的不足在于,它会连容器中的文字一并裁切掉,如上图所示。

本篇文章是《css揭秘》一书的笔记,如果侵犯到了原作者的权益,请联系我删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值