使用css创建S形曲线

时间:2015-10-09 10:11:17

标签: html css css3 svg css-shapes

我想使用css创建如下图所示的曲线。

enter image description here

我正在尝试这样的事情:

.curve {
  background-color: #8aa7ca;
  height: 65px;
  width: 160px;
  -moz-border-radius-bottomright: 25px 50px;
  border-bottom-right-radius: 25px 50px;
}
<div class="curve">
  <p>This is a sample text.</p>
</div>

请帮帮我

4 个答案:

答案 0 :(得分:11)

SVG

正如哈利在评论中所说,SVG将是你最好的选择,因为CSS的双曲线在不使用多个元素,伪元素或使用可能不受支持的CSS3属性的情况下是不可行的。

SVG代表可伸缩矢量图形。 Web浏览器将其视为图像,但您可以在SVG中添加文本和普通HTML元素。

所有浏览器都支持它,如下所示:CanIUse

&#13;
&#13;
var stringProperties = typeof(Device)
    .GetProperties()
    .Where(prop => prop.PropertyType == deviceSettingValue.GetType());
var matches = devices
    .Where(device => stringProperties.Any(prop => prop.GetValue(device, null) == deviceSettingValue));
var fullmatches = matches.ToList();
&#13;
&#13;
&#13;

CSS

当然,使用CSS仍然可以实现这一点,但确实需要使用伪元素<svg width="466" height="603" viewbox="0 0 100 100" preserveAspectRatio="none"> <path d="M0,0 L100,0 C25,50 50,75 0,100z" fill="#8aa7ca" /> </svg>:before。它对曲线也不是最好的,因为它会在没有抗锯齿的情况下渲染它们

&#13;
&#13;
:after
&#13;
div {
  background: blue;
  width: 50px;
  height: 75px;
  position: relative;
}
div:before {
  content: '';
  background-image: radial-gradient(circle at 100% 100%, rgba(204, 0, 0, 0) 100px, blue 100px);
  position: absolute;
  top: 0;
  left: 100%;
  width: 100px;
  height: 75px;
}
div:after {
  content: '';
  position: absolute;
  width: 50px;
  height: 75px;
  background: blue;
  border-radius: 0 0 100% 0 / 0 0 100% 0;
  top: 100%;
  left: 0;
}
&#13;
&#13;
&#13;

答案 1 :(得分:6)

SVG

svg 中,可以使用单个path

创建

&#13;
&#13;
<svg height="300px" viewBox="0 0 100 100">
  <path fill="CornFlowerBlue" d="M0,0
  100,0
  C50,20 50,80 0,100 Z" />
</svg>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

如果您愿意,可以使用纯CSS制作。

<强> Demo

这使用大的阴影来创建第二条曲线:

.wrap {
  position: relative;
  height: 400px;
  width: 100%;
  margin: 0 auto;
  max-width: 1024px;
}
.shape {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 50%;
  overflow: hidden;
  z-index: 10;
}
.shape:after {
  content: "";
  position: absolute;
  top: 10%;
  left: 0;
  width: 100%;
  height: 90%;
  border-radius: 0 50% 0 0;
  box-shadow: 0 0 0 999px lightgray;
}
.shape2 {
  position: absolute;
  top: 0;
  left: 50%;
  height: 100%;
  width: 50%;
  background: lightgray;
  border-radius: 0 0 0 50%;
  z-index: 10;
}

/******************************/

html,
body {
  margin: 0;
  padding: 0;
  height: 100%;
  vertical-align: top;
  overflow: hidden;
  background: cornflowerblue;
 
}
<div class="wrap">
  <div class="shape"></div>
  <div class="shape2">This will be where you can place the text to go down the right hand side of the slider</div>
  
</div>

答案 3 :(得分:0)

我有类似的要求,但发现此任务的 CSS 对我的知识水平来说太复杂了。所以,相反,我使用了一个在线波形发生器。 这样,您就可以绘制所需的波形并生成 SVG。 然后你所要做的就是为生成的 wave 复制粘贴代码。 这是我用过的:
svg wage generator