CSS 이미지 크기, 채우는 방법, 늘리지 않는 방법?


415

이미지가 있는데 특정 너비와 높이를 픽셀 단위로 설정하고 싶습니다

그러나 css ( width:150px; height:100px)를 사용하여 너비와 높이를 설정하면 이미지가 늘어나고보기 흉할 수 있습니다.

방법 기입 CSS를 사용하여 특정 크기로 이미지를, 그리고 스트레칭하지 그것을?

채우기 및 스트레칭 이미지의 예 :

원본 이미지 :

기발한

기지개 된 이미지 :

뻗어

채워진 이미지 :

채우는

제발 상기 채워진 이미지 예에 유의 : 첫째, 화상 150x255 (유지 종횡비)로 조정되고, 그 후, 그 자른 150x100한다.


시도 단지를 설정 width하고 height그에 따라 조정한다
NewInTheBusiness

3
뻗어 이미지. 이것을보십시오 : jsfiddle.net/D7E3E
Mahdi Ghiasi

크기가 조정되지 않은 이미지의 일부가 필요합니다!
알리 벤 메사 우드


1
매우 중요 : 이것은 SEO 목적을 위해 엄청나게 나쁜 습관입니다. 배경 이미지로 사용하는 경우 정상적으로 작동하지만 Google에서 이미지를 찾으려면 배경 이미지 만 있으면 색인이 생성되지 않습니다.
Alex Banman 19 :

답변:


395

이미지를 CSS 배경으로 사용하려면 우아한 솔루션이 있습니다. 간단하게 사용 cover하거나 contain에서 background-sizeCSS3 속성입니다.

.container {
  width: 150px;
  height: 100px;
  background-image: url("http://i.stack.imgur.com/2OrtT.jpg");
  background-size: cover;
  background-repeat: no-repeat;
  background-position: 50% 50%;
}
<div class="container"></div>

하지만 cover당신에게 스케일 업 이미지를 제공합니다 contain당신에게 축소 이미지를 줄 것이다. 둘 다 픽셀 종횡비를 유지합니다.

http://jsfiddle.net/uTHqs/ (표지 사용)

http://jsfiddle.net/HZ2FT/ (포함 사용)

이 방법은 Thomas Fuchs의 빠른 가이드에 따라 Retina 디스플레이에 친숙하다는 장점이 있습니다.

두 속성 모두에 대한 브라우저 지원은 IE6-8을 제외 한다는 점을 언급 할 가치가 있습니다.


1
CSS에서 이미지의 크기를 순수하게 조정할 수 있으므로 큰 이미지를 사용한 다음 미디어 쿼리를 사용하여 각 장치의 픽셀 밀도에 따라 이미지 크기를 줄입니다.
Marcelo De Polli

1
이 경우 배경 위치가 이미지의 왼쪽 상단이 아니라 이미지 중앙의 위치를 ​​나타내는 것으로 보이는 이유를 설명해 주시겠습니까? 배경 크기 : 표지의 결과입니까?
matteo

1
내 이미지를 확장하는 전체 DIV를 포함합니다. 커브 끝이 보이지 않습니다.
SearchForKnowledge

3
무엇입니까 background-repeat: no-repeat;? 이미지가 컨테이너를 덮으면 어쨌든 반복되지 않습니다.
lurkit

3
'배경 위치'도 '중심 센터'로 설정할 수 있습니다. 예 : .container {... 배경 위치 : 중앙 중심; }
Leo Ribeiro

556

css 속성을 사용할 수 있습니다 object-fit.

.cover {
  object-fit: cover;
  width: 50px;
  height: 100px;
}
<img src="http://i.stack.imgur.com/2OrtT.jpg" class="cover" width="242" height="363" />

여기 예를 참조하십시오

IE에 대한 polyfill이 있습니다 : https://github.com/anselmh/object-fit


11
img태그로도 수행 할 수 있다는 점에 흥미가 있습니다 ( background-image위의 답변에 설명 된 방법 뿐만 아니라 ). 감사합니다 :)
Mahdi Ghiasi 2016 년

44
이것을 옵션으로 고려할 때 object-fit 많은 브라우저에서 지원되지 않는 점을 명심하십시오 .
joshreesjones

2
불행히도 background-size내 프로젝트에서 실행 가능한 솔루션은 거의 없습니다. SEO 혜택을받을 가능성이 적고 화면 판독기에 추가 컨텍스트를 제공하려는 이미지에 ALT 태그, 캡션 등을 제공 할 수 없습니다.
Markus

3
이것은 멋지지만 IE 지원은 없습니다. 더 이상 폴리 필이 작동하지 않습니다.
Jake

3
그냥 사용 object-fit: cover;하는 것입니다. 감사합니다
Luka

67

@afonsoduarte에 의해 위의 답변이 향상 되었습니다 ( 허용 되지 않음 ) . 부트 스트랩을
사용하는 경우


세 가지 차이점이 있습니다.

  1. width:100%스타일을 제공 합니다. 부트 스트랩
    을 사용 하고 이미지를 사용 가능한 모든 너비로 늘리려 는 경우에 유용합니다 .

  2. height속성 지정 은 선택 사항이며 필요에 따라 제거 / 유지할 수 있습니다

    .cover {
       object-fit: cover;
       width: 100%;
       /*height: 300px;  optional, you can remove it, but in my case it was good */
    }
  3. 그건 그렇고, 요소 에 heightwidth속성 을 제공 할 필요가 없습니다 image. 스타일에 의해 재정의되기 때문입니다.
    이렇게 작성하면 충분합니다.

    <img class="cover" src="url to img ..."  />

1
정확히 내가 찾던 것.
프랜시스 란 티어

1
키스가 필요해!
진 왕

IE에서 객체 맞춤이 작동하지 않습니까?
bgcode

1
그것은 2020 년, IE를 포기하기에 좋은시기라고 생각합니다
Hakan Fıstık

56

유일한 실제 방법은 이미지 주위에 컨테이너를 가지고 사용하는 것입니다 overflow:hidden.

HTML

<div class="container"><img src="ckk.jpg" /></div>

CSS

.container {
    width: 300px;
    height: 200px;
    display: block;
    position: relative;
    overflow: hidden;
}

.container img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
}

CSS에서 원하는 것을하고 이미지를 중앙에 배치하는 것은 고통 스럽습니다.

var conHeight = $(".container").height();
var imgHeight = $(".container img").height();
var gap = (imgHeight - conHeight) / 2;
$(".container img").css("margin-top", -gap);

http://jsfiddle.net/x86Q7/2/


1
감사. 작동했지만 이미지를 위에서 잘라 냅니다. (이것 : jsfiddle.net/x86Q7 참조 ) 중앙 에서 이미지를 자르는 방법이 없습니까?
Mahdi Ghiasi

1
@MahdiGhiasi : .container img css의 상단 및 왼쪽 속성을 변경하십시오!
알리 벤 메사 우드

margin-top예를 들어 이미지 세트 를 사용할 수 있지만 ( jsfiddle.net/x86Q7/150px 참조 ) 실제 중앙 에서 자르는 방법은 무엇입니까? (jQuery없이?)
Mahdi Ghiasi

2
Ahh 죄송합니다 귀하의 의견을 보지 못했지만 방금 jquery를 추가했습니다 :)
Dominic Green

1
훌륭한 솔루션! 나를 위해 세로 채우기가 가로보다 더 중요했기 때문에 '.container img'클래스에 대해 "너비 : 100 %"를 "높이 : 100 %"로 변경해야했습니다. 감사합니다!
deebs

26

CSS 솔루션 JS 및 배경 이미지 없음 :

방법 1 "여백 자동"(IE8 +-NOT FF!) :

div{
  width:150px; 
  height:100px; 
  position:relative;
  overflow:hidden;
}
div img{
  position:absolute; 
  top:0; 
  bottom:0; 
  margin: auto;
  width:100%;
}
<p>Original:</p>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>

<p>Wrapped:</p>
<div>
  <img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>

http://jsfiddle.net/5xjr05dt/

방법 2 "변환"(IE9 +) :

div{
  width:150px; 
  height:100px; 
  position:relative;
  overflow:hidden;
}

div img{
  position:absolute; 
  width:100%;
  top: 50%;
  -ms-transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  transform: translateY(-50%);
}
<p>Original:</p>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>

<p>Wrapped:</p>
<div>
  <img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>

http://jsfiddle.net/5xjr05dt/1/

방법 2를 사용하여 고정 너비 / 높이 컨테이너에 이미지를 중앙에 배치 할 수 있습니다. 둘 다 넘칠 수 있습니다-이미지가 컨테이너보다 작 으면 여전히 중앙에 위치합니다.

http://jsfiddle.net/5xjr05dt/3/

방법 3 "이중 래퍼"(IE8 +-NOT FF!) :

.outer{
  width:150px; 
  height:100px; 
  margin: 200px auto; /* just for example */
  border: 1px solid red; /* just for example */
  /* overflow: hidden;	*/ /* TURN THIS ON */
  position: relative;
}
.inner { 
    border: 1px solid green; /* just for example */
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto;
    display: table;
    left: 50%;
}
.inner img {
    display: block;
    border: 1px solid blue; /* just for example */
    position: relative;
    right: 50%;
    opacity: .5; /* just for example */
}
<div class="outer">
  <div class="inner">
     <img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
  </div>
</div>

http://jsfiddle.net/5xjr05dt/5/

방법 4 "이중 래퍼 및 이중 이미지"(IE8 +) :

.outer{
  width:150px; 
  height:100px; 
  margin: 200px auto; /* just for example */
  border: 1px solid red; /* just for example */
  /* overflow: hidden;	*/ /* TURN THIS ON */
  position: relative;
}
.inner { 
    border: 1px solid green; /* just for example */
    position: absolute;
    top: 50%;
    bottom: 0;
    display: table;
    left: 50%;
}
.inner .real_image {
    display: block;
    border: 1px solid blue; /* just for example */
    position: absolute;
    bottom: 50%;
    right: 50%;
    opacity: .5; /* just for example */
}

.inner .placeholder_image{
  opacity: 0.1; /* should be 0 */
}
<div class="outer">
  <div class="inner">
    <img class="real_image" src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
    <img class="placeholder_image"  src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
  </div>
</div>

http://jsfiddle.net/5xjr05dt/26/

  • 방법 1은 약간 더 나은 지원을 제공합니다-이미지의 너비 또는 높이를 설정해야합니다!
  • 접두사를 사용하면 방법 2도 괜찮은 지원을합니다 (ie9 이상). 방법 2는 Opera mini를 지원하지 않습니다!
  • 방법 3은 두 개의 래퍼를 사용합니다. 너비와 높이가 오버플로 될 수 있습니다.
  • 방법 4는 이중 이미지 (하나는 자리 표시 자)를 사용하여 추가 대역폭 오버 헤드를 제공하지만 더 나은 크로스 브라우저 지원을 제공합니다.

방법 1과 3이 Firefox에서 작동하지 않는 것 같습니다


이것은 실제로 작동하는 유일한 것입니다 (빼기 js 솔루션). 감사!
Jake

높이나 너비가 넘치도록 제한되어 있지만 흥미로운 해결책입니다.
Jake

1
@Jake-위의 방법 2로 너비와 높이를 오버플로 할 수 있습니다-추가 바이올린으로 업데이트 된 답변을 참조하십시오.
JT Houtenbos

네. 확실히 좋은 대답입니다. 나는 그것으로 좀 더 바보 것입니다. 반응이 필요했던 키보다 큰 이미지의 경우 다소 기발한 것이었지만이를위한 많은 응용 프로그램이 있습니다.
Jake

1
@Jake-Cool-수평 중심 조정을 수행하는 세 번째 방법을 찾았습니다. 수직 중심 조정을 지원하기 위해이 방법을 확장했습니다. 추가 한 내용을 위의 세 번째 방법으로 게시하겠습니다. IE7 + 증거 인 것 같습니다 (아마도 낮습니다). 원래 답변은 다음과 같습니다. stackoverflow.com/questions/3300660/…
JT Houtenbos

10

또 다른 해결책은 이미지를 원하는 너비와 높이의 컨테이너에 넣는 것입니다. 이 방법을 사용하면 이미지를 요소의 배경 이미지로 설정할 필요가 없습니다.

그런 다음 img태그 로이 작업을 수행 하고 요소에 최대 너비와 최대 높이를 설정하면됩니다.

CSS :

.imgContainer {
    display: block;
    width: 150px; 
    height: 100px;
}

.imgContainer img {
    max-width: 100%;
    max-height: 100%;
}

HTML :

<div class='imgContainer'>
    <img src='imagesrc.jpg' />
</div>

이제 컨테이너의 크기를 변경하면 이미지가 경계를 벗어나거나 왜곡되지 않고 최대한 크게 커집니다.

이미지를 세로 및 가로 로 가운데에 맞추려면 컨테이너 CSS를 다음과 같이 변경할 수 있습니다.

.imgContainer {
    display: table-cell;
    width: 150px; 
    height: 100px;
    text-align: center;
    vertical-align: middle;
}

다음은 JS Fiddle입니다. http://jsfiddle.net/9kUYC/2/


결과 크기 중 하나가 항상 100 %를 초과하는 (또는 가장자리의 경우) CSS의 커버와 동일하지 않습니다.
Miroshko

아니요,이 솔루션은 100 % 이상으로 확장되지 않도록합니다. 이는 문제의 일부입니다. 그들은 이미지가 왜곡되거나 원래 크기보다 커지는 것을 원하지 않았습니다.
earl3s

3
문제는 채워진 이미지의 예인 "채우는 방법"이었습니다.
미로 시코

그러나 반응 형 이미지가 필요한 경우 어떻게해야합니까? 특정 너비와 높이를 정의해도 작동하지 않습니다 😕
Ricardo Zea

2
내가 필요한 것입니다. 감사!
니코로드 세 비치

5

jQuery를 사용하여 @Dominic Green의 답변을 바탕으로 다음은 이미지보다 더 넓거나 더 넓은 이미지에 적합 해야하는 솔루션입니다.

http://jsfiddle.net/grZLR/4/

JavaScript를 수행하는보다 우아한 방법이있을 수 있지만 작동합니다.

function myTest() {
  var imgH = $("#my-img").height();
  var imgW = $("#my-img").width();
  if(imgW > imgH) {
    $(".container img").css("height", "100%");
    var conWidth = $(".container").width();
    var imgWidth = $(".container img").width();
    var gap = (imgWidth - conWidth)/2;
    $(".container img").css("margin-left", -gap);
  } else {
    $(".container img").css("width", "100%");
    var conHeight = $(".container").height();
    var imgHeight = $(".container img").height();
    var gap = (imgHeight - conHeight)/2;
    $(".container img").css("margin-top", -gap);
  }
}
myTest();

5
  • CSS 배경을 사용하지 않음
  • 클립 할 때 1div 만
  • 올바른 종횡비를 유지하는 것보다 최소 너비로 크기 조정
  • 중심에서 자르기 (수직 및 수평으로, 상단, 파일 및 변형을 사용하여 조정할 수 있음)

테마 나 무언가를 사용하는 경우에는 img max-width를 100 %로 선언합니다. 당신은 아무것도하지 않아야합니다. 그것을 테스트 :)

https://jsfiddle.net/o63u8sh4/

<p>Original:</p>
<img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>

<p>Wrapped:</p>
<div>
    <img src="http://i.stack.imgur.com/2OrtT.jpg" alt="image"/>
</div>


div{
  width:150px; 
  height:100px; 
  position:relative;
  overflow:hidden;
}
div img{
  min-width:100%;
  min-height:100%;
  height:auto;
  position:relative;
  top:50%;
  left:50%;
  transform:translateY(-50%) translateX(-50%);
}

이것은 이다 내가 찾던 해답.
Marcos Buarque

이것은 내가 오랫동안하고 싶었던 일입니다, 감사합니다;)
보스 COTIGA

4

필 모어 라는 jQuery 플러그인을 빌드하는 데 도움이되었습니다.이 플러그인 background-size: cover은 지원하는 브라우저 를 처리하고 지원하지 않는 브라우저를 지원합니다. 한번보세요!


4

나는이 답변에 꽤 늦었다 고 생각합니다. 어쨌든 이것이 미래에 누군가를 도울 수 있기를 바랍니다. 카드를 각도로 배치하는 데 문제가 있습니다. 이벤트 배열에 카드가 표시됩니다. 이벤트의 이미지 너비가 카드에 비해 큰 경우 이미지를 양면에서 자르고 높이 100 %로 표시해야합니다. 이미지 높이가 길면 이미지 하단 부분이 잘리고 너비가 100 %입니다. 여기 내 순수한 CSS 솔루션이 있습니다.

여기에 이미지 설명을 입력하십시오

HTML :

 <span class="block clear img-card b-b b-light text-center" [ngStyle]="{'background-image' : 'url('+event.image+')'}"></span>

CSS

.img-card {
background-repeat: no-repeat;
background-size: cover;
background-position: 50% 50%;
width: 100%;
overflow: hidden;
}

나는 이것이 어떻게 작동하는지 추측 할 수는 없지만 그렇게합니다. 상대적으로 배치 된 부모 내부에 범위를 지정하려면 범위를 상단 : 0; 오른쪽 : 0; 아래 : 0; 왼쪽 : 0에 절대로 배치해야합니다.
Mike

의견을 보내 주셔서 감사합니다. 친애하는 Mike, 이것이 도움이 되었으면 좋겠습니다. 귀하의 의견으로 답변을 업데이트 하시겠습니까?
Nodirabegimxonoyim

3

다음과 같이 해보십시오 : http://jsfiddle.net/D7E3E/4/

오버플로가있는 컨테이너 사용 : 숨김

편집 : @ 도미닉 그린 이길.


감사. 작동했지만 이미지를 위에서 잘라 냅니다. (이것 : jsfiddle.net/x86Q7 참조 ) 중앙 에서 이미지를 자르는 방법이 없습니까?
Mahdi Ghiasi

CSS와 다소 어려울 수 있습니다, 이것은 내가 가지고 올 수있는 최선입니다 jsfiddle.net/D7E3E/5
woutr_be

예, 올바르게 중앙에 놓으려면 jQuery를 사용해야합니다. 훨씬 쉬울 수 있습니다.
woutr_be

3

이미지를 늘리거나 자르지 않고 이미지를 특정 크기로 채 웁니다.

img{
    width:150px;  //your requirement size
    height:100px; //your requirement size

/*Scale down will take the necessary specified space that is 150px x 100px without stretching the image*/
    object-fit:scale-down;
}

2

전체 화면으로 이미지를 맞추려면 다음을 시도하십시오.

배경 반복 : 라운드;


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.