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