我正在寻找使用CSS,SVG或Canvas创建无限符号。
我试图创建形状,但只设法创建形状的一面。我最终希望将其保留为一个元素并尽可能简单。
.infinity {
width: 100px;
height: 100px;
border-radius: 50% 50% 0 50%;
border: 5px solid black;
transform: rotate(-45deg);
}
<div class="infinity"></div>
我发现了这个问题:
但是我正在考虑将其用作某种图标或图像,因此希望形状更自由。
答案 0 :(得分:24)
通过使用伪元素,您可以创建形状的两侧,从而获得所需的输出。
所有浏览器都支持此解决方案。
div {
position: relative;
width: 178px;
height: 100px;
}
div:before,
div:after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 60px;
height: 60px;
border: 10px solid black;
border-radius: 50px 50px 0 50px;
transform: rotate(-45deg);
}
div:after {
left: auto;
right: 0;
border-radius: 50px 50px 50px 0;
transform: rotate(45deg);
}
<div></div>
这是一个修改后的版本:CSS-Tricks
如果你想要它更加匀称,对边界半径规则的一些修改确实有助于它更多的形状。
div {
position: relative;
width: 178px;
height: 100px;
}
div:before,
div:after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 60px;
height: 60px;
border: 10px solid black;
border-radius: 80% 0 55% 50% / 55% 0 80% 50%;
transform: rotate(45deg);
}
div:after {
left: auto;
right: 0;
transform: rotate(-135deg);
}
<div></div>
SVG代表可伸缩矢量图形。 Web浏览器将其视为图像,但您可以在SVG中添加文本和普通HTML元素。
所有浏览器都支持它,如下所示:CanIUse
<svg height="150" viewbox="0 50 200 200">
<path fill="none" stroke="#333333" stroke-width="5" d="M100,100
C200,0 200,200 100,100
C0,0 0,200 100,100z" />
</svg>
Canvas与SVG类似,但使用栅格(基于像素)而不是矢量来创建形状。
Canvas的浏览器支持为quite good.
var shape = document.getElementById('infinity').getContext('2d');
shape.lineWidth = 6;
shape.strokeStyle = "#333";
shape.beginPath();
shape.moveTo(100, 100);
shape.bezierCurveTo(200, 0, 200, 200, 100, 100);
shape.bezierCurveTo(0, 0, 0, 200, 100, 100);
shape.closePath();
shape.stroke();
<canvas id="infinity"></canvas>
从近似重复的答案中可以看出,这是所有HTML备选方案的积累。
我只是为规范添加了这个,并向用户显示HTML实体可以使用该形状。
p {
font-size: 2em;
}
<p>∞</p>
<p>∞</p>
<p>∞</p>
<p>∞</p>