Как сделать переходы между разделами на сайте в виде волны?

Как сделать переходы между разделами на сайте в виде волны?
Содержание:
  1. Создание SVG изображения в форме волны
  2. Примеры использования SVG волны для оформления перехода между секциями
  3. Комментарии

В этой статье мы рассмотрим, как используя CSS и векторную SVG графику визуально оформить разрыв между секциями страницы в виде плавно изогнутой кривой линии.

Процесс разработки перехода начнём с создания SVG изображения.

После создания SVG, рассмотрим несколько примеров его применения для оформления границы блока.

Создание SVG изображения в форме волны

Если вам нужно создать SVG волну какой-то определённой формы, то в этом случае её необходимо нарисовать, используя векторный графический редактор, например, такой как Adobe Illustrator или Inkscape.

Пример готовой волны, выполненной с использованием кривых Безье в Inkscape.

Пример SVG волны, выполненной с использованием кривых Безье в Inkscape

После того как нужный контур будет готов документ Inkscape необходимо сохранить в SVG файл предварительно подогнав размер страницы под изображение.

При желании вы также можете оптимизировать полученное изображение, например, воспользовавшись сервисом SVGOMG.

В завершении вам необходимо открыть полученный SVG файл и скопировать его код себе на страницу.

Генерирование SVG волны с помощью сервиса getwaves.io

Если вам не нужна волна строго определённой формы, то в этом случае её можно сгенерировать через сервис getwaves.io. Он позволяет очень просто создавать плавные уникальные SVG волны. Генерирование случайной SVG картинки осуществляется посредством нажатия на кнопку с изображением кубика.

Создание SVG волны посредством сервиса getwaves.io.

После того как вы подобрали волне нужную форму, её необходимо получить. Осуществляется это посредством нажатия на значок «Загрузка». Здесь сервис предлагает на выбор два варианта: скачать SVG файл или скопировать код. Т.к. изображение мы будем непосредственно размещать в HTML коде, то сделаем это через 2 вариант.

Примеры использования SVG волны для оформления перехода между секциями

1. Использование SVG волны для оформления нижней границы элемента.

Использование SVG волны для оформления нижней границы элемента
HTML
<style>
.banner {
  position: relative;
}
.banner__content {
  background: url('background.jpg');
  background-size: cover;
}
.banner svg {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
}
.banner svg path {
  fill: #fff;
}
</style>

<!-- BANNER -->
<section class="banner">
  <div class="banner__content">
    <h1>Добро пожаловать на сайт</h1>
  </div>
  <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 1440 180"><path d="M0 43.418h288c96 0 192 0 288 26.7 96 26.3 192 80.3 288 69.3s192-85 288-117.3c96-31.7 192-21.7 240-16l48 5.3V180H0z" /></svg>
</section>

В этом примере мы достигли данный эффект следующим образом:

  1. Расположили SVG изображение над элементом .banner__content относительно его нижней границы. Чтобы это выполнить мы установили элементу <svg> абсолютное позиционирование, а .banner – относительное. После этого положение <svg> определили с помощью CSS свойств top и left, а размер - посредством width.
  2. Скрыли часть картинки, над которой расположен <svg>. Для этого мы просто залили его контур цветом фона страницы, в данном случае #fff.

2. Создание перехода с использованием нескольких волн.

Пример создания перехода с использованием нескольких волн
HTML
<style>
.banner__content {
  background: linear-gradient(180deg, #7125ce 0%, #150044 100%);
  padding-top: 8%;
  padding-bottom: 8%;
}
.banner svg {
  width: 100%;
  fill: #150044;
}
</style>

<!-- BANNER -->
<section class="banner">
<div class="banner__content">...</div>
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 1280 140"><path d="M0 51.76c36.21-2.25 77.57-3.58 126.42-3.58 320 0 320 57 640 57 271.15 0 312.58-40.91 513.58-53.4V0H0z" fill-opacity=".2"/><path d="M0 24.31c43.46-5.69 94.56-9.25 158.42-9.25 320 0 320 89.24 640 89.24 256.13 0 307.28-57.16 481.58-80V0H0z" fill-opacity=".8"/><path d="M0 0v3.4C28.2 1.6 59.4.59 94.42.59c320 0 320 84.3 640 84.3 285 0 316.17-66.85 545.58-81.49V0z"/></svg>
</section>

3. Пример, в котором волне добавлена анимация с помощью CSS

Пример SVG волны, выполненной с использованием кривых Безье в Inkscape
HTML
<style>
.banner__content {
  background: #3f51b5;
}
@keyframes move {
  from {
    transform: translate(-90px, 0%);
  }

  to {
    transform: translate(90px, 0%);
  }
}

.banner svg {
  width: 100%;
  background: #3f51b5;
  display: block;
  width: 100%;
  height: 10vw;
}

.banner svg>g>use {
  animation: move 30s linear infinite;
}

.banner svg>g>use:nth-child(1) {
  animation-delay: -2s;
  fill: #7986cb;
}

.banner svg>g>use:nth-child(2) {
  animation-delay: -2s;
  animation-duration: 17s;
  fill: #5c6bc0;
}

.banner svg>g>use:nth-child(3) {
  animation-delay: -4s;
  animation-duration: 10s;
  fill: #ffffff;
}
</style>

<!-- BANNER -->
<section class="banner">
  <div class="banner__content">
    <h1>Добро пожаловать на сайт</h1>
  </div>
  <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" viewbox="0 25 160 40" class="waves">
    <defs><path id="wave" d="M-150 53c30.77 0 59.538-20 90-20 31.077 0 60.256 20 90 20 30.77 0 59.23-20 90-20 30.77 0 59.23 20 90 20v20h-360z"/></defs>
    <g>
      <use xlink:href="#wave" x="50" y="0" fill="#7986cb"/>
      <use xlink:href="#wave" x="50" y="2" fill="#5c6bc0"/>
      <use xlink:href="#wave" x="50" y="4" fill="#ffffff"/>
    </g>
  </svg>
</section>

Комментарии: 6

zhanar
zhanar
Извините подскажите плз
как теперь поставить такие волны на тильде зеро
скапировать этот код и можно поставить если да то куда
Александр Мальцев
Александр Мальцев
Привет! Не подскажу, с Тильдой не знаком.
Sanjar
Sanjar
Здравствуйте. не как не могу интегрировать новый c генерированный waves getwaves.io/
не могли бы подробно написать по инструкции не как не получается.
Спасибо заранее
Sanjar
Sanjar
нужны маленькие волны типа таких ibb.co/DD6j53W
Спасибо заранее
Sanjar
Sanjar
Вот пример сделал с бекграундом но он что то дёргается в каком-то секунде. codepen.io/sanyokdb/pen/rNMWBEd
Александр Мальцев
Александр Мальцев
Здравствуйте! Вам необходимо, чтобы совпадали начало и конец волны.