我正在尝试使用CSS创建它。实际上,这是三个相交圆的中心点。我认为这是可能的,但似乎无法弄明白。但话说回来,CSS并不是我最强项。帮助
我已经设法使用下面的代码片段创建了一个半圆(并且还可以创建另外两个),但我不知道如何定位或对齐它们以获得图像中的输出。
.test{
height: 100px;
width: 100px;
border-radius: 50%;
border: 1px solid black;
border-color: black black transparent transparent;
}
<div class='test'></div>
答案 0 :(得分:8)
一个可行的解决方案,使用半圆,克隆通过伪元素,并旋转它们
#test {
width: 200px;
height: 100px;
border: solid 10px red;
border-radius: 9999px 9999px 0px 0px;
border-bottom-style: none;
margin: 100px;
position: relative;
}
#test:before, #test:after {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: -10px;
left: -10px;
border: inherit;
border-radius: inherit;
}
#test:before {
transform: rotate(120deg);
transform-origin: 50% 43%;
}
#test:after {
transform: rotate(-120deg);
transform-origin: 50% 43%;
}
&#13;
<div id="test"></div>
&#13;
另一种解决方案,更接近请求,但使用了几个div
#test {
margin: 400px 200px;
}
.leaf {
width: 200px;
height: 200px;
border: solid 2px red;
border-radius: 9999px 0px 9999px 0px;
background-color: lightgreen;
position: absolute;
transform-origin: top right;
}
.leaf:nth-child(1) {
transform: skewX(-31deg);
}
.leaf:nth-child(2) {
transform: rotate(120deg) skewX(-31deg);
}
.leaf:nth-child(3) {
transform: rotate(-120deg) skewX(-31deg);
}
&#13;
<div id="test">
<div class="leaf"></div>
<div class="leaf"></div>
<div class="leaf"></div>
</div>
&#13;
答案 1 :(得分:6)
这是一个基于 SVG 的答案。我正在添加此选项,即使您只使用CSS标记标记了问题,因为SVG在这些形状方面具有很多优势。
svg {
height: 200px;
width: 200px;
}
path {
stroke: black;
fill: transparent;
}
/* just for demo */
svg {
transition: all 1s ease;
}
svg:hover {
height: 300px;
width: 300px;
}
<svg viewBox='0 0 100 100'>
<path d='M5,78.77 A40,40 0 0,0 40.35,17.10 A40,40 0 0,0 74,78.77 A40,40 0 0,0 5,78.77z' />
</svg>
SVG路径:
创建形状所需的只是一个path
元素,其中有一些创建弧的路径命令。此代码段中使用的SVG路径命令(甚至其余部分)非常容易理解。以下是您的好处的小解释。
M
- 此命令将虚拟绘图笔移动到坐标指定的点。A
- 此命令用于根据给定半径从起点到终点绘制弧(或半圆或甚至圆)。起点是笔在给出A
命令之前的点。 A
命令后面的前两个值是X轴和Y轴中弧的半径。 A
命令提供的最后两个值是弧的终点。您可以在this MDN page中找到有关SVG路径命令的更多详细信息。
使用CSS:
如前所述,我不推荐使用CSS作为这种形状,因为在图像中完全创建它涉及大量的变换,近似/计算每个弧的宽度等等。但是如果你仍然希望继续使用CSS然后看看下面的代码片段。
.wrapper {
position: relative;
height: 200px;
width: 200px;
}
.arc {
position: absolute;
height: 100%;
width: 29%;
overflow: hidden;
backface-visibility: hidden;
}
.arc:after {
position: absolute;
content: '';
height: 100%;
width: 300%;
border-radius: 50%;
border: 2px solid;
}
.arc:nth-child(3) {
top: -1px;
transform: translateX(-100%) rotate(90deg);
transform-origin: bottom right;
}
.arc:nth-child(2) {
left: calc(100% - 5px);
transform: translateX(-100%) rotate(-30deg);
transform-origin: bottom right;
}
.arc:nth-child(1):after {
right: 0;
}
.arc:nth-child(1) {
transform: rotate(30deg);
transform-origin: bottom left;
}
/* just for demo */
.wrapper {
transition: all 1s ease;
}
.wrapper:hover {
height: 300px;
width: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='wrapper'>
<div class='arc'></div>
<div class='arc'></div>
<div class='arc'></div>
</div>
我们必须使用多个元素,因为我们需要创建弧(而不是半圆),以使形状与图像完全相同。在CSS中创建弧的一种方法是将圆放在另一个宽度小于圆圈的div
内,然后使用overflow: hidden
。在代码段中,我们使用三个.arc
元素来创建弧,相对于父.wrapper
元素绝对定位它们,然后使用CSS变换来旋转和/或翻译它们。
与CSS输出相比,我们可以直观地看到SVG输出在美学上是多么令人愉悦。我们还可以看到SVG输出是如何响应的(将形状悬停在任何一个片段中),而CSS输出仍然需要对定位进行一些调整,即使整个形状主要是使用百分比值创建的。