Градиенты, тени и фильтры
Почти на каждом макете, который вам даст дизайнер, вы увидите какие-то плавные переходы цветов, элементы, будто парящие над другими элементами, цветовые эффекты у изображений, происходящие с ними, например, при наведении курсора мыши. В этой главе мы разберём часть из этих эффектов.
Градиенты
Градиенты — это плавные перетекания одних цветов в другие, используемые, в основном, для фона. В CSS градиенты бывают двух типов: линейные и радиальные.
Линейные градиенты задаются функцией linear-gradient()
, которая принимает в качестве параметров
направление градиента (в радианах - deg) и список точек (минимум 2), содержащие цвет и позицию точки (в
процентах).
<div class="gradient"></div>
.gradient { background: linear-gradient( 90deg, /* задаём направление градиента */ blueviolet 0%, /* задаём цвет и позицию первой точки градиента */ tomato 100% /* задаём цвет и позицию второй точки градиента */ ); height: 200px; }
Подробнее о линейном градиенте можно прочитать здесь: MDN: linear-gradient()
Радиальные градиенты задаются функциейradial-gradient()
, которая принимает в качестве параметров
форму градиента (circle или ellipse) и список точек, содержащие цвет и позицию точки.
<div class="gradient"></div>
.gradient { background: radial-gradient( circle, /* задаём форму градиента */ blueviolet 0%, /* задаём цвет и позицию первой точки градиента */ tomato 100% /* задаём цвет и позицию второй точки градиента */ ); height: 200px; }
Подробнее о радиальном градиенте можно прочитать здесь: MDN: radial-gradient()
Для быстрого формирования градиентов существуют генераторы градиентов, один из которых я рекомендую своим читателям: CSS Gradient
Тени
Тени в CSS подразделяются на два вида: тени текста и тени блоков.
Тени текста задаются свойством text-shadow
, принимающим четыре параметра: сдвиг тени по оси X, сдвиг
тени по оси Y, размытие тени и её цвет.
Тени блоков задаются свойством box-shadow
, принимающим пять параметров: сдвиг по оси X, сдвиг по оси
Y, размытие тени, радиус распространения и её цвет.
Рассмотрим пример:
<div class="shadow">Текст с тенью внутри блока с тенью</div>
.shadow { text-shadow: 1px 3px 5px grey; box-shadow: 0 5px 10px -3px black; max-width: 320px; padding: 50px; font-size: 18px; text-align: center; border-radius: 10px; color: teal; background: white; margin: 20px auto; }
Разберёмся подробнее с параметрами теней. Сдвиги по осям X и Y позволяют перемещать тень относительно текста. Они могут быть как положительными, так и отрицательными,
причём отрицательные сдвиги будут перемещать тень влево и вверх, соответственно. Размытие тени может быть только положительным числом. Благодаря этому параметру можно создать эффект нечёткой тени, положительно влияющий на реалистичность. Радиус распространения тени может быть как положительным, так и отрицательным числом. Это свойство применимо только кbox-shadow
. По умолчанию оно равно 0, что означает, что площадь тени
будет равна площади блока. Положительные значения увеличат площадь тени относительно блока, а отрицательные —
уменьшат, что позволит создать эффект парящего блока.Поиграть с box-shadow можно здесь: Box-Shadow CSS Generator, а с text-shadow тут: Text Shadow CSS Generator.
Фильтры
Фильтры в CSS решают примерно ту же задачу, что и фильтры в фотошопе или инстаграме (кому что ближе). Обычно, фильтры применяются к изображениям, но они могут быть применены
к любому элементу на странице. Существует несколько основных фильтров, но можно применять и собственные SVG-фильтры, если вы достаточно уверенно себя чувствуете, работая с этой технологией.blur()
— применяет к элементу размытие по Гауссу (px)brightness()
— влияет на яркость изображения. (0% - 100%)contrast()
— изменяет контрастность изображения. (0% - 100%)drop-shadow()
— ведёт себя похожим образом наbox-shadow()
, но, применяясь к изображению с прозрачным фоном или сложной геометрической фигуре, образует тень, обтекающую именно фигуру, а не блок. Пример:filter: drop-shadow(1px 1px 5px 0 black);
grayscale()
— делает изображение чёрно-белым. (0% - 100%)hue-rotate()
— вращает цвета изображения по HSL-кругу. (0deg - 360deg)invert()
— создаёт негатив изображения. (0% - 100%)opacity()
— ведёт себя так же, как и обычное свойство opacity, изменяя прозрачность изображения. (0% - 100%)saturate()
— устанавливает насыщенность для изображения. (0% - 100%)sepia()
— имитирует эффект "старинного снимка". (0% - 100%)url()
— принимает ссылку на SVG-фильтр и применяет этот фильтр к изображению.
Этот пример от html5book наглядно демонстрирует возможности фильтров: CSS3 Filters