我想使用css创建如下图所示的曲线。
我正在尝试这样的事情:
.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>
请帮帮我
答案 0 :(得分:11)
正如哈利在评论中所说,SVG将是你最好的选择,因为CSS的双曲线在不使用多个元素,伪元素或使用可能不受支持的CSS3属性的情况下是不可行的。
SVG代表可伸缩矢量图形。 Web浏览器将其视为图像,但您可以在SVG中添加文本和普通HTML元素。
所有浏览器都支持它,如下所示:CanIUse
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;
当然,使用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
。它对曲线也不是最好的,因为它会在没有抗锯齿的情况下渲染它们
: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;
答案 1 :(得分:6)
<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;
答案 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