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

Эффект тени при наведении в CSS

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

HTML разметка

Каждый тег li будет являться кнопкой, внутри которой мы вставим код иконки, обернутый в ссылку.

<ul>
    <li><a href="#"><i class="fab fa-android"></i></a></li>
    <li><a href="#"><i class="fab fa-apple"></i></a></li>
</ul>

Подключим библиотеку с иконками между тегами <head></head>.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css">

Выбираем нужные иконки на сайте FontAwesome и скопируем их код.

Разметка готова и теперь переходим к CSS стилям. Вся магия с эффектом тени будет вершиться там.

CSS стили

Зададим черный фоновый цвет и установим минимальную высоту для body на всю область просмотра браузера. Для выстраивания кнопок по центру, сделаем весь body: флекс-контейнером. Тогда в этой паре, тег ul будет флекс-элементом и разместится по центру.

body {     display: flex;
    justify-content: center; <!-- по горизонтали-->
    align-items: center; <!-- по вертикали-->
    min-height: 100vh; <!-- область просмотра по вертикали-->
    background: #000; <!-- цвет фона-->
}

Выстроим дочерние элементы списка li в ряд, применив ещё раз технологию флексбокс.

ul {
    display: flex;
}

Убираем у списков черные точки-маркеры, зададим размеры кнопок в пикселях. Чтобы кнопки не сливались в одно целое, сделаем отступы слева и справа по 15 пикселей. Сделаем элементы меню вместо квадратных, круглыми.

ul li {
    position: relative; <!-- относительное позиционирование-->
    list-style-type: none; <!-- без точек-->
    width: 150px; <!-- ширина-->
    height: 150px; <!-- высота-->
    margin: 0 10px; <!--отступы -->
    border-radius: 50%; <!-- скругление-->
}

Стилизуем ссылки-иконки: позиционируем ссылку абсолютно по отношению к тегу li. Значит, для <li> выставляем относительное позиционирование. Для вертикального выравнивания иконки, зададим высоту строки 120 пикселей. Это значение складывается из высоты блока минус сумма двух отступов (150-30). За размер иконки отвечает размер шрифта.

ul li a {
    position: absolute; <!-- абсолютное позиционирование-->
    top:15px;
    left: 15px;
    right: 15px;
    bottom: 15px;
    text-align: center; <!-- горизонтальное выравнивание -->
    line-height: 120px; <!-- вертикальное выравнивание -->
    background: #e100ff;
    color: #fff; <!-- цвет иконки -->
    font-size: 45px; <!-- размер иконки -->
    border-radius: 50%; <!-- радиус скругления -->
}

Переходим непосредственно к написанию стилей для эффекта тени. При наведении на кнопку, вокруг неё появляется ореол полупрозрачной тени такого же цвета. Кроме того, сама иконка становится ярче и крупнее.

<!--Зададим тень для иконки-->
ul li a i {
    text-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
    opacity: 0.4;
    transition: 0.5s;
}

При наведении на ссылку, исчезает полупрозрачность, и размер иконки увеличивается в 1.5 раза.

ul li a:hover i {
    opacity: 1;
    transform: scale(1.5)
}

Делаем двойную тень, задействовав одновременно два псевдо элемента. Размываем тень при помощи фильтра и меняем порядок слоев - загоняем тень под кнопку.

ul li:before,
ul li:after {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    filter: blur(20px); <!-- размытие тени-->
    z-index: -1; <!-- порядок слоев-->
    opacity: 0;
    transition: 1s; <!-- плавная прорисовка тени-->
}

Для красивого эффекта тени, дадим радиус размытия для одной тени больше.

ul li:after {
    filter: blur(40px);<!-- увеличим радиус размытия-->
}

Отлавливаем событие наведения на псевдо элементах. Наша тень из невидимого состояния, плавно появляется.

ul li:hover:before,
ul li:hover:after {
    opacity: 1;
}

Покрасим тень с помощью градиента - сделав линейный переход от темного к светлому тону.

li a,
ul li:before,
ul li:after {
    background: linear-gradient(45deg, #7F00FF, #E100FF);
}

Смотрите пример на CodePen