我可以只用 CSS 创建这个形状吗?

Can I create this shape with CSS only?

我正在为具有特定形状的网页构建英雄部分,目前我只是使用图像作为实际部分背景的叠加层,但我希望减少我提出的请求,想知道是否可以使用 CSS:

来完成以下形状

所以黑色部分是实际图像所在的位置,而白色部分是我尝试使用 CSS 构建的部分;

这是一个只有一个元素的想法,radial-gradient 对其进行近似

.box {
  width: 400px;
  height: 200px;
  display:inline-block;
  overflow:hidden;
  position:relative;
}
.box:before,
.box:after{
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:50%;
  bottom:0;
  background:
    radial-gradient(100% 116.3% at top   right, transparent 99%,#fff 100%) top,
    radial-gradient(100% 116.3% at bottom left, #fff 99%,transparent 100%) bottom;
  background-size:100% 50%;
  background-repeat:no-repeat;
}
.box:after {
  right:0;
  left:50%;
  transform:scaleX(-1);
}

body {
  background:linear-gradient(to right, purple, blue);
}
<div class="box">

</div>

然后您可以调整 left/right/bottom 属性以通过溢出和重叠来控制整体形状:

.box {
  width: 400px;
  height: 200px;
  display:inline-block;
  overflow:hidden;
  position:relative;
}
.box:before,
.box:after{
  content:"";
  position:absolute;
  top:0;
  left:-2px;
  right:40%;
  bottom:-45%;
  background:
    radial-gradient(100% 116.3% at top   right, transparent 99%,#fff 100%) top,
    radial-gradient(100% 116.3% at bottom left, #fff 99%,transparent 100%) bottom;
  background-size:100% 50%;
  background-repeat:no-repeat;
}
.box:after {
  right:-2px;
  left:40%;
  transform:scaleX(-1);
}

body {
  background:linear-gradient(to right, purple, blue);
}
<div class="box">

</div>


这是一个使用 SVG 替换 radial-gradient:

的想法

.box {
  height: 200px;
  overflow:hidden;
  position:relative;
}
.box:before,
.box:after{
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:50%;
  bottom:0;
  background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" preserveAspectRatio="none"><path fill="white" d="M64 64 C56 30 8 48 0 0 L0 64 Z"/></svg>');
  background-size:100% 100%;
}
.box:after {
  right:0;
  left:50%;
  transform:scaleX(-1);
}

body {
  background:linear-gradient(to right, purple, blue);
}
<div class="box">

</div>

这是一个很好的编辑 SVG 的在线工具:http://jxnblk.com/paths/。只需将路径附加到末尾的 url 并进行编辑;

http://jxnblk.com/paths/?d=M64 64 C56 30 8 48 0 0 L0 64 Z