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).
  • circlecircle(diameter at x-coordinate y-coordinate).
  • ellipseellipse(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.