HTML / CSS에서 이미지의 일부만 표시하려면 어떻게해야합니까?


140

HTML에서 250x250px 인 이미지의 중앙 50x50px 만 표시하는 방법을 원한다고 가정 해 봅시다. 어떻게해야합니까 또한 css : url () 참조에 대해 이것을 수행하는 방법이 있습니까?

CSS 의 클립 을 알고 있지만 절대 위치 지정과 함께 사용할 때만 작동하는 것 같습니다.


목록이 외에도 HTML / CSS / JS 문제와 함께 방문하는 사이트의 anyones에 목록에 있어야합니다 : 여기에 스프라이트를 수행하는 하나의 방법 , JS를 사용하여 다른이의 여기 .
— graham.reeds

1
스프라이트 사용-여기를 참조하십시오 w3schools.com/css/css_image_sprites.asp

답변:


116

이를 수행하는 한 가지 방법은 컨테이너에 배경으로 표시하려는 이미지 (td, div, span 등)를 설정 한 다음 배경 위치를 조정하여 원하는 스프라이트를 얻는 것입니다.


1
명확히하기 위해 컨테이너의 너비와 높이를 td, div, span 또는 50px로 설정 하여이 작업을 수행합니다.
— Paul D. Waite

7
@Espo, 이것은 상당히 표준적인 접근 방법 인 것처럼 보이지만 32x32 크기의 여러 개별 이미지가 포함 된 스프라이트 이미지가 있고 32x32보다 큰 div, span 등에서 이들 중 하나를 표시하려면 어떻게해야합니까? . 배경 위치 설정이 더 이상 작동하지 않습니다.
— Matthew Layton

2
@ series0ne 아마도 다음과 결합 할 수 있습니다background-size
— Stijn de Witt

163

질문에 언급 된 바와 같이, 존재 clip는 비록 CSS 속성은 않는 요소가 클리핑되는 것이 요구된다 position: absolute;(A 수치이다)

.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— 직사각형 / 입방체 모양으로, 'distance-from'으로 4 개의 값으로 정의됩니다 (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좌표로 정의됩니다 . 경로가 자동으로 닫히기 때문에 다각형의 실제 최소 포인트 수는 3 개 여야합니다 (2 개) polygon(x-coordinate1 y-coordinate1, x-coordinate2 y-coordinate2, x-coordinate3 y-coordinate3, [etc...]).
  • url — 이것은 CSS ID 선택기를 사용하는 로컬 URL이거나 SVG를 식별하기 위해 외부 파일의 URL (파일 경로를 사용하는) 일 수 있습니다. 그들의 이익이나 경고에 대한 통찰력을 제공 할 수 없습니다.

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 데모 .

참고 문헌 :


14
놀라운 발견, 감사합니다. :) 단지 참고로, 생각만큼 제한적이지는 않습니다. img 태그 주위에 이미지 컨테이너 div (id = "img_container")가있는 경우 img_container 위치를 상대적으로 만들고 img 절대적으로 만들면 이미지를 그와 같은 방식으로 클리핑 할 수 있습니다
— FurtiveFelon

"위치 : 절대; (부끄러운)"
— Sanket Sahu

내가 아는 것은 아닙니다.
— 다윗은 분석 재개 모니카 말한다

6
clip되어 사용되지 . 최신 clip-path위치 지정이 필요하지 않습니다
— eagor

3
클립은 더 이상 사용되지 않지만 많은 최신 브라우저는 아직 클립 경로를 지원하지 않습니다. developer.mozilla.org/en-US/docs/Web/CSS/clip-path
— barrypicker 21시 06 분

37

이 경우와 같이 이미지가 컨테이너의 유일한 요소라고 가정 할 때 가장 깨끗하지는 않지만 다른 대안은 다음과 같습니다.

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

그런 다음 컨테이너를 원하는 크기의 마스크로 사용하고 이미지를 음의 여백으로 둘러 싸서 올바른 위치로 이동할 수 있습니다.

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

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

이 JSFiddle 에서 데모를 볼 수 있습니다 .

IE> 9 및 다른 모든 브라우저의 모든 중요한 버전에서만 작동하는 것 같습니다.


2
그것은 비꼬는 해킹이지만, 모든 브라우저에서 작동하고 (클립은 더 이상 사용되지 않으며 클립 경로는 IE에서 작동하지 않음) 웹 페이지를 인쇄하려고 할 때 작동합니다 (배경 이미지는 기본적으로 건너 뜁니다) )
— Rauni Lillemets

이것이 유일한 브라우저 방법입니다. 다른 모든 방법에는 문제가 있습니다. "클립"은 감가 상각되었으며 모든 브라우저에서 백그라운드 위치를 정확하게 읽을 수는 없습니다.
— Kareem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.