Свойство clip-path - это своего рода маска обрезки, знакомая всем дизайнерам из Photoshop, Illustrator или Figma, но средствами кода в CSS. То есть, если вам нужно скрыть какую-то часть контента, причем используя разную форму для этого, то свойство clip-path вам точно понравится.
Чаще всего с помощью clip-path обрезают изображения. Именно на них мы будем тренироваться в применении этого свойства.
В качестве маски обрезки вы можете использовать ряд функций, соответствующих форме геометрических фигур:
circle- кругellipse- эллипсinset- четырёхугольник, в котором вы задаете смещение от края исходного объекта по 4 сторонам по часовой стрелке: сверху, справа, снизу и слева (top → right → bottom → left).polygon- полигон, он же многоугольникsvg- код в видеclip-pathиз встроенного в ваш html-файл svg или из внешнего svg-файла.none- значение по умолчанию - clip-path отключен (отсутствует)
Ниже вы найдете пример использования различных вариантов clip-path для создания маски для изображения. Границы изображения показаны рамками. Вы можете открыть вкладку CSS, для того чтобы посмотреть код для соответствующей маски. Все они даны для классов с названиями масок.
See the Pen clip-path example by Elen (@ambassador) on CodePen.
Функции-значения свойства clip-path
А теперь давайте разберем подробнее, какие параметры мы можем использовать в каждой из функций clip-path. И для начала давайте поговорим о том, как будут рассчитываться значения для наших элементов.
В браузере точкой отсчета (нулевой координатой) является верхний левый угол как всего окна, так и отдельного элемента. Кроме того, обычно мы работаем с 2-мя осями координат: ось X идет по горизонтали вправо и ось Y - по вертикали вниз.
clip-path: circle()
Вариант clip-path: circle() управляет круглой маской. В качестве значений нужно указать радиус круга и его центр. На рисунке ниже показана маска, которая отсекает часть элемента в виде сектора, т.к. центр круга расположен в нулевой точке.
Чтобы сместить центр круга, укажите другие параметры в параметре at, например, clip-path: circle(100px at 100px 100px).
По умолчанию круг будет рисоваться из центра, то есть значение свойства clip-path: circle(100px at center) соответствует значению clip-path: circle(100px). Вместо center вы можете использовать в качестве первой. горизонтальной координаты ключевые слова left и right, а в качестве вертикальной - top и bottom.
Примеры значений в свойстве clip-path: circle():
See the Pen clip-path: circle by Elen (@ambassador) on CodePen.
clip-path: ellipse()
Вариант clip-path: ellipse(), в отличие от круга, предполагает разное расстояние от центра. Поэтому вы указываете 2 значения: для горизонтального радиуса и для вертикального, и координаты центра эллипса. Кстати,в качестве координаты центра эллипса (и круга тоже) вы можете указать ключевое слово center, которое размещает маску по центру элемента.
Примеры использования свойства clip-path: ellipse():
See the Pen clip-path: ellipse by Elen (@ambassador) on CodePen.
clip-path: inset()
Этот вариант предполагает,что вы сдвигаете маску обрезки внутрь от краев. Вы можете указать одно значение, например, clip-path: inset(20px), и в этом случае получите смещение краев маски внутрь относительно реальных размеров на 20px.
Если вы указываете 2 значения, то первое будет управлять верхним и нижним отступом, а второе - левым и правым. 3 значения управляют верхним отступом, затем правым и левым и 3-е значение - нижним отступом. 4 значения задают смещение от края исходного объекта по 4 сторонам по часовой стрелке: сверху, справа, снизу и слева (top → right → bottom → left ).

При указании процентов в качестве значений, величины берутся от ширины или высоты исходного элемента в зависимости от того, какое по счету значение указано в inset().
Кроме описания смещения по сторонам элемента, вы можете указать закругление углов. Для этого существует параметр round, для которого вы можете указать тоже от 1 до 4 значений.
Закругление углов можно отключить. Тогда вам надо указать в качестве значения для какого-либо угла(-ов) 0.
В примере ниже вы найдете несколько примеров с clip-path: inset() с разными параметрами.
See the Pen clip-path inset by Elen (@ambassador) on CodePen.
clip-path: polygon()
Полигон, или многоугольник - это любая фигура от треугольника до 7-8-9- или более -угольника. Чаще всего это ромб или треугольник, но форма фигуры может быть какой угодно - звезда, крест, квадрат без середины или неправильный многоугольник. Чаще всего, координаты точек в виде пар X Y, задается в процентах,т.к. фигуры могут быть разного размера на разных экранах, и такой способ более универсален, чем пиксели или em, например.
Для треугольника можно написать такое свойство: clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
Чаще всего полигоны задают с помощью генераторов clip-path или встроенного в Инструменты разработчика Firefox редактора clip-path.
Несколько вариантов clip-path: polygon() представлены ниже.
See the Pen clip-path: polygon by Elen (@ambassador) on CodePen.
Кстати, для элементов, которым задано свойство clip-path, нельзя задать свойство box-shadow. Вместо этого нужно задавать свойство filter: drop-shadow(), причем не для самого элемента, а для его "обертки".
clip-path: url()
В том случае, если ваш clip-path слишком сложен или просто существует в виде определенной фигуры в графическом редакторе (например,в Figma), то проще всего экспортировать такую фигуру в SVG-файл и использовать его в качестве clip-path.
Тут нужно соблюсти 2 условия:
- В SVG должен быть размещен тег
<clipPath id="someID">с атрибутом id внутри элемента<defs>или непосредственно в SVG. - В CSS вы указываете свойство
clip-path: url(#someID)(inline SVG, или встроенный SVG) илиclip-path: url(path-to.svg#someID)(внешний SVG, содержащийclipPath с id). С последним вариантом все немного сложнее, чем со встроенным SVG, так как пока еще большинство браузеров такой вариант НЕ поддерживают (смотрите на caniuse.com)
В самом SVG clipPath вы тоже наверняка захотите иметь такого вида, чтобы он на разных экранах масштабировался вместе с вашей картинкой или другим элементом. Однако, как правило, во всех SVG, которые вы экспортируете из графических редакторов или скачиваете с каких-либо источников, координаты внутри SVG будут абсолютными, т.е. привязанными к начальным размером нарисованной векторной картинки.
Вам же нужны относительные координаты. Обычно никто не хочет пересчитывать самостоятельно из абсолютных координат в относительные, то вам тогда нужен онлайн-инструмент для этого. Вы найдете его здесь.
Вторым условием является изменение атрибута clipPathUnits="userSpaceOnUse" на clipPathUnits="objectBoundingBox":
clipPathUnits = userSpaceOnUse → objectBoundingBox
Варианты SVG clipPath в примерах:
See the Pen clip-path: url() by Elen (@ambassador) on CodePen.
Генераторы clip-path
Вам же не хочется заморачиваться с рисованием распространенных фигур для clip-path? Тогда генераторы clip-path вам очень пригодятся. Вот несколько ссылок:
Анимация для свойства clip-path
Конечно же, самым интересным в использовании свойства clip-path является возможность его анимации. Для этого отлично подходит cвойство transition с разными значениями для clip-path.
В 2-х примерах ниже вы найдете примерно одинаковый подход к анимации clip-path: circle(), но с несколько разным видом. Код несложный, а смотрится достаточно эффектно.
Пример 1:
See the Pen Clip-path transition example 1 by Elen (@ambassador)on CodePen.
Пример 2:
See the Pen Clip-path transition example 2 by Elen (@ambassador) on CodePen.
Примеры использования clip-path для разных случаев
Анимация блоков при наведении
See the Pen Show Posts with clip-path by Elen (@ambassador)on CodePen.
Карточки для блока "Наша команда"
See the Pen About Us Pop-Out Effect by Mikael Ainalem (@ainalem) on CodePen.
Изменение вида блока при наведении
See the Pen CSS Clip-Path Hover Effect by Ryan Mulligan (@hexagoncircle) on CodePen.
Слайдер
Пример кода, в котором clip-path в виде круга работает на появление нового слайда.
See the Pen Clip-Path Revealing Slider by Nikolay Talanov (@suez) on CodePen.
Больше красивых слайдеров вы найдете в посвященной им статье.
И еще один слайдер на основе свойства clip-path с другими элементами управления и только на CSS.
See the Pen Image Clip-Path Animation with Sliders by Elen (@ambassador) on CodePen.
О слайдерах на основе CSS можно прочитать в отдельной статье.
Анимация фото при наведении
See the Pen Split Image | Hover Effect by Dimitra Vasilopoulou (@mimikos) on CodePen.
Анимация текста
Пример 1: Появление и исчезновение текста
See the Pen Hand written SVG text animation by Matthew Ellis (@mellis84)on CodePen.
Пример 2: Разрезанный текст
See the Pen Black Mirror Cracked Text Effect by George W. Park (@GeorgePark) on CodePen.
Пример 3: Текст из кусочков
See the Pen Shattering Text Animation by Arsen Zbidniakov (@ARS) on CodePen.
Интересную анимацию вы найдете в статье DOUBLE IMAGE HOVER EFFECTS.
На основе статьи Understanding Clip Path in CSS
Если вы заинтересовались эффектами, которые получаются с помощью свойства clip-path, то вам стоит посмотреть еще видео ниже.
Слайды к видео можно найти по ссылке.







