圆角两侧有尖角

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了圆角两侧有尖角相关的知识,希望对你有一定的参考价值。

我想用CSS实现元素的这些方面:

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

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>

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

答案

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

更新

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

.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;
}
<div class="typ1">
  <div></div>
  <div></div>
</div>

<div class="typ2">
  <div></div>
  <div></div>
</div>
另一答案

如果你知道你想要形状的大小,你可以使用包装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>
另一答案

您可以使用: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>

以上是关于圆角两侧有尖角的主要内容,如果未能解决你的问题,请参考以下文章

如何快速在 UIView 上应用带有边框的尖角半径?

如何使用css让图片显示圆角

带尖角的div

如何在形状xml中的笔划两侧制作圆角

UILabel 圆角在 iOS 7.1 中变得清晰

PCB 板边倒圆角的实现方法(基本算法一)