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

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


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

阅读 1.2k
评论
    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;

      }

        • 1.2k

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

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

            撰写回答

            登录后参与交流、获取后续更新提醒