CSS半拱围绕整圆

时间:2017-06-10 11:41:30

标签: css css-shapes

我正试图在下面的整圆周围创建一个半拱。我如何在CSS中创建它?到目前为止,我只创建了圆形但不知道如何进行拱形。

Arch Circle



.circle {
  width: 45px;
  height: 45px;
  border-radius: 50%;
  font-size: 20px;
  color: #fff;
  line-height: 45px;
  text-align: center;
  position: relative;
  background: #BDBDBD;
}

<div class="circle">1</div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:7)

您可以使用:after伪元素创建半圆。您还需要使用bottom-righttop-right border-radius。

&#13;
&#13;
.circle {
  width: 100px;
  height: 100px;
  margin: 50px;
  position: relative;
  line-height: 100px;
  text-align: center;
  border-radius: 50%;
  background: #BDBDBD;
  color: white;
}

.circle:after {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  border: 10px solid gray;
  border-left: 0;
  border-bottom-right-radius: 100px;
  border-top-right-radius: 100px;
  width: 55px;
  height: calc(100% + 10px);
  transform: translate(15px, -15px);
}
&#13;
<div class="circle">1</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这是基于jcaron对该问题的评论。我用一个外圈div包裹了圆圈,在灰色和#34;之间创造了一个白色的空间。区域。

然而,Nenad Vracar的回答似乎更加清晰。

&#13;
&#13;
.outer-circle {
  width: 45px;
  height: 45px;
  border-style: solid;
  border-width: 1x 1px 0 0;
  border-color: #BDBDBD #BDBDBD transparent transparent;
  border-radius: 50%;
  font-size: 20px;
  color: #fff;
  line-height: 45px;
  text-align: center;
  position: relative;
  background: #fff;
  padding: 3px;
  transform: rotate(45deg);
}

.circle {
  background: #BDBDBD;
  border-radius: 50%;
  transform: rotate(-45deg);
}
&#13;
<div class="outer-circle">
  <div class="circle">
    1
  </div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

是使用pseudo selector,但您的parent背景需要white或与伪选择器合并的任何其他颜色,即圆和半拱之间的中心部分或使用画布执行此操作

body {
  background: #fff;
}

div {
  width: 100px;
  height: 100px;
  background: #ccc;
  border-radius: 50%;
  text-align: center;
  position: relative;
  margin-top: 30px;
  color: #fff;
  padding-top: 40px;
  box-sizing: border-box;
}

div:after {
  content: "";
  position: absolute;
  border-top: 70px solid transparent;
  border-left: 70px solid transparent;
  border-right: 70px solid #ccc;
  border-bottom: 70px solid #ccc;
  border-radius: 50%;
  z-index: -2;
  transform: rotate(-45deg);
  left: -15px;
  top: -20px;
}

div:before {
  content: "";
  position: absolute;
  border-top: 60px solid transparent;
  border-left: 60px solid transparent;
  border-right: 60px solid #fff;
  border-bottom: 60px solid #fff;
  border-radius: 50%;
  z-index: -1;
  transform: rotate(-45deg);
  top: -10px;
  left: -7px;
}
<div>1</div>