CSS中的无穷大符号

时间:2015-11-11 11:57:28

标签: html css css3 svg css-shapes

我正在寻找使用CSS,SVG或Canvas创建无限符号。

如果您不知道无穷大符号是什么,这是一个例子: Infinity Symbol Image

我试图创建形状,但只设法创建形状的一面。我最终希望将其保留为一个元素并尽可能简单。

.infinity {
  width: 100px;
  height: 100px;
  border-radius: 50% 50% 0 50%;
  border: 5px solid black;
  transform: rotate(-45deg);
}
<div class="infinity"></div>

我发现了这个问题:

但是我正在考虑将其用作某种图标或图像,因此希望形状更自由。

1 个答案:

答案 0 :(得分:24)

CSS

通过使用伪元素,您可以创建形状的两侧,从而获得所需的输出。

所有浏览器都支持此解决方案。

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

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备选方案的积累。

我只是为规范添加了这个,并向用户显示HTML实体可以使用该形状。

p {
  font-size: 2em;
}
<p>∞</p>
<p>&#8734;</p>
<p>&#x221E;</p>
<p>&infin;</p>