【问题标题】:Circle with fading borders on the bottom底部带有渐变边框的圆圈
【发布时间】:2021-01-15 19:47:36
【问题描述】:

我正在尝试使用 css(或 svg)绘制此输出。对我来说,最难的部分是圆的左右两边的半圆弧。我应该坚持纯 css 还是使用图像更好?

感谢任何帮助...

这是我设法做到的:

代码如下:

body {
  background-color: #002911 !important;
}

h3 {
  color: #ffd004;
}

#actions-container {
  margin-top: 30px;
}

#actions-container .action-icon {
  width: 200px;
  height: 200px;
  background-color: rgb(255, 208, 4);
  border-radius: 50%;
  box-shadow: 5px -2px 6px 3px #0000004a;
  /* center contents*/
  display: flex;
  justify-content: center;
  align-items: center;
}

.right-arc {
  position: relative;
  display: inline-block;
  font-size: 30px;
  color: lightgreen;
  margin: 40px;
}

.right-arc::after {
  content: '';
  position: absolute;
  right: -150px;
  top: 57px;
  height: 300px;
  width: 300px;
  border-radius: 50% 50% 50% 50%;
  border-width: 0px 1px 0px 0px;
  border-style: solid;
  /*border-top: outset;*/
}


/*svg {
            width: 33%;
            height: auto;
        }*/
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" />
<div class="container" id="actions-container">
  <div class="d-flex justify-content-between">

    <div class="action-icon-box text-center ">
      <div class="right-arc">

      </div>


      <h3 class="text-center">Title</h3>

      <div class="p-1 action-icon text-center mt-4">
        <a href="#"><img class="center" src="/Content/images/lp-homepage/microphone.png" height="100" /></a>
      </div>
    </div>

  </div>
</div>

【问题讨论】:

  • 你也想要动画吗?或者只是圆圈
  • 没有动画,只有围绕圆的两条弧线。

标签: html css svg css-shapes


【解决方案1】:

您可以使用带有插入框阴影的伪元素在底部创建淡出边框,如下所示:

body {
  background: #232323;
}

.wrap {
  box-sizing: border-box;
  position: relative;
  width: 50%;
  border: 3px solid #ffd004;
  border-radius: 50%;
}

.wrap::before {
  content:'';
  display:block;
  padding-bottom:100%;
}

.wrap::after {
  content: '';
  position: absolute;
  bottom: -3px;
  left: -3px;
  right: -3px;
  height: 100%;
  z-index: 1;
  box-shadow: inset 0px -270px 70px -100px #232323;
}

.title {
  color: #ffd004;
  margin: 0;
  position: absolute;
  top: -3px;
  left: 0;
  width: 100%;
  text-align: center;
  z-index: 2;
  background: #232323;
}

.circle {
  position: absolute;
  top:15%;
  left:15%;
  width: 70%;
  height: 70%;
  border-radius: 50%;
  background: #ffd004;
  z-index: 2;
}
<div class="wrap">
  <h2 class="title">Title</h2>
  <div class="circle"></div>
</div>

请注意,这仅适用于纯色背景。如果您需要在渐变或图像上显示它,我强烈建议您使用 SVG。

使用此答案中的“填充技术”保持圆的纵横比:Maintain the aspect ratio of a div with CSS

【讨论】:

  • 好的,但是如果想要响应,我应该怎么做?
  • @TheMah 我用响应式解决方案更新了我的答案。
【解决方案2】:

如果您需要透明度,可以使用带有线性渐变的mask-image

/* based on @web-tiki's implementation */
body {
  background: #232323;
}

.wrap {
  box-sizing: border-box;
  position: relative;
  width: 50%;
  padding: 60px;
}

/* the border */
.wrap::before {
  content:"";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border: 3px solid #ffd004;
  border-radius: 50%;
  -webkit-mask-image: linear-gradient(transparent 10%, black 10%, transparent 80% );
          mask-image: linear-gradient(transparent 10%, black 10%, transparent 80% );
}

/* the circle */
.wrap::after {
  content:"";
  display:block;
  background: #ffd004;
  padding-top: 100%;
  border-radius: 50%;
  box-shadow: 6px 0px 10px black;
}

.title {
  color: #ffd004;
  margin: 0;
  position: absolute;
  top: -3px;
  left: 0;
  right: 0;
  text-align: center;
}


body:hover {
  /* checkerboard pattern from https://stackoverflow.com/a/51054396/3702797 */
  background-image: /* tint image */
                    linear-gradient(to right, rgba(192, 192, 192, 0.75), rgba(192, 192, 192, 0.75)),
                    /* checkered effect */
                    linear-gradient(to right, black 50%, white 50%),
                    linear-gradient(to bottom, black 50%, white 50%);
  background-blend-mode: normal, difference, normal;
  background-size: 2em 2em;
}
<div class="wrap">
  <h2 class="title">Title</h2>
</div>

【讨论】:

    【解决方案3】:

    试试这个

    body {
      background-color: #002911 !important;
    }
    
    h3 {
      color: #ffd004;
    }
    
    #actions-container {
      margin-top: 30px;
    }
    
    #actions-container .action-icon {
      width: 200px;
      height: 200px;
      background-color: rgb(255, 208, 4);
      border-radius: 50%;
      box-shadow: 5px -2px 6px 3px #0000004a;
      /* center contents*/
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .action-icon-box{
      position: relative;
    }
    #actions-container .action-icon-box::after,#actions-container .action-icon-box::before{
      position: absolute;
      content: '';
      width: 300px;
      height:300px;
      border-radius: 50%;
      z-index:-1;
      top:0px;
      border: 2px solid;
      border-color:transparent;
    }
    #actions-container .action-icon-box::before{
      border-right-color: green;
      right: -60px;
    }
    #actions-container .action-icon-box::after{
      border-left-color: green;
      left: -60px;
    }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
    <div class="container" id="actions-container">
      <div class="d-flex justify-content-between">
    
        <div class="action-icon-box text-center ">
          <h3 class="text-center">Title</h3>
    
          <div class="p-1 action-icon text-center mt-4">
            <a href="#"><img class="center" src="/Content/images/lp-homepage/microphone.png" height="100" /></a>
          </div>
        </div>
    
      </div>
    </div>

    【讨论】:

    • 谢谢,但我希望弧线的底部会淡出,就像我发送的第一张图片一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多