div 안에 이미지 (img)를 맞추고 종횡비를 유지하려면 어떻게합니까?


136

48x48 div가 있고 그 안에 img 요소가 있습니다. 비율이 유지되는 동안 html과 CSS를 사용하여 달성 할 수 있습니까?

답변:


70

CSS를 작성할 때 이미지의 크기를 모르는 경우 자르기를 방지하기 위해 JavaScript가 필요합니다.

HTML 및 JavaScript

<div id="container">
    <img src="something.jpg" alt="" />
</div>

<script type="text/javascript">
(function() {

var img = document.getElementById('container').firstChild;
img.onload = function() {
    if(img.height > img.width) {
        img.height = '100%';
        img.width = 'auto';
    }
};

}());
</script>

CSS

#container {
   width: 48px;
   height: 48px;
}

#container img {
   width: 100%;
}

JavaScript 라이브러리를 사용하는 경우이를 활용할 수 있습니다.


2
Michael의 대답은 훨씬 간단하며 Javascript를 사용하지 않습니다. 브라우저 호환성에 대해서는 모르겠습니다.
weberc2 2016 년

3
아니요, Michael의 답변은 이미지가 div보다 큰 한 작동합니다. 이미지가 이미지 크기와 관련하여 div를 채우길 원한다면 (그리고 미리 이미지 크기를 모르는 경우) 그렇게 할 수 있습니다.
레미 데이비드

2
최대 높이 : 100 %를 사용할 수 없습니다. 최대 폭 : 100 %; 최소 폭 : 100 %; 최소 높이 : 100 %와 같은 결과를 얻습니까? 정직한 질문.
Daniel Casserly

아니요, 너비와 높이를 100 %로 설정하면 이미지 종횡비가 변경됩니다.
gztomas

브라우저에 이미지가 캐시 될 때 onload가 호출되지 않으므로 이미지가 처음로드 될 때만 작동합니다.
Redtopia

314

max-height:100%; max-width:100%;div 내부의 이미지에 사용하십시오 .


4
@ZoveGames 비 JS 브라우저? 2010 년 Yahoo 통계는 평균 1.3 %를 보여줍니다. 나는 그것을 가정하는 것이 안전하다고 생각합니다. 아마 오늘 더 낮을 것입니다. b. programmers.stackexchange.com/questions/26179/…
EasyCo

5
그것은 나를 위해 작동하지 않습니다 ... 그것은 이미지를 100 % 자체 크기로 만듭니다 (예 : 실제로 300px 너비의 이미지의 경우 300px 너비).
Tomáš Zato-복원 모니카

1
이로 인해 발생하는 끔찍한 Chrome-on-Windows 관련 버그가 있습니다. 내가 가지고있는 특정 부드러운 스크롤 플러그인과의 나쁜 상호 작용. 마우스가 overflow:scroll큰 이미지가 있는 div 위에 있어도 본문을 스크롤하려고 시도 합니다. 궁금한. 더 이상한 : Max의 솔루션이 실제로 해결합니다. 나는 CSS에 상당히 빠져있다. 강력하고 시원했습니다. 이제 구현은 버그 불일치 후에 버그가 일치하지 않습니다.
Steven Lu

21
이미지를 축소 할 때만 작동합니다. 더 큰 컨테이너에 작은 이미지를 넣으려면 작동하지 않습니다.
Yossi Shasho

2
이미지의 원래 종횡비를 유지하지 않습니다.
Ĭsααc t ի ε βöss

78

불행히도 max-width + max-height는 내 작업을 완전히 다루지 못합니다 ... 그래서 다른 해결책을 찾았습니다.

크기 조절 중에 이미지 비율을 저장하기 위해object-fit CSS3 속성을 사용할 수도 있습니다 .

유용한 기사 : CSS3로 이미지 종횡비 제어

img {
    width: 100%; /* or any custom size */
    height: 100%; 
    object-fit: contain;
}

나쁜 소식 : IE는 지원되지 않음 ( 사용 가능 )


6
답으로 표시해야합니다. "객체 맞춤"이 완벽하게 작동했습니다.
Ĭsαα t tεss βöss

이상하게도 8.0에 대한 지원이 iOS 8.1에 도입 된 것 같습니다.
ray

2
object-fit: cover; 나를 위해 일했다. 여기 : stackoverflow.com/questions/9071830/…
Deke

1
이미지를 중앙이 아닌 왼쪽 상단에 위치 시키려면 객체 위치 0 0도 사용해야합니다.
Chris Rae

이것은 이미지 종횡비를 유지하면서 화면을 채우는 반응 형 이미지 배경을 만드는 데 도움이 된 유일한 대답입니다.
Ray Li

39

CSS 만 사용 :

div > img {
  width: auto;
  height : auto;
  max-height: 100%;
  max-width: 100%;
}

확장되지
않음

17

HTML

<div>
    <img src="something.jpg" alt="" />
</div>

CSS

div {
   width: 48px;
   height: 48px;
}

div img {
   display: block;
   width: 100%;
}

이렇게하면 이미지가 확장되어 부모를 채우고 divCSS 에서 크기가 설정됩니다 .


2
추가하지 않으면 height: 100%이미지 비율이 왜곡됩니다. OP는 비율을 유지하려고합니다.
casablanca

OP가 무엇을 의미하는지 잘 모르겠지만 비율을 올바르게 유지하지 않습니까?
Trufa

비율을 유지하려면 어떻게해야합니까? 높이를 삭제하면 100 % 이미지가 잘립니다.
Bin Chen

7

이 작업을 수행하는 데 많은 문제가 있었고, 찾은 모든 단일 솔루션이 작동하지 않는 것 같습니다.

나는 div 디스플레이를 flex로 설정해야한다는 것을 깨달았으므로 기본적으로 이것이 내 CSS입니다.

div{
display: flex;
}

div img{ 
max-height: 100%;
max-width: 100%;
}

내 이미지는 61 크롬 버전에서이 솔루션을 왜곡
예브게니 Afanasyev

div에 최대 높이 / 높이 또는 너비가 설정되어 이미지 왜곡이 발생했을 수 있습니다.
Bartho Bernsmann

당신이 당신의 너비와 높이 설정되어 있기 때문에 정확하게 나의 점은 .. 이미지가 <div 클래스를 "W"=> 왜곡
Bartho Bernsmann

예를 들어 .. 이미지 CSS와 같은 것을 찾고 있다고 생각합니다. height : auto; 폭 : 100 %;
Bartho Bernsmann

작업은 이미지를 div에 맞추는 것이 었습니다 .div는 크기가 있고 이미지의 가로 세로 비율 만 있음을 의미합니다. 높이를 어떤 값으로 설정해야합니다. 그렇지 않으면 질문 조건뿐만 아니라 이미지가 왜곡됩니다. JS 바이올린을 살펴보고 작동하도록 필요한 것을 변경하십시오. 감사.
Yevgeniy Afanasyev

6

CSS를 사용해보십시오 :

img {
  object-fit: cover;
  height: 48px;
}

3

나를 위해 다음 CSS가 작동했습니다 (Chrome, Firefox 및 Safari에서 테스트 됨).

함께 작동하는 여러 가지가 있습니다.

  • max-height: 100%;, max-width: 100%;height: auto;, width: auto;종횡비를 유지하면서 제 100 %에 도달 치수 중하도록 IMG 스케일을
  • position: relative;용기와 position: absolute;어린이 의 용기 안에있는 img의 왼쪽 위 모서리 top: 50%;와 함께left: 50%;
  • transform: translate(-50%, -50%); img를 왼쪽과 위쪽으로 반으로 이동시켜 컨테이너의 img를 중앙에 위치시킵니다.

CSS :

.container {
    height: 48px;
    width: 48px;

    position: relative;
}

.container > img {
    max-height: 100%;
    max-width: 100%;
    height: auto;
    width: auto;

    position: absolute;
    top: 50%;
    left: 50%;

    transform: translate(-50%, -50%);
}

1

사진을 배경 이미지로 설정하면 크기와 배치를보다 세밀하게 제어 할 수 있으며 img 태그는 다른 용도로 사용됩니다 ...

아래에서 div를 사진과 동일한 종횡비로 만들려면 placeholder.png는 photo.jpg와 동일한 종횡비를 가진 작은 투명 이미지입니다. 사진이 정사각형이면 1px x 1px 자리 표시 자이고 사진이 비디오 썸네일이면 16x9 자리 표시 자 등입니다.

질문과 관련하여 1x1 자리 표시자를 사용하여 div의 제곱 비율 background-size을 유지하고 배경 이미지를 사용 하여 사진의 종횡비를 유지하십시오.

내가 사용하는 background-position: center center;사진이 사업부의 중앙 수 있도록. (가로 세로 가운데 또는 아래쪽에 사진을 정렬하면 img 태그에있는 사진이보기 흉하게 나타납니다.)

div {
    background: url(photo.jpg) center center no-repeat;
    background-size: contain;
    width: 48px; // or a % in responsive layout
}
img {
    width: 100%;
}

<div><img src="placeholder.png"/></div>

추가 http 요청을 피하려면 자리 표시 자 이미지를 data : URL로 변환하십시오 .

<img src="data:image/png;base64,..."/>

0

최신 버전, 즉 Bootstrap v4에 "img-fluid" 클래스를 사용할 수 있습니다 .

Bootstrap v3 과 같은 이전 버전에는 "img-responsive" 클래스를 사용할 수 있습니다 .

사용법 :-

img 태그 :-

클래스 = "img-fluid"

src = "..."


0

다음은 모든 JavaScript 접근 방식입니다. 이미지가 올바르게 맞을 때까지 이미지 크기가 점차 작아집니다. 실패 할 때마다 축소 할 정도를 선택합니다. 이 예제는 실패 할 때마다 10 % 씩 축소합니다.

let fit = function (el, w, h, percentage, step)
{
    let newH = h;
    let newW = w;

    // fail safe
    if (percentage < 0 || step < 0) return { h: h, w: w };
    if (h > w)
    {
        newH = el.height() * percentage;
        newW = (w / h) * newH;
        if (newW > el.width())
        {
            return fit(el, w, h, percentage - step, step);
        }
    }
    else
    {
        newW = el.width() * percentage;
        newH = (h / w) * newW;
        if (newH > el.height())
        {
            return fit(el, w, h, percentage - step, step);
        }
    }

    return { h: newH, w: newW };
};

img.bind('load', function ()
{
    let h = img.height();
    let w = img.width();
    let newFit = fit($('<img-wrapper-selector>'), w, h, 1, 0.1);

    img.width(newFit.w);
    img.height(newFit.h);
});

자유롭게 복사하여 붙여 넣으십시오.


0

나를 위해 일한 것은 다음과 같습니다.

<div style='display: inline-flex; width: 80px; height: 80px;'>
<img style='max-width: 100%; max-height: 100%' src='image file'>
</div>

이미지가 div 외부로 나가지 않도록 인라인 플렉스가 필요했습니다.

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