如何用css在矩形的某个位置裁出一个透明的圆?

clipboard.png
如图,请问各位有没有什么好的方法。
目前自己尝试过用伪类画个圆加transprante,但漏出来的是上半部分的底色灰色。
而我需要的是透明,也就是我需要真真正正切去这一块。
看了一下clip-path,好像也只能切成多边形,没办法切出一个圆。
故请教各位有没有什么方法能实现这个需求?
用纯css是最好的了~


补充一下,我仔细看了看clip-ptah,其实它是能切出圆形的~那这个问题解决起来就简单了~虽然兼容性可能是个问题~

阅读 7.4k
4 个回答

使用radial-gradient可以实现,我只管实现不管兼容性,兼容方案可以搜这个属性,加上兼容前缀之类的

<!-- html部分 -->
<div class="a">
  <!-- a这个大卡片里边分上下两个卡片,对应上边灰色和下边白色部分 -->
  <div class="b"></div>
  <div class="c"></div>
</div>
/* css部分 */
body{
  background:#F0AE80
}
.a{
  /*用于实现缺口那的阴影,用box-shadow缺口那会有问题*/
  filter:drop-shadow(1px 1px 5px #000);
}
.b{
  width:200px;
  height:100px;
  /*通过radial-gradient,用径向渐变创建 "图像"*/
  /*定义了形状:圆形,位置:左下角,颜色:透明,半径:10,背景色:f5f5f5,背景位置:左右各一个*/
  background:radial-gradient(circle at bottom left,transparent 10px, #f5f5f5 0) left,
    radial-gradient(circle at bottom right,transparent 10px, #f5f5f5 0) right;
  /*对应上面左右各一个,这里把背景横向平分50%*/
  background-size:50% 100%;
  /*必须设置否则去掉上面某些样式,会有多个透明扇形出现*/
  background-repeat:no-repeat;
  border-radius:10px;
}
/*下面部分同理*/
.c{
  width:200px;
  height:200px;
  background:radial-gradient(circle at top left,transparent 10px, #fff 0) left,
    radial-gradient(circle at top right,transparent 10px, #fff 0) right;
  background-size:50% 100%;
  background-repeat:no-repeat;
  border-radius:10px;
}

clipboard.png

喜欢的话赞我~!


补充:这种实现在半圆那会有锯齿,视觉上不是很好,最好是切一个png,像这样(缺口那是透明的):
clipboard.png
如果是手机,安卓的一些机器,图片上下可能会有不到1px的间隙,card背景不透明可以用负边距解决,透明就无解。

或者可以用canvas实现

图片描述

element.style {

width: 200px;
height: 500px;
background: radial-gradient(circle at 0% 15%, rgba(255, 255, 255, 0) 3%, rgba(51,204,255,1.00) 3.2%) left,radial-gradient(circle at 100% 15%, rgba(255, 255, 255, 0) 3%, rgba(51,204,255,1.00) 3.2%) right;
background-size: 50% 100%;
background-repeat: no-repeat;
border-radius: 8px;

}

如果你上面的淡粉色区域不是渐变色的话可以用两个圆定位

可以画个半圆,用底图的颜色,这样就最简单了,只要设置内阴影就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题