CSS를 사용하여 이미지 크기를 비례 적으로 변경합니까?


107

모든 이미지가 동일한 높이와 너비로 나타나도록 축소판 갤러리를 구성하기 위해 며칠 동안 노력해 왔습니다. 그러나 Css 코드를 다음과 같이 변경하면

max-height: 150px;
max-width: 200px;
width: 120px;
height: 120px;

모두 같은 크기의 이미지를 얻었지만 가로 세로 비율이 늘어나서 이미지가 망가집니다. 대신 이미지가 아닌 이미지 컨테이너의 크기를 조정하는 방법이 없습니까? 가로 세로 비율을 유지할 수 있습니다. 그러나 여전히 이미지 크기를 조정하십시오. (이미지의 일부를 잘라도 괜찮습니다.)

미리 감사드립니다!

답변:


184

모든 이미지의 비율이 같지 않으면 CSS 크기 조정과 관련된 알려진 문제입니다. CSS를 통해이 작업을 수행 할 방법이 없습니다.

가장 좋은 방법은 컨테이너를 가지고 이미지의 크기 중 하나 (항상 동일)의 크기를 조정하는 것입니다. 내 예에서는 너비를 조정했습니다.

컨테이너에 지정된 크기 (내 예에서는 너비)가있는 경우 이미지에 너비를 100 %로 지정하면 컨테이너의 전체 너비가됩니다. auto높이에서 이미지가 새로운 폭과 높이가 비례 할 것이다.

전의:

HTML :

<div class="container">
<img src="something.png" />
</div>

<div class="container">
<img src="something2.png" />
</div>

CSS :

.container {
    width: 200px;
    height: 120px;
}

/* resize images */
.container img {
    width: 100%;
    height: auto;
}

41

한쪽 (예 : 높이)을 고정하고 다른 쪽을로 설정해야합니다 auto.

 height: 120px;
 width: auto;

한 면만 기준으로 이미지 크기를 조정합니다. 이미지 자르기가 허용되는 경우

overflow: hidden; 

그렇지 않으면 크기를 초과하는 모든 항목을 잘라냅니다.


나는 이것을 시도했지만 여전히 모든 크기와 모양이 다른 이미지를 제공합니다 갤러리가 이렇게 균일하기를 원합니다. [] [] [] [] [] [] [] [] []
Beaniie

2
위의 두 가지 조합을 사용합니다. 높이를 숫자로 설정하고 (크기를 유지하기 위해 자동 너비 사용), overflow: hidden초과 부분을 자르기 위해 부모를 특정 너비로 ​​제한
Nick Andriopoulos 2013 년

25

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

<!doctype html>
<html>

<head>
  <meta charset='utf-8'>
  <style>
    .holder {
      display: inline;
    }
    .holder img {
      max-height: 200px;
      max-width: 200px;
      object-fit: cover;
    }
  </style>
</head>

<body>
  <div class='holder'>
    <img src='meld.png'>
  </div>
  <div class='holder'>
    <img src='twiddla.png'>
  </div>
  <div class='holder'>
    <img src='meld.png'>
  </div>
</body>

</html>

그러나 컨테이너를 늘리지 않기 때문에 정확한 대답은 아니지만 갤러리처럼 작동하고 img자체 스타일을 유지할 수 있습니다 .

이 솔루션의 또 다른 단점은 css3 속성에 대한 지원이 부족하다는 것입니다. 자세한 내용은 http://www.steveworkman.com/html5-2/javascript/2012/css3-object-fit-polyfill/에서 확인할 수 있습니다 . jQuery 솔루션도 거기에서 찾을 수 있습니다.


고마워, 좋은 해결책. :)
Bibhu 2013-08-20

이것은 오페라 ATM에서만 지원되는 속성으로 대답하는 것이 다소 이상합니다! caniuse.com/object-fit
사이먼 Dragsbæk

4
@Simon, 감사합니다. 나는 속성이 모든 곳에서 지원 될지 모른다고 언급했지만, 그렇지 않더라도 그것을 대체 하는 대안 을 위해 구글의 출발점으로 사용할 수 있습니다 . 게시하는 또 다른 이유는 브라우저가 나날이 나아지는 동안 답변이 일정 시간 동안 유지 될 것이기 때문에 가까운 장래에 이것을 목표로 대답했습니다 .
dmitry_romanov 2013

1
몇 년 후이 페이지에 와서이 '미래'답을 찾게되어 기뻤습니다!
petzi

8

이미지를 조정 / 유연하게 만들려면 다음을 사용할 수 있습니다.

/* fit images to container */
.container img {
    max-width: 100%;
    height: auto;
}

5

예를 들어 홀더에 배경으로 넣으십시오.

<div style="background:url(path/to/image/myimage.jpg) center center; width:120px; height:120px;">
&nbsp;
</div>

이렇게하면 초과 이미지를 잘라내는 120x120 div 안에 이미지가 중앙에 배치됩니다.


2

이미지를 늘리지 않으려면 오버플로없이 div 컨테이너에 넣고 필요한 경우 여백을 조정하여 가운데에 맞 춥니 다.

  1. 이미지가 잘리지 않습니다.
  2. 종횡비도 동일하게 유지됩니다.

HTML :

<div id="app">
    <div id="container">
      <img src="#" alt="something">
    </div>
    <div id="container">
      <img src="#" alt="something">
    </div>
    <div id="container">
      <img src="#" alt="something">
    </div>
</div>

CSS :

div#container {
    height: 200px;
    width: 200px;
    border: 1px solid black;
    margin: 4px;
}
img {
    max-width: 100%;
    max-height: 100%;
    display: block;
    margin: 0 auto;
}


-1

spect ratio를 알고 있다면 padding-bottom과 백분율을 사용하여 diff에 따라 hight를 설정할 수 있습니다.

<div>
   <div style="padding-bottom: 33%;">
      i have 33% height of my parents width
   </div>
</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.