Создавайте интересные фигуры изображений с помощью свойства CSS clip-path.

Использование обрезки в CSS может помочь нам отойти от всего в наших проектах, что выглядит как коробка. Используя различные базовые фигуры или SVG, вы можете создать контур обрезки. Затем вырежьте части элемента, которые вы не хотите показывать.

Все элементы на веб-страницах определяются внутри прямоугольного блока. Однако это не значит, что мы должны сделать все похожим на блок. Вы можете использовать свойство CSS clip-path , чтобы обрезать части изображения или другого элемента, чтобы создать интересные эффекты.

В приведенном выше примере изображение воздушного шара является квадратным ( источник ). Используя clip-path и базовое значение формы circle() дополнительное небо вокруг воздушного шара обрезается, оставляя круглое изображение на странице.

Поскольку изображение является ссылкой, вы можете увидеть кое-что еще о свойстве clip-path . Только видимая область изображения может быть нажата, поскольку события не срабатывают на скрытых частях изображения.

Обрезку можно применить к любому элементу HTML, не только к изображениям. Существует несколько различных способов создания clip-path , в этом посте мы рассмотрим их.

Совместимость с браузерами

Browser Support

  • Хром: 55.
  • Край: 79.
  • Firefox: 3.5.
  • Сафари: 9.1.

Source

Для устаревших браузеров запасным вариантом может быть разрешение браузеру игнорировать свойство clip-path и показывать необрезанное изображение. Если это проблема, вы можете проверить наличие clip-path в запросе на функцию и предложить альтернативный макет для неподдерживаемых браузеров.

@supports(clip-path: circle(45%)) {
  /* code that requires clip-path here. */
}

Базовые формы

Свойство clip-path может принимать несколько значений. Значение, использованное в исходном примере, было circle() . Это одно из основных значений формы, определенных в спецификации CSS Shapes . Это означает, что вы можете обрезать область, а также использовать то же значение для shape-outside , чтобы текст обтекал эту форму.

Полный список основных форм:

inset()

Значение inset() вставляет обрезанную область от края элемента и может передавать значения для верхнего, правого, нижнего и левого краев. Также можно добавить border-radius для изгиба углов обрезанной области с помощью ключевого слова round .

В моем примере у меня есть два блока, оба с классом .box . Первый блок не имеет обрезки, второй обрезан с использованием значений inset() .

circle()

Как вы видели, значение circle() создает круглую обрезанную область. Первое значение — это длина или процент, а также радиус круга. Второе необязательное значение позволяет вам задать центр круга. В примере ниже я использую ключевые значения, чтобы задать мой обрезанный круг вверху справа. Вы также можете использовать длины или проценты.

Остерегайтесь плоских краев!

Имейте в виду, что со всеми этими значениями форма будет обрезана полем margin на элементе. Если вы создадите круг на изображении, и эта форма будет выходить за пределы естественного размера изображения, вы получите плоский край.

Обрезанный круг с плоскими краями
Изображение, использованное ранее, теперь имеет примененный circle(50%) . Поскольку изображение не квадратное, мы задеваем поле поля сверху и снизу, и круг обрезается.

ellipse()

Эллипс по сути является сплющенным кругом и поэтому действует очень похоже на circle() но принимает радиус для x и радиус для y, а также значение центра эллипса.

polygon()

Значение polygon() может помочь вам создавать довольно сложные фигуры, определяя столько точек, сколько вам нужно, задавая координаты каждой точки.

Чтобы помочь вам создавать многоугольники и увидеть, что это возможно, воспользуйтесь Clippy , генератором clip-path , а затем скопируйте и вставьте код в свой собственный проект.

Формы из значений ящиков

Также в CSS Shapes определены фигуры из значений box . Они относятся к CSS Box Model — content box, padding box, border box и margin box со значениями ключевых слов content-box , border-box , padding-box и margin-box .

Эти значения могут использоваться отдельно или вместе с базовой формой для определения справочного поля, используемого формой. Например, следующий код обрезает форму по краю содержимого.

.box {
  clip-path: content-box;
}

В этом примере круг будет использовать в качестве справочного поля content-box , а не margin-box (которое установлено по умолчанию).

.box {
  clip-path: circle(45%) content-box;
}

В настоящее время браузеры не поддерживают использование значений box для свойства clip-path . Однако они поддерживаются для shape-outside .

Использование элемента SVG

Для большего контроля над обрезанной областью, чем это возможно с базовыми фигурами, используйте элемент SVG clipPath . Затем ссылайтесь на этот идентификатор, используя url() в качестве значения для clip-path .

Анимация вырезанной области

Переходы и анимации CSS можно применять к clip-path для создания интересных эффектов. В следующем примере я анимирую круг при наведении, переходя между двумя кругами с разным значением радиуса.

Существует множество креативных способов использования анимации с обрезкой. Анимация с помощью clip-path на CSS Tricks проходит через некоторые идеи.

Фото Мэтью Генри на Burst.