css обрезка картинок
нужно обрезать и вставить обычную, горизонтальную и вертикальную картинки в div так, что бы они полностью заполняли собой div не искажаясь (масштабировать по меньшей стороне, а лишнее обрезать) у меня всё работает, кроме обработки квадратной картинки, она должна показыватья почти вся, а видна только ее половина
.img_wrap < width: 300px; height: 200px; overflow: hidden; /*line-height: 200px;*/ /*text-align: center;*/ border-style: solid; >.img_wrap img
Отслеживать
задан 12 окт 2017 в 11:28
173 1 1 золотой знак 3 3 серебряных знака 11 11 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
.img_wrap < width: 300px; height: 200px; border-style: solid; >.img_wrap img
Отслеживать
ответ дан 12 окт 2017 в 21:20
1,108 1 1 золотой знак 7 7 серебряных знаков 13 13 бронзовых знаков
Как с помощью CSS сделать обрезку картинки до определенного размера?
Добрый день уважаемые люди!
У меня такой вопрос:
Допустим есть блок 200х500 пкс, там умещается картинка 200х300 пкс(сверху), и текст 200х300 пкс (соответственно снизу).
Вот заливаю я картинку на сервер, ставлю img src() + класс, и картинка чудесным образом обрезается до размеров 200х300 пкс, и нет никаких белых полей по бокам и сверху/снизу, не растянута и не сжата(т.е. соотношение тоже самое как и большой картинки).
Как это можно реализовать? css или js?
- Вопрос задан более трёх лет назад
- 76181 просмотр
Магия CSS: Методы обрезки изображений при помощи CSS и SVG


Всем привет, меня зовут Анна Блок и сегодня мы поговорим о том, как обрезать изображения, не используя графических программ.
Где это может пригодиться?
Прежде всего, на сайтах, где контент с изображениями, вероятнее всего, не будет подрезаться под какой-либо конкретный блок.
Яркий пример: блог на WordPress.
Предположим, вы хотите, чтобы обложка вашей статьи имела пропорции 1:1 (квадрат). Ваши действия:
- Скачаете подходящую картинку из интернета;
- Обрежете ее в фотошопе до нужных пропорции;
- Опубликуете статью.
Зайдя на сайт, вы увидите тот результат, который ожидали.
Но, предположим вы забыли обрезать картинку в фотошопе и выгрузили рандомное изображение в качестве обложки из интернета, что будет тогда?! Правильно, верстка сломается. А если вы совсем не использовали CSS, то картинка HD разрешения и вовсе может перекрыть весь обзор на текст. Поэтому важно уметь делать обрезку изображений при помощи CSS стилей.
Давайте разберем разные ситуации того, как это можно реализовать не только при помощи CSS, но и SVG.
Пример 1

Попробуем обрезать изображение которое размещено при помощи background-image. Создадим небольшую HTML-разметку
Переходим к стилизации CSS. Через background-image добавляем изображение, указываем рамки для нашего изображения, центрируем изображение при помощи background-position и задаем background-size :
Ознакомиться подробнее с HTML и CSS можно тут:
Это был первый и самый простой метод по обрезке изображения. Теперь давайте рассмотрим второй пример.
Пример 2

Предположим, у нас есть всё тот же контейнер box внутри которого находится тег img с изображением, которое мы сейчас будем стилизовать.
Далее мы будем стилизовать два элемента: класс box и тег img .
Начнем работу со связкой свойств position: relative для box и для position: absolute для img .
Также разместим наше изображение по центру относительно того объекта, который мы создадим. И используем свойство, которое довольно редко используются: object-fit .
.box < position: relative; overflow:hidden; width:300px; height:300px; >.box img
На мой взгляд, это лучший метод. Он идеально подойдет для блогов, если вы используете изображения для постов совершенно разных пропорций.
Ознакомиться подробнее с HTML и CSS можно тут:
Пример 3

Также создавать обрезку для изображений мы можем в момент, если мы вставляем их в SVG элементы. Для примера возьмем круг. SVG мы можем создать при помощи тегов. Создаем обрамляющий тег svg внутри которого будет находится тег circle и тег pattern . В теге pattern пишем тег image . В нем мы указываем атрибут xlink:href и добавляем изображение. Также добавим атрибуты ширины и высоты. Но на этом не все. Нам потребуется добавить значение fill . Чтобы наша работа считала законченной мы добавим вспомогательный атрибут preserveAspectRatio в тег image , который позволит заполнить наше изображение «от и до» по всему кругу.
Я не могу назвать этот метод универсальным. Зато его можно использовать в исключительных случаях. Например, если мы затронули тему блога, то идеально такой метод мог бы вписаться для аватарки автора который пишет статью.
Ознакомиться подробнее с HTML и CSS можно тут:
Итоги:
Мы разобрали 3 метода обрезки изображения на сайтах: при помощи background-image , используя тег img и связанный с паттерном svg со встраиванием растровых изображений при помощи тега image . Если вы знаете ещё какие-то методы по обрезке изображения при помощи SVG, то делитесь ими в комментариях. Не только мне, но и другим будет полезно узнать о них.
Не забывай задавать свои вопросы по вёрстке или фронтенд-разработке у профессионалов на FrontendHelp в режиме онлайн.
Смотреть видео:
Обрезка изображений в CSS с помощью clip-path
clip-path — очень интересное свойство CSS. Оно позволяет обрезать видимую часть элементов SVG, HTML и изображений.
Определение базовых фигур с помощью clip-path
clip-path позволяет легко вырезать основные фигуры, используя ключевые слова (polygon, ellipse, circle), которые являются частью модуля CSS exclusion.
Многоугольник
Многоугольник — самая гибкая из всех доступных фигур, потому что она позволяет указать любое количество точек, что немного похоже на путь SVG. Предоставляемые точки представляют собой пары координат X и Y, которые принимают любые единицы измерения (например, в пикселях или в процентах). Как мы уже сказали, это самая гибкая фигура, однако также она и самая сложная – вероятно, для ее построения вам придется использовать инструмент определения точек.
Проиллюстрируем это на примере. Сначала идет исходное изображение, а затем – изображение, модифицированное с помощью clip-path, благодаря которому оно примет форму треугольника, затем более сложную формы X и, наконец, форму звезды:
/* Triangle */ .polygon1 < -webkit-clip-path: polygon(50% 0%, 0% 100%, 100% 100%); clip-path: polygon(50% 0%, 0% 100%, 100% 100%); >/* X */ .polygon2 < -webkit-clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%); clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%); >/* Star */ .polygon3
Круг
Круг можно определить при помощи следующего синтаксиса:
circle(radius at posX posY)
Расположение опционально, по умолчанию это 50% 50%. Давайте рассмотрим такой пример:
.circle < -webkit-clip-path: circle(50%); clip-path: circle(50%); >.circle2
Эллипс
Эллипсы определяются при помощи такого синтаксиса:
ellipse(radiusX radiusY at posX posY)
Расположение снова опционально и по умолчанию сводится к 50% 50%. Вот примеры:
.ellipse < -webkit-clip-path: ellipse(50% 35%); clip-path: ellipse(50% 35%); >.ellipse2
Логическая вставка
С помощью логической вставки можно определить внутренний прямоугольник, а все, что снаружи, будет вырезано. Это позволяет легко эффективно обрезать изображения или элементы прямо в браузере. Вы также можете закруглить края прямоугольника с помощью ключевого слова round:
.inset < -webkit-clip-path: inset(20% 25% 20% 10%); clip-path: inset(20% 25% 20% 10%); >.inset2
Анимация и переход
Для создания интересных эффектов с помощью clip-path также можно применять анимацию и переходы. Просто убедитесь, что все шаги вашей анимации содержат одинаковое количество точек.
Следующие правила CSS заставят наше исходное изображение менять форму:
.trigger-btn:hover + img < animation: magic 4s infinite; >@keyframes magic < 0% < -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%); clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%); >20% < -webkit-clip-path: polygon(28% 0, 73% 0, 100% 100%, 0% 100%); clip-path: polygon(28% 0, 73% 0, 100% 100%, 0% 100%); >40% < -webkit-clip-path: polygon(0 0, 100% 72%, 100% 100%, 0 35%); clip-path: polygon(0 0, 100% 72%, 100% 100%, 0 35%); >60% < -webkit-clip-path: polygon(50% 0, 50% 0, 100% 100%, 0% 100%); clip-path: polygon(50% 0, 50% 0, 100% 100%, 0% 100%); >80% < -webkit-clip-path: polygon(0 70%, 100% 0, 100% 32%, 0 100%); clip-path: polygon(0 70%, 100% 0, 100% 32%, 0 100%); >100%
Произвольные формы SVG
Вы также можете определить любую произвольную форму и присвоить ее как значение clip-path. Начать работу можно с такого инструмента, как Sketch, – в нем вы можете создать свою фигуру, а затем скопировать разметку SVG в текстовый редактор. В разметке SVG просто оберните фигуру в элемент clipPath, а затем оберните clipPath в блок defs.
Теперь вы можете применить свою фигуру в качестве значения clip-path, используя ключевое слово url и идентификатор формы SVG:
shape
Итоги
Попробуйте также Clippy – это отличный инструмент, помогающий определить значения для свойства clip-path.
На данный момент свойство clip-path поддерживается 95% браузеров по всему миру. Однако при его использовании следует обязательно включать варианты с префиксом -webkit-clip-path, которые по-прежнему необходимы для Safari.
