Javascript 如何从有阴影的div中切出一个圆

Javascript 如何从有阴影的div中切出一个圆,javascript,html,css,frontend,Javascript,Html,Css,Frontend,所以我有一个带方块阴影的div,值是“方块阴影:0.3px0 rgba(0,0,0,0.3);”背景色是白色。 在左边你看不到有一个带图片的切圆,在圆和大div之间应该有透明的背景,我的意思是你应该看穿它 悬停时,截止圆将变成您可以看到的矩形。div左边的边框会改变它的半径。 我只是不能做到这一点,我想也许我可以把截取的大div形状作为svg,并将其用作背景图像,但这不会太好,因为在悬停状态下,我需要切换背景图像,当边框改变它的形状时,我不会有任何影响。 如果您不喜欢SVG,我想您可以这样做,但

所以我有一个带方块阴影的div,值是“方块阴影:0.3px0 rgba(0,0,0,0.3);”背景色是白色。 在左边你看不到有一个带图片的切圆,在圆和大div之间应该有透明的背景,我的意思是你应该看穿它

悬停时,截止圆将变成您可以看到的矩形。div左边的边框会改变它的半径。 我只是不能做到这一点,我想也许我可以把截取的大div形状作为svg,并将其用作背景图像,但这不会太好,因为在悬停状态下,我需要切换背景图像,当边框改变它的形状时,我不会有任何影响。

如果您不喜欢SVG,我想您可以这样做,但它希望真正透明:

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      .wrapper{
        position: relative;
        margin: 2em;
      }
      .box1{
        position:relative;
        height: 6em;
        margin-left: 3em;
        overflow: hidden;
        background: #fff;
        box-shadow: 0 0 3px rgba(0,0,0,0.3);
      }
      .box1:before{
        content: ' ';
        display: block;
        position: absolute;
        top: 0.5em;
        left: -2.5em;
        height: 5em;
        width: 5em;
        background: #fff;
        box-shadow: inset 0 0 3px rgba(0,0,0,0.3);
        border-radius: 50%;
        transition: all 0.5s;
      }
      .box1cover{
        position: absolute;
        left:0;
        top:0.5em;
        width: 3em;
        height: 5em;
        background: #fff;
      }
      .box2{
        position: absolute;
        top: 1em;
        left: 1em;
        height: 4em;
        width: 4em;
        background: #fff;
        box-shadow: 0 0 3px rgba(0,0,0,0.3);
        border-radius: 50%;
        transition: all 0.5s;
      }
      .wrapper:hover .box1:before, .wrapper:hover .box2{
        border-radius: 30%;
      }
    </style>
  </head>
  <body>
    <div class="wrapper">
     <div class="box1">&nbsp;</div>
     <div class="box1cover">&nbsp;</div>
     <div class="box2">&nbsp;</div>
    </div>
  </body>
</html>

.包装纸{
位置:相对位置;
边缘:2米;
}
.box1{
位置:相对位置;
身高:6em;
左边距:3em;
溢出:隐藏;
背景:#fff;
盒影:0.3pxRGBA(0,0,0,0.3);
}
.box1:之前{
内容:'';
显示:块;
位置:绝对位置;
顶部:0.5em;
左:-2.5em;
身高:5公分;
宽度:5em;
背景:#fff;
盒影:插入0.3pxRGBA(0,0,0,0.3);
边界半径:50%;
过渡:均为0.5s;
}
.box1cover{
位置:绝对位置;
左:0;
顶部:0.5em;
宽度:3em;
身高:5公分;
背景:#fff;
}
.box2{
位置:绝对位置;
顶部:1米;
左:1米;
高度:4em;
宽度:4em;
背景:#fff;
盒影:0.3pxRGBA(0,0,0,0.3);
边界半径:50%;
过渡:均为0.5s;
}
.wrapper:hover.box1:before.wrapper:hover.box2{
边界半径:30%;
}

欢迎来到SO。请显示您的代码,以便我们提供帮助。代码在这里不相关,因为我不关心大div中的内容,您只需假设有一个带有方框阴影的div:0 0 3px 0 rgba(0,0,0,0.3),背景颜色为白色。我只需要知道如何以某种方式制作此剪切形状,我可以显示两个casesw之间的过渡。首先,感谢man惊人的工作,现在唯一的问题是圆和“矩形”之间的间隙需要是透明的,在这个解决方案中,这不是形状,你将身体背景颜色设置为灰色,你应该看到白色的圆形和白色的矩形,但是它们之间的小空间也应该是灰色的,是的,透明度是个问题。你可以一直假装你只使用背景色,但如果你使用图像或渐变,这是一个问题。然后我想我会选择SVG解决方案。这里有一个彩色背景的例子:是的,我已经这样做了,但我可能会有图像背景,SVG解决方案可以工作吗?如果我切换SVG,我会对悬停产生什么影响,我想它不能工作。你可以制作一个同时具有两种状态的SVG,只需在悬停时移动背景位置。动画制作有点棘手,但可行。谷歌“Svg精灵”