Как я могу отобразить только часть изображения в HTML/CSS?
Вопрос
Допустим, мне нужен способ отображать только центральные 50x50 пикселей изображения, размер которого в HTML составляет 250x250 пикселей.Как мне это сделать.Кроме того, есть ли способ сделать это для ссылок css:url()?
я знаю клип в CSS, но, похоже, это работает только при использовании с абсолютным позиционированием.
Решение
Один из способов сделать это — установить изображение, которое вы хотите отображать, в качестве фона в контейнере (td, div, span и т. д.), а затем настроить положение фона, чтобы получить нужный спрайт.
Другие советы
Хотя вы уже приняли ответ, я просто добавлю, что есть (несколько малоизвестный) clip
css, хотя оно делает требуют, чтобы обрезаемый элемент был position: absolute;
(что обидно):
.container {
position: relative;
}
#clip {
position: absolute;
clip: rect(0, 100px, 200px, 0);
/* clip: shape(top, right, bottom, left); NB 'rect' is the only available option */
}
<div class="container">
<img src="http://lorempixel.com/200/200/nightlife/3" />
</div>
<div class="container">
<img id="clip" src="http://lorempixel.com/200/200/nightlife/3" />
</div>
Демо-версия JS Fiddle, для экспериментов.
Чтобы дополнить первоначальный ответ – несколько запоздало – я редактирую, чтобы показать использование clip-path
, который заменил ныне устаревший clip
свойство.
А clip-path
свойство допускает ряд опций (больше, чем исходный clip
), из:
inset
— прямоугольные/кубовидные формы, определяемые четырьмя значениями «расстояние от»(top right bottom left)
.circle
—circle(diameter at x-coordinate y-coordinate)
.ellipse
—ellipse(x-axis-length y-axis-length at x-coordinate y-coordinate)
.polygon
- определяется рядомx
/y
координаты относительно начала координат верхнего левого угла элемента.Поскольку путь закрывается автоматически, реалистичное минимальное количество точек для многоугольника должно составлять три, любое меньшее количество (две) — это линия или (одна) — точка:polygon(x-coordinate1 y-coordinate1, x-coordinate2 y-coordinate2, x-coordinate3 y-coordinate3, [etc...])
.url
— это может быть либо локальный URL-адрес (с использованием селектора идентификаторов CSS), либо URL-адрес внешнего файла (с использованием пути к файлу) для идентификации SVG, хотя я не экспериментировал ни с тем, ни с другим (пока), поэтому я не могут предложить никакого понимания их преимуществ или предостережений.
div.container {
display: inline-block;
}
#rectangular {
-webkit-clip-path: inset(30px 10px 30px 10px);
clip-path: inset(30px 10px 30px 10px);
}
#circle {
-webkit-clip-path: circle(75px at 50% 50%);
clip-path: circle(75px at 50% 50%)
}
#ellipse {
-webkit-clip-path: ellipse(75px 50px at 50% 50%);
clip-path: ellipse(75px 50px at 50% 50%);
}
#polygon {
-webkit-clip-path: polygon(50% 0, 100% 38%, 81% 100%, 19% 100%, 0 38%);
clip-path: polygon(50% 0, 100% 38%, 81% 100%, 19% 100%, 0 38%);
}
<div class="container">
<img id="control" src="http://lorempixel.com/150/150/people/1" />
</div>
<div class="container">
<img id="rectangular" src="http://lorempixel.com/150/150/people/1" />
</div>
<div class="container">
<img id="circle" src="http://lorempixel.com/150/150/people/1" />
</div>
<div class="container">
<img id="ellipse" src="http://lorempixel.com/150/150/people/1" />
</div>
<div class="container">
<img id="polygon" src="http://lorempixel.com/150/150/people/1" />
</div>
Демо-версия JS Fiddle, для экспериментов.
Использованная литература:
- примечание: устарел.clip
clip-path
(МДН).clip-path
(W3C).
Другой альтернативой является следующий, хотя и не самый чистый, поскольку он предполагает, что изображение является единственным элементом в контейнере, как в этом случае:
<header class="siteHeader">
<img src="img" class="siteLogo" />
</header>
Затем вы можете использовать контейнер в качестве маски желаемого размера и окружить изображение отрицательным полем, чтобы переместить его в правильное положение:
.siteHeader{
width: 50px;
height: 50px;
overflow: hidden;
}
.siteHeader .siteLogo{
margin: -100px;
}
Демо можно посмотреть в этот JSFiddle.
Кажется, работает только в IE>9 и, вероятно, во всех основных версиях всех других браузеров.