圆角两侧有尖角

时间:2017-06-14 20:53:29

标签: html css css3 css-shapes rounded-corners

我希望在CSS元素上实现这些方面:

screenshot

这是我最接近的(需要边框):

screenshot



div { 
  width: 120px;
  height: 100px;
  margin: 25px auto;
  border: 1px solid #000;
  border-top-left-radius: 200px 300%;
  border-bottom-left-radius: 200px 300%;
  border-top-right-radius: 200px 300%;
  border-bottom-right-radius: 200px 300%;
}

<div></div>
&#13;
&#13;
&#13;

有关如何锐化边缘的任何建议?宽度需要变化。

3 个答案:

答案 0 :(得分:5)

如果你知道你想要形状的大小,你可以使用包装div和overflow:hidden来解决这个问题。

我使用flexbox将其居中,但您可以使用其他方式将其垂直居中。

.wrapper {
  display: flex;
  align-items: center;
  height: 100px;
  overflow: hidden;
}

.circle { 
  width: 120px;
  height: 120px;
  margin: 25px auto;
  background-color: black;
  border-radius: 100%;
}
<div class="wrapper">
   <div class="circle"></div>
</div>

答案 1 :(得分:2)

你可以使用伪元素这样做,它会缩放到你在主元素上设置的大小

更新

typ2在左/右曲线边框上具有相等的半径,如果要用颜色,图像或动态可缩放高度填充它们,则需要额外的内部元素。

&#13;
&#13;
.typ1 div {
  position: relative;
  display: inline-block;
  width: 120px;
  height: 100px;
  margin: 0 30px;
  overflow: hidden;
}

.typ1 div + div { 
  width: 200px;
  height: 100px;
}

.typ1 div::before,
.typ1 div::after { 
  left: 0;
  top: -10%;
  width: 100%;
  height: 120%;
  border-radius: 100%;
  border: 1px solid #000;
}
.typ1 div::after { 
  left: 22%;
  top: 0;
  width: 56%;
  height: 100%;
  border-radius: 0;
  border-width: 1px 0;
}

.typ2 div { 
  position: relative;
  display: inline-block;
  width: 74px;
  height: 100px;
  margin: 5px 52px;
  border: 1px solid #000;
  border-width: 1px 0;
}

.typ2 div + div { 
  width: 156px;
}

.typ2 div::before,
.typ2 div::after { 
  left: -24px;
  top: -25%;
  width: 188px;
  height: 150%;
  border-radius: 100%;
  border: 1px solid transparent;
  border-left: 1px solid #000;
}
.typ2 div::after { 
  left: auto;
  right: -24px;
  border-left: none;
  border-right: 1px solid #000;
}

/* general styling */
div::before, div::after { 
  content: '';
  position: absolute;
  box-sizing: border-box;
}
&#13;
<div class="typ1">
  <div></div>
  <div></div>
</div>

<div class="typ2">
  <div></div>
  <div></div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以使用:before:after 伪元素执行此操作:

.circle { 
  position: relative;
  width: 100px;
  height: 100px;
  margin: 25px auto;
  border-radius: 50%;
  background: #000;
}

.circle:before,
.circle:after {
  content: "";
  position: absolute;
  width: 100px;
  height: 25px;
  background: #fff;
}

.circle:before {
  top: -16px;
}

.circle:after {
  bottom: -16px;
}
<div class="circle"></div>

根据需要调整topbottom 属性