基本上我想在CSS中创建一个形状(所以没有图像),这与心形相反。我不知道如何正确解释它,所以这是一个图像:
正如您所见,蓝色是背景,但我想要创建的形状不是心形,而是黑色矩形的形状。
如果我有以下形状(灰色而不是黑色)
我可以复制它然后旋转它,这会给我我想要的形状。
答案 0 :(得分:6)
<body>
可以直接跳到这个答案底部的完整演示:)
在box-shadow
- border-radius: 50%
和.heart:before
的两个伪元素上使用.heart:after
创建圆形左上角和右上角 - 它们形成两个新月形状像这样:
有角度的形状由box-shadow
上的.heart
创建。结合两个圆圈,它看起来像这样:
我们现在需要填补空白。这是由.box-shape
容器的伪元素 - .shape-box:before
和.shape-box:after
完成的。 overflow: hidden
上的.shape-box
整齐地切断了多余的部分。结合我们的上述部分,它们看起来像这样:
将它们组合在一起,我们得到了这个精心剪裁的心形。它全部包含在.shape-box
。
body {
background: #00A2F6;
}
.shape-box {
height: 504px;
width: 504px;
position: relative;
margin: 100px;
overflow: hidden;
}
.shape-box:before,
.shape-box:after {
content: '';
display: block;
height: 100px;
width: 120px;
background: #2B2B2B;
transform: rotate(45deg);
left: 190px;
position: absolute;
top: 40px;
}
.shape-box:after {
width: 760px;
height: 750px;
box-shadow: inset 0 0 0 220px #2B2B2B;
top: -150px;
left: -130px;
background: none;
}
.heart {
transform: rotate(45deg);
height: 357px;
width: 356px;
box-shadow: inset 0 0 0 50px #2B2B2B;
position: absolute;
left: 74px;
top: 34px;
}
.heart:before,
.heart:after {
content: '';
display: block;
width: 151px;
height: 151px;
border-radius: 50%;
box-shadow: -40px -15px 0 20px #2B2B2B;
position: absolute;
left: 50px;
top: 157px;
}
.heart:after {
box-shadow: -15px -40px 0 21px #2B2B2B;
left: 156px;
top: 51px;
}
<div class="shape-box">
<div class="heart"></div>
</div>
答案 1 :(得分:5)
这可以通过svg渐变,多个背景和一点创意平铺/放置的组合来完成。来自working jsfiddle的示例CSS(没有供应商前缀,即-webkit
和-moz
):
height: 400px;
width: 400px;
background-image:
radial-gradient(75% 85.5%, circle, transparent 25%, black 26%),
radial-gradient(25% 85.5%, circle, transparent 25%, black 26%),
linear-gradient(225deg, transparent 25%, black 25%),
linear-gradient(135deg, transparent 25%, black 25%);
background-size: 200px 200px;
background-position: top left, top right, bottom left, bottom right;
background-repeat: no-repeat;
这会在400px
方形元素的中间形成一个心形切口。它可以修改为适合您想要的任何大小元素。
更新:here’s a more complex fiddle使用六个渐变而不是四个,但看起来更好。
答案 2 :(得分:1)
根据Mark Hubbart所做的工作,我可以在this fiddle
中将其推广到更高级的形式这还不是100%完成,因为它需要一些媒体查询才能在更多浏览器中运行,但它确实显示了为同一目标更灵活地工作的开始。
#backgrounder {
z-index: 2;
background-image:
radial-gradient(68% 100%, circle, transparent 48%, white 30%),
radial-gradient(32% 100%, circle, transparent 48%, white 30%),
radial-gradient(110% 1%, circle, transparent 65%, white 30%),
radial-gradient(-8.5% 1%, circle, transparent 65%, white 30%),
linear-gradient(220deg, transparent 41%, white 30%),
linear-gradient(139deg, transparent 41%, white 30%);
background-image:
-webkit-radial-gradient(68% 100%, circle, transparent 48%, white 30%),
-webkit-radial-gradient(32% 100%, circle, transparent 48%, white 30%),
-webkit-radial-gradient(110% 1%, circle, transparent 65%, white 30%),
-webkit-radial-gradient(-8.5% 1%, circle, transparent 65%, white 30%),
linear-gradient(220deg, transparent 41%, white 30%),
linear-gradient(139deg, transparent 41%, white 30%);
background-size: 51% 31%, 50% 31%, 51% 50%, 50% 50%, 51% 51%, 50% 51%;
background-position: top left, top right, 0% 30%, 100% 30%, bottom left, bottom right;
background-repeat: no-repeat;
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
}