问题
I have two divs with distinct gradient background and I need to create a S-Shape curve between them.
Here's the example fiddle for gradient divs: https://jsfiddle.net/JerryGoyal/rjyfc46c/2/
<div id="section1">
</div>
<div id="section2">
</div>
#section1{
height:200px;
background: linear-gradient(to bottom right, #ad3, #add);
}
#section2{
height:200px;
background: linear-gradient(to bottom right, #de350b, #0065ff);
}
There are couple of things which crossed my mind but:
- svg: don't know how to handle other gradient div.
- border-radius: failed to get truly S-like curve plus it gets ugly when I resize the screen.
- clip-path: not supported by some browsers https://caniuse.com/css-clip-path
- png image: nope! needs to be dynamic content.
any help would be appreciated!
P.S: a must read for future readers: https://css-tricks.com/creating-non-rectangular-headers/
回答1:
Here is a solution using linearGradient with SVG.
.container {
width: 500px;
height: 200px;
background:linear-gradient(to bottom right, #de350b, #0065ff);
}
svg {
width:100%;
}
<div class="container">
<svg mlns='http://www.w3.org/2000/svg' viewBox="0 0 64 64">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#ad3" />
<stop offset="100%" stop-color="#add" />
</linearGradient>
</defs>
<path d='M0 10 C30 28 38 0 64 10 L64 0 L0 0 Z' fill="url(#grad)"/>
</svg>
</div>
Here is also a useful online tool to easily edit the shape (simply append the path to the url to edit ithttp://jxnblk.com/paths/?d=M0 10 C30 28 38 0 64 10 L64 0 L0 0 Z
)
Another idea with the same SVG used as a background so you can easily handle content above it:
.container {
width: 500px;
height: 200px;
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="500" ><defs><linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="%23ad3" /><stop offset="100%" stop-color="%23add" /></linearGradient></defs><path d="M0 10 C30 28 38 0 64 10 L64 0 L0 0 Z" fill="url(%23grad)"/></svg>'),
linear-gradient(to bottom right, #de350b, #0065ff);
display:flex;
justify-content:space-around;
align-items:center;
flex-direction:column;
color:#fff;
}
<div class="container">
<p>TOP</p>
<p>BOTTOM</p>
</div>
来源:https://stackoverflow.com/questions/49669689/how-to-create-a-curve-between-two-gradient-divs-in-css