Как я могу отобразить только часть изображения в HTML / CSS?

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

Мне известно о зажим в CSS, но, похоже, это работает только при использовании с абсолютным позиционированием.

Используйте спрайт - см. Здесь w3schools.com/css/css_image_sprites.asp

user568837 09.01.2011 17:50

List Apart должен быть в любом списке сайтов для посещения с проблемами HTML / CSS / JS: Вот один из способов создания спрайтов, а вот еще один с использованием JS.

graham.reeds 12.09.2008 01:47
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
148
2
255 973
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Один из способов сделать это - установить изображение, которое вы хотите отображать в качестве фона в контейнере (td, div, span и т. д.), А затем настроить background-position, чтобы получить нужный спрайт.

Чтобы уточнить, вы должны установить ширину и высоту контейнера td, div, span или чего-то еще на 50 пикселей, чтобы это работало.

Paul D. Waite 27.04.2009 12:38

@Espo, это кажется довольно стандартным подходом, но что, если у вас есть изображение спрайта, которое содержит несколько отдельных изображений размером 32x32, и вы хотите отобразить одно из них в div, span и т. д., Которое больше 32x32 .. .setting the background-position больше не работает.

Matthew Layton 30.05.2013 16:01

@ series0ne Вы, наверное, могли бы комбинировать с background-size

Stijn de Witt 19.06.2015 18:13

Как упоминалось в вопросе, есть свойство 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, для экспериментов.

Рекомендации:

  • clip - примечание: устарел.
  • clip-path (MDN).
  • clip-path (W3C).

потрясающая находка, большое спасибо :) К вашему сведению, это не так ограничено, как можно было бы подумать. Если у вас есть контейнер изображения div (id = "img_container") вокруг тега img, просто сделайте положение img_container относительным, а img абсолютным, вы можете обрезать изображение таким образом

FurtiveFelon 25.11.2011 15:00

"position: absolute; (что позор)"

Sanket Sahu 19.03.2014 16:55

Не то, чтобы я в курсе, нет.

David says reinstate Monica 14.10.2014 00:44

clip - это устарел. Более новый clip-path не требует позиционирования

eagor 15.01.2015 15:09

Хорошие новости, "clip: rect" работает в IE8, я только что проверил.

Yevgeniy Afanasyev 09.07.2015 03:51

Хотя clip устарел, многие современные браузеры еще не поддерживают clip-path. developer.mozilla.org/en-US/docs/Web/CSS/clip-path

barrypicker 10.11.2016 00:06

clip устарел и не рекомендуется для использования в MDN developer.mozilla.org/en-US/docs/Web/CSS/clip

Ada Ge 23.06.2019 23:01

@Ada: согласен, цитирую свой ответ: "Чтобы дополнить исходный ответ - несколько с опозданием - я редактирую, чтобы показать использование clip-path, который заменил теперь устаревшее свойство clip."

David says reinstate Monica 24.06.2019 00:14

Обратите внимание, что внешняя область только скрыта, а не обрезана, поэтому она не эквивалентна уменьшенному изображению.

user202729 02.07.2019 14:58

Другой альтернативой является следующее, хотя и не самое чистое, поскольку предполагается, что изображение является единственным элементом в контейнере, например, в этом случае:

<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) и что он работает, когда вы пытаетесь распечатать веб-страницу (фоновые изображения по умолчанию пропускаются. )

Rauni Lillemets 02.12.2015 12:45

Это единственный действительно доступный для всех браузеров метод. У всех других способов есть проблемы. «Клип» был обесценен, и фоновое положение не читается точно во всех браузерах.

Kareem 21.01.2016 17:12

отрегулируйте background-position для перемещения фоновых изображений в разные позиции div

div { 
       background-image: url('image url')
       background-position: 0 -250px; 
    }

Тип: backgroud-image -> background-image. Мне было интересно, почему мой браузер не знает такого свойства CSS, и, наконец, я понял, что это связано с типом.

Eerik Sven Puudist 21.10.2020 02:14

Другие вопросы по теме