Допустим, мне нужен способ отображать только центральную часть изображения размером 50 x 50 пикселей размером 250 x 250 пикселей в HTML. Как мне это сделать. Кроме того, есть ли способ сделать это для ссылок css: url ()?
Мне известно о зажим в CSS, но, похоже, это работает только при использовании с абсолютным позиционированием.
List Apart должен быть в любом списке сайтов для посещения с проблемами HTML / CSS / JS: Вот один из способов создания спрайтов, а вот еще один с использованием JS.






Один из способов сделать это - установить изображение, которое вы хотите отображать в качестве фона в контейнере (td, div, span и т. д.), А затем настроить background-position, чтобы получить нужный спрайт.
Чтобы уточнить, вы должны установить ширину и высоту контейнера td, div, span или чего-то еще на 50 пикселей, чтобы это работало.
@Espo, это кажется довольно стандартным подходом, но что, если у вас есть изображение спрайта, которое содержит несколько отдельных изображений размером 32x32, и вы хотите отобразить одно из них в div, span и т. д., Которое больше 32x32 .. .setting the background-position больше не работает.
Как упоминалось в вопросе, есть свойство css clip, хотя делает требует, чтобы обрезанный элемент был 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, для экспериментов.
Рекомендации:
потрясающая находка, большое спасибо :) К вашему сведению, это не так ограничено, как можно было бы подумать. Если у вас есть контейнер изображения div (id = "img_container") вокруг тега img, просто сделайте положение img_container относительным, а img абсолютным, вы можете обрезать изображение таким образом
"position: absolute; (что позор)"
Не то, чтобы я в курсе, нет.
clip - это устарел. Более новый clip-path не требует позиционирования
Хорошие новости, "clip: rect" работает в IE8, я только что проверил.
Хотя clip устарел, многие современные браузеры еще не поддерживают clip-path. developer.mozilla.org/en-US/docs/Web/CSS/clip-path
clip устарел и не рекомендуется для использования в MDN developer.mozilla.org/en-US/docs/Web/CSS/clip
@Ada: согласен, цитирую свой ответ: "Чтобы дополнить исходный ответ - несколько с опозданием - я редактирую, чтобы показать использование clip-path, который заменил теперь устаревшее свойство clip."
Обратите внимание, что внешняя область только скрыта, а не обрезана, поэтому она не эквивалентна уменьшенному изображению.
Другой альтернативой является следующее, хотя и не самое чистое, поскольку предполагается, что изображение является единственным элементом в контейнере, например, в этом случае:
<header class = "siteHeader">
<img src = "img" class = "siteLogo" />
</header>
Затем вы можете использовать контейнер в качестве маски желаемого размера и окружить изображение отрицательным полем, чтобы переместить его в правильное положение:
.siteHeader{
width: 50px;
height: 50px;
overflow: hidden;
}
.siteHeader .siteLogo{
margin: -100px;
}
Демку можно увидеть в этот JSFiddle.
Кажется, работает только в IE> 9 и, вероятно, во всех значимых версиях всех других браузеров.
Хотя это бит-хакерство, у него есть положительная сторона, заключающаяся в том, что это работает во всех браузерах (clip устарело, а clip-path не работает в IE) и что он работает, когда вы пытаетесь распечатать веб-страницу (фоновые изображения по умолчанию пропускаются. )
Это единственный действительно доступный для всех браузеров метод. У всех других способов есть проблемы. «Клип» был обесценен, и фоновое положение не читается точно во всех браузерах.
отрегулируйте background-position для перемещения фоновых изображений в разные позиции div
div {
background-image: url('image url')
background-position: 0 -250px;
}
Тип: backgroud-image -> background-image. Мне было интересно, почему мой браузер не знает такого свойства CSS, и, наконец, я понял, что это связано с типом.
Используйте спрайт - см. Здесь w3schools.com/css/css_image_sprites.asp