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

StackOverflow https://stackoverflow.com/questions/57725

  •  09-06-2019
  •  | 
  •  

Вопрос

Допустим, мне нужен способ отображать только центральные 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).
  • circlecircle(diameter at x-coordinate y-coordinate).
  • ellipseellipse(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, для экспериментов.

Использованная литература:

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

<header class="siteHeader">
  <img src="img" class="siteLogo" />
</header>

Затем вы можете использовать контейнер в качестве маски желаемого размера и окружить изображение отрицательным полем, чтобы переместить его в правильное положение:

.siteHeader{
    width: 50px;
    height: 50px;
    overflow: hidden;
}

.siteHeader .siteLogo{
    margin: -100px;
}

Демо можно посмотреть в этот JSFiddle.

Кажется, работает только в IE>9 и, вероятно, во всех основных версиях всех других браузеров.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top