是否可以基于CSS创建一个具有渐变边框和透明内部的圆?

前端之家收集整理的这篇文章主要介绍了是否可以基于CSS创建一个具有渐变边框和透明内部的圆?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用具有渐变边框但也是透明内部的CSS创建一个圆圈,使其看起来像这样:

如果内部不透明,我可以使用解决方案来创建渐变边框,我的下面片段是基于它的,但它们原则上通过在渐变上叠加一个彩色div来工作.

>>JSFIDDLE<<

>> SNIPPET<<

#cont{
background: -webkit-linear-gradient(left top,crimson 0%,#f90 100%);
width: 150px;
height: 150px;
border-radius: 1000px;
padding: 5px;
}

#Box{
background: #fff;
width: 150px;
height: 150px;
border-radius: 1000px;
}

#example {

background: url(http://blogs.taz.de/hausblog/files/2017/12/20171208_FB_reuters2.png);
}
<div id="example">
<div id="cont">
<div id="Box"></div>
</div>
</div>

解决方法

我认为最好的方法是使用SVG linear-gradient.我们的想法是创建一个圆并用渐变填充其笔触.
body {
  background: url(http://blogs.taz.de/hausblog/files/2017/12/20171208_FB_reuters2.png);
}

text {
  font-size:8em
}
<svg viewBox='0 0 200 200' width=150 height=150>
  <!-- define the gradient -->
  <defs>
    <!-- x1,y1,x2,y2 are used to define the gradient direction -->
    <linearGradient id="linear" x1="0%" y1="0%" x2="100%" y2="60%">
      <!-- start color at 0%-->
      <stop offset="0%"   stop-color="crimson"/>
      <!-- end color at 100%-->
      <stop offset="100%" stop-color="#f90"/>
    </linearGradient>
  </defs>
  <!-- Create an svg circle at [100,100] with radius of 90
       make the border-width 6 (stroke-width) fill it with gradient (stroke)
       and make the content of circle transparent (fill)
  --->
  <circle cx="100" cy="100" r="90" stroke="url(#linear)" stroke-width="6" fill="transparent" />
  <!-- Create a text element at the postion [70,140] -->
  <text x="70" y="140" fill="white">7</text>
</svg>

你也可以用作背景:

body {
  background: url(http://blogs.taz.de/hausblog/files/2017/12/20171208_FB_reuters2.png);
}

text {
  font-size: 8em
}

#count {
  background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="150" height="150"><defs><linearGradient id="linear" x1="0%" y1="0%" x2="100%" y2="60%"><stop offset="0%"   stop-color="crimson"/><stop offset="100%" stop-color="#f90"/></linearGradient></defs><circle cx="100" cy="100" r="90" stroke="url(#linear)" stroke-width="6" fill="transparent" /></svg>') no-repeat;
  text-align: center;
  color: #fff;
  font-size: 8em;
  width: 150px;
  height: 150px;
}
<div id="count">
  7
</div>

猜你在找的CSS相关文章