Joh*_*hJR 1 css css3 css-shapes
我正在尝试使用CSS创建它.实际上,这是三个相交圆的中心点.我认为这是可能的,但似乎无法弄明白.但话说回来,CSS并不是我最强项.救命?
我已经设法使用下面的片段创建了一个半圆(也可以创建另外两个),但我不知道如何定位或对齐它们以获得输出,如图像中所示.
.test{
height: 100px;
width: 100px;
border-radius: 50%;
border: 1px solid black;
border-color: black black transparent transparent;
}Run Code Online (Sandbox Code Playgroud)
<div class='test'></div>Run Code Online (Sandbox Code Playgroud)
一个可行的解决方案,使用半圆,克隆通过伪元素,并旋转它们
#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%;
}Run Code Online (Sandbox Code Playgroud)
<div id="test"></div>Run Code Online (Sandbox Code Playgroud)
另一个解决方案,更接近请求,但使用几个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);
}Run Code Online (Sandbox Code Playgroud)
<div id="test">
<div class="leaf"></div>
<div class="leaf"></div>
<div class="leaf"></div>
</div>Run Code Online (Sandbox Code Playgroud)
这是一个基于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;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
SVG路径:
创建形状所需的只是一个path元素,其中有一些创建弧的路径命令.此代码段中使用的SVG路径命令(甚至其余部分)非常容易理解.以下是您的好处的一个小解释.
M - 此命令将虚拟绘图笔移动到坐标指定的点.A - 此命令用于根据给定半径从起点到终点绘制弧(或半圆或甚至圆).起点是在A给出命令之前笔的位置.该A命令后面的前两个值是X和Y轴上的圆弧半径.随A命令提供的最后两个值是弧的终点.您可以在此MDN页面中找到有关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;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
我们必须使用多个元素,因为我们需要创建弧(而不是半圆),以使形状与图像完全相同.在CSS中创建弧的一种方法是将圆放在另一个div宽度小于圆本身然后使用的圆中overflow: hidden.在代码片段中,我们使用三个.arc元素来创建弧,相对于父.wrapper元素绝对定位它们,然后使用CSS变换来旋转和/或翻译它们.
我们可以直观地看到与CSS输出相比,SVG输出在美学上更令人愉悦.我们还可以看到SVG输出是如何响应的(将形状悬停在任何一个片段中),而CSS输出仍然需要对定位进行一些调整,即使整个形状主要是使用百分比值创建的.
| 归档时间: |
|
| 查看次数: |
543 次 |
| 最近记录: |