创建一个粗略箭头

Ish*_*hio 10 html css svg css3 css-shapes

我想制作一个看起来像这样的箭头:

箭头的例子

但是,这是我能得到的最接近的:

.button {
  margin: 4em 0;
  padding: 2em;
  width: 15%;
  margin: 0 auto;
  text-align: center;
  background-color: #000000;
  color: #ffffff;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -moz-flex-flow: row wrap;
  -webkit-flex-flow: row wrap;
  -ms-flex-flow: row wrap;
  flex-flow: row wrap;
  webkit-justify-content: center;
  justify-content: center;
}
.curved-arrow {
  display: inline-block;
  border-top: 10px solid #fff;
  border-bottom: 10px solid #fff;
  border-left: 30px solid #fff;
  border-top-right-radius: 100%;
  border-bottom-right-radius: 100%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="button">
  <div class="curved-arrow"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?我知道我可以使用图像,但是我的设计师在整个网站中使用了多种颜色的几种,我宁愿只使用CSS作为形状.

如果很难看到它在左边从上到下是一条扁平的直线,而在右边的中间是曲线.

web*_*iki 8

SVG

CSS边框半径不会让您轻松获得您正在寻找的确切输出.我建议使用带有一个二次贝塞尔曲线命令的path元素的内联SVG :

svg{width:100px;}
Run Code Online (Sandbox Code Playgroud)
<svg viewbox="0 0 20 8">
  <path d="M0 0 Q 30 4 0 8" />
</svg>
Run Code Online (Sandbox Code Playgroud)

然后你可以使用CSS填充属性为箭头着色,看看这个小提琴(在评论中发布的示例中为@Nick R提供信用)


CSS

您还可以将2个值用于border-radius属性(有关其工作原理的说明,请参阅MDN)它很简单,但它不会让您使箭头"点"像图像中那样清晰:

.curved-arrow { 
  width:40px; height:25px;
  background:#000;
  border-top-right-radius:100% 50%;
  border-bottom-right-radius:100% 50%;
  
}
Run Code Online (Sandbox Code Playgroud)
<div class="curved-arrow"></div>
Run Code Online (Sandbox Code Playgroud)


Ste*_*ide 7

CSS

这需要一些花哨的border-radius造型来达到你想要的形状.

.container {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
}
.arrow {
  width: 50px;
  height: 30px;
  position: absolute;
  top: 32px;
  left: 25%;
  border-radius: 0px 100% 100% 0px / 0 50% 50% 0;
  background: white;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="arrow"></div>
</div>
Run Code Online (Sandbox Code Playgroud)


如果你想在一个单独的元素中,你可以使用像这样的伪元素.

.arrow {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
}
.arrow:before {
  content: '';
  width: 50px;
  height: 30px;
  position: absolute;
  top: 32px;
  left: 25%;
  border-radius: 0px 100% 100% 0px / 0 50% 50% 0;
  background: white;
}
Run Code Online (Sandbox Code Playgroud)
<div class="arrow"></div>
Run Code Online (Sandbox Code Playgroud)


SVG

一个很好的选择也是SVG创建这个形状,这也使它完全响应.

<svg width="100px" height="100px" viewbox="0 0 20 20" style="background: red;">
  <path d="M5,7
           Q15,7 15,10
           Q15,13 5,13z" fill="white"></path>
</svg>
Run Code Online (Sandbox Code Playgroud)