CSS中的无穷大符号

Ste*_*ide 6 html css svg css3 css-shapes

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

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

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

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

我发现了这个问题:

但我正在考虑将其用作某种形状的图标或图像,因此希望它具有更多的形状自由度.

Ste*_*ide 26

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);
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

这是一个修改版本: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);
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)


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>
Run Code Online (Sandbox Code Playgroud)


帆布

Canvas类似于SVG,但使用栅格(基于像素)而不是矢量来创建形状.

浏览器对Canvas的支持非常好.

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();
Run Code Online (Sandbox Code Playgroud)
<canvas id="infinity"></canvas>
Run Code Online (Sandbox Code Playgroud)


HTML

从近似重复的答案中可以看出,这是所有HTML替代品的积累.

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

p {
  font-size: 2em;
}
Run Code Online (Sandbox Code Playgroud)
<p>?</p>
<p>&#8734;</p>
<p>&#x221E;</p>
<p>&infin;</p>
Run Code Online (Sandbox Code Playgroud)