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

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

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

Ответы [ 3 ]

151 голосов
/ 09 января 2011

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

В дополнение к оригинальному ответу & ndash; несколько запоздало & ndash; Я редактирую, чтобы показать использование clip-path, которое заменило устаревшее свойство clip.

Свойство clip-path допускает диапазон параметров (больше, чем у исходного clip), из:

  • inset & mdash; прямоугольные / кубовидные формы, определяемые четырьмя значениями «расстояние от» (top right bottom left).
  • circle & mdash; circle(diameter at x-coordinate y-coordinate).
  • ellipse & mdash; ellipse(x-axis-length y-axis-length at x-coordinate y-coordinate).
  • polygon & mdash; определяется серией x / y координат относительно происхождения элемента в верхнем левом углу. Поскольку путь закрывается автоматически, реалистичное минимальное количество точек для многоугольника должно равняться трем, любое меньшее (два) это линия или (один) это точка: polygon(x-coordinate1 y-coordinate1, x-coordinate2 y-coordinate2, x-coordinate3 y-coordinate3, [etc...]).
  • url & mdash; это может быть либо локальный 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 , для экспериментов.

Ссылки:

100 голосов
/ 12 сентября 2008

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

27 голосов
/ 22 апреля 2014

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

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

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

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

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

Демонстрацию можно увидеть в этом JSFiddle .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...