Меню с эффектом "лава-лампа" на CSS

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

Шаг 1. Подготовка
Мы будем использовать в нашей демонстрации шрифт Kelly Slab. А нужные изображения разместим в спрайте:

Шаг 2. HTML
Каждый из наших трех примеров используется одинаковую структуру меню. Изменяется только класс ph-line-nav, на ph-dot-nav и ph-heart-nav.
<div class="ph-line-nav nav">
    <a href="#">Главная</a>
    <a href="#">О нас</a>
    <a href="#">Галерея</a>
    <a href="#">Контакт</a>
    <div class="effect"></div>
</div>

Обобщенный селектор родственников использует символ тильда (E ~ F) и соответствует элементам, которые родственны заданному. Элементы не должны располагаться рядом, первый элемент (E) должен появляться до второго (F). Также они должны иметь общего родителя. Так связываются элементы <a> и div.effect внутри элемента div.nav.

Шаг 3. CSS - общие правила
Начнем со стилей, которые являются общими для всех трех примеров. Родительский элемент div.nav позиционируется относительно. Элемент <a> является плавающим. (Примечание: все префиксы браузеров опущены для наглядности).
nav {
  overflow: hidden;
  position: relative;
  width: 480px; }
  .nav a {
    display: block;
    position: relative;
    float: left;
    padding: 1em 0 2em;
    width: 25%;
    text-decoration: none;
    color: #393939;
    transition: .7s; }
    .nav a:hover {
      color: #c6342e; }

Критичная для нашего эффекта часть появляется здесь:
.effect {
  position: absolute;
  left: -12.5%;
  transition: 0.7s ease-in-out; }
.nav a:nth-child(1):hover ~ .effect {
  left: 12.5%; /* середина первого <a> */}
.nav a:nth-child(2):hover ~ .effect {
  left: 37.5%;  /* середина второго <a> */ }
.nav a:nth-child(3):hover ~ .effect {
  left: 62.5%; /* середина третьего <a> */}
.nav a:nth-child(4):hover ~ .effect {
  left: 87.5%; /* середина четвертого <a> */}

Когда курсор мыши оказывается над элементом < a >, элемент div.effect плавно перемещается к середине ссылки. Можно провести ряд экспериментов со временем и функцией перехода. В примере мы используем функцию “ease-in-out”, поэтому переход начинается и заканчивается плавно.

Шаг 4. Детали (пример 1)
Начнем с самого простого примера - выскальзывающая линия. Вам нужно только определить размеры и цвета линии и положение по вертикали.
.ph-line-nav .effect {
  width: 90px;
  height: 2px;
  bottom: 36px;
  background: #c6342e;
  box-shadow: 0 1px 0 white;
  margin-left:-45px;
}

Каждый раз мы устанавливаем левое поле равным половине длины элемента, таким образом, эффект всегда центрируется по ссылке с курсором мыши:

Шаг 5. Детали (пример 2)
Теперь рассмотрим эффект с точкой. Мы добавили горизонтальную линию высотой 1px к элементу div.nav. Для решения задачи используем псевдо-элемент :after. Также добавляем небольшую точку, позиционируемую на линию под каждым пунктом меню (снова используем :after). Элемент div.effect теперь является кругом 10px и его свойства аналогичны предыдущему примеру.
.ph-dot-nav:after {
  content: "";
  display: block;
  position: absolute;
  width: 100%;
  height: 1px;
  background: #c6342e;
  bottom: 40px; }
.ph-dot-nav a:after {
  content: "";
  position: absolute;
  width: 4px;
  height: 4px;
  bottom: 38px;
  left: 50%;
  margin-left: -2px;
  background: #c6342e;
  border-radius: 100%; }
.ph-dot-nav .effect {
  width: 10px;
  height: 10px;
  bottom: 36px;
  margin-left: -5px;
  background: #c6342e;
  border-radius: 100%; }


Шаг 6. Детали (пример 3)
В завершение рассмотрим наш последний пример с сердцем, пронзаемым стрелкой. Сердце состоит из двух элементов, добавляемых с помощью псевдо-элементов :before (левая часть) и :after (правая часть). Псевдо-элемент a:after имеет значение свойства z-index равным 1, поэтому он позиционируется над стрелкой.
.ph-heart-nav .effect, .ph-heart-nav a:after, .ph-heart-nav a:before {
  background: url('../images/heart.png') no-repeat; }
 
.ph-heart-nav .effect {
  position: absolute;
  bottom: 26px;
  background-position: 0 0;
  height: 8px;
  width: 62px;
  margin-left:-31px; }
 
.ph-heart-nav a:before, .ph-heart-nav a:after {
  content: "";
  display: block;
  position: absolute;
  left: 50%;
  bottom: 20px;
  background-position: -62px 0;
  height: 20px;
  width: 11px;
  margin-left: -11px; }
 
.ph-heart-nav a:after {
  z-index: 1;
  background-position: -73px 0; }

Теги:
Меню, лава-лампа
Добавлено: 01 Мая 2018 09:01:13 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...