使用CSS的虚线/虚线圆形 – 在Chrome中无法渲染

前端之家收集整理的这篇文章主要介绍了使用CSS的虚线/虚线圆形 – 在Chrome中无法渲染前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在尝试渲染一个可以放置数字的圆圈.我希望圆圈使用实线,虚线或虚线边框.此外,颜色可以变化,并且它将全部在CSS中定义,因此尝试使用图像将不是最佳的.
circle-score-label {
  height: 30px;
  width: 30px;
}

circle-score-label .circle {
  margin-left: auto;
  margin-right: auto;
  border-radius: 50%;
  width: 100%;
  height: 100%;
  position: relative;
  border: 3px solid black;
}

circle-score-label .solid-conf {
  border-style: solid;
}

circle-score-label .dotted-conf {
  border-style: dotted;
}

circle-score-label .dashed-conf {
  border-style: dashed;
}

在IE11中它似乎很好.而在Chrome(目前为42.0.2311.135米或Canary)中,圆圈顶部有一个间隙.

Chrome示例:

IE示例:

有没有人遇到过这个问题以及如何解决它?

解决方法

由于每个浏览器如何呈现它并且我们无法控制它,因此预计会出现这些差异.如果你还需要支持FireFox,那么我建议你不要使用这种方法,因为 @L_403_0@.

你最好的选择是使用SVG实现这一点,因为SVG允许通过使用stroke-dasharray属性更好地控制点/破折号.

下面是一个示例片段:(虽然你没有标记SVG,但我给出了这一点,因为SVG可能是最适合这类的东西,这个例子可以指导你.)

svg{
  height: 100px;
  width: 100px;
}
circle {
  fill: transparent;
  stroke: green;
  stroke-width: 3;
}
.solid{
  stroke-dasharray: none;
}
.dashed {
  stroke-dasharray: 8,8.5;
}
.dotted {
  stroke-dasharray: 0.1,12.5;
  stroke-linecap: round;
}
div {
  height: 100px;
  width: 100px;
  color: green;
  font-weight: bold;
  text-align: center;
  line-height: 100px;
}
<svg viewBox="0 0 120 120">
  <circle cx="55" cy="55" r="50" class="solid" />
  <foreignObject x="5" y="5" height="100px" width="100px">
    <div>100</div>
  </foreignObject>
</svg>

<svg viewBox="0 0 120 120">
  <circle cx="55" cy="55" r="50" class="dashed" />
  <foreignObject x="5" y="5" height="100px" width="100px">
    <div>100</div>
  </foreignObject>
</svg>

<svg viewBox="0 0 120 120">
  <circle cx="55" cy="55" r="50" class="dotted" />
  <foreignObject x="5" y="5" height="100px" width="100px">
    <div>100</div>
  </foreignObject>
</svg>

几乎所有版本的Chrome,Firefox,Safari,Opera和IE9都提供Support for SVG.

使用foreignObject来定位文本是我发现更容易使用和样式的文本,但它在IE中不起作用.因此,您可以使用文本SVG元素,如下面的代码段所示.

svg{
  height: 100px;
  width: 100px;
}
circle {
  position: relative;
  fill: transparent;
  stroke: green;
  stroke-width: 3;
}
.solid{
  stroke-dasharray: none;
}
.dashed {
  stroke-dasharray: 8,12.5;
  stroke-linecap: round;
}
text {
  width: 100px;
  text-anchor: middle;
  fill: green;
  font-weight: bold;
  text-align: center;
}
<svg viewBox="0 0 120 120">
  <circle cx="55" cy="55" r="50" class="solid" />
  <text x="55" y="60">
    100
  </text>
</svg>

<svg viewBox="0 0 120 120">
  <circle cx="55" cy="55" r="50" class="dashed" />
  <text x="55" y="60">
    100
  </text>
</svg>

<svg viewBox="0 0 120 120">
  <circle cx="55" cy="55" r="50" class="dotted" />
  <text x="55" y="60">
    100
  </text>
</svg>

支持较低版本的IE,您可以查看一些库,如this one或参考this SO answer.

这可以使用CSS使用除边框之外的属性来完成,但是这些要么需要大量的盒阴影或伪元素,并且对于较大的圆圈不是非常可取的.

使用伪元素方法需要CSS转换,因此在不使用其他库的情况下仍然不支持IE8或更少.

尽管它具有更好的浏览器支持,但是盒式阴影方法的可扩展性不是很高.下面是使用Box-shadow方法创建虚线边框的示例代码段.这是改编自The Pragmatick在this thread的回答.

div {
  position: relative;
  height: 100px;
  width: 100px;
  margin: 10px;
  text-align: center;
  line-height: 100px;
  border-radius: 50%;
}
.dotted {
  Box-shadow: 0px -55px 0px -48px blue,0px 55px 0px -48px blue,55px 0px 0px -48px blue,-55px 0px 0px -48px blue,-39px -39px 0px -48px blue,39px -39px 0px -48px blue,-39px 39px 0px -48px blue,39px 39px 0px -48px blue,-22px -51px 0px -48px blue,-51px 22px 0px -48px blue,51px -22px 0px -48px blue,-51px -22px 0px -48px blue,51px 22px 0px -48px blue,22px 51px 0px -48px blue,-22px 51px 0px -48px blue,22px -51px 0px -48px blue;
}
<div class="dotted">
  100
</div>

猜你在找的CSS相关文章