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

html css image

221743 просмотра

3 ответа

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

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

Автор: Hafthor Источник Размещён: 11.11.2019 05:57

Ответы (3)


105 плюса

Решение

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

Автор: Espo Размещён: 11.09.2008 09:37

157 плюса

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

В дополнение к первоначальному ответу - с некоторым запозданием - я редактирую, чтобы показать использование 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 demo , для экспериментов.

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

Автор: David Thomas Размещён: 09.01.2011 03:00

32 плюса

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

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

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

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

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

Демо можно увидеть в этом JSFiddle .

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

Автор: Vincent Размещён: 22.04.2014 01:21
32x32