хороший способ создать кривую между двумя градиентными дивами в CSS?

У меня есть два divs с отличным градиентным фоном, и мне нужно создать кривую S-образной формы между ними.

enter image description here

вот пример скрипки для градиентных дивов: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);
}

есть пара вещей, которые приходили мне в голову, но:

- svg: не знаю, как обрабатывать другие градиентные div.
- границы-радиус: не удалось получить действительно S-образную кривую плюс она становится уродливой, когда я изменяю размер экрана.
- clip-path: не поддерживается некоторыми браузерами https://caniuse.com/css-clip-path
- png изображение: Неа! должен быть динамический контент.

любая помощь будет оценили!


P. S: A должен прочитать для будущих читателей:https://css-tricks.com/creating-non-rectangular-headers/

1 ответов


вот решение, использующее linearGradient С 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>

вот также полезный онлайн-инструмент чтобы легко редактировать форму (просто добавьте путь к url-адресу, чтобы отредактировать егоhttp://jxnblk.com/paths/?d=M0 10 C30 28 38 0 64 10 L64 0 L0 0 Z )


другая идея с тем же SVG используется в качестве фона, так что вы можете легко обрабатывать содержимое над ним:

.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="#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>'), 
  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>