브라우저 너비 / 높이가 변경 될 때 CSS를 사용하여 이미지의 크기를 동적으로 조정하려면 어떻게해야합니까?


107

브라우저 창과 함께 이미지 크기를 조정할 수있는 방법이 궁금합니다. 여기 에 지금까지 한 작업이 있습니다 (또는 전체 사이트를 ZIP 파일로 다운로드 ).

이것은 Firefox에서 잘 작동하지만 Chrome에서는 문제가 있습니다. 이미지의 크기가 항상 조정되는 것은 아니며 페이지가로드 될 때 창 크기에 따라 달라집니다.

이것은 Safari에서도 잘 작동하지만 때로는 이미지가 최소 너비 / 높이로로드됩니다. 아마도 이것은 이미지 크기 때문일 수 있지만 확실하지 않습니다. (올바르게로드되면 여러 번 새로 고침하여 버그를 확인하세요.)

이걸 어떻게 더 방탄하게 만들 수 있는지에 대한 아이디어가 있습니까? (자바 스크립트가 필요하다면 저도 함께 살 수 있지만 CSS가 더 좋습니다.)


CSS3 미디어 쿼리 또는 자바 스크립트의 window.onresize 이벤트 핸들러를 사용하세요. w3schools.com/jsref/event_onresize.asp
Shahid

부트 스트랩을 사용하는 경우이 class = "img-thumbnail"과 같은 클래스를 추가하십시오. 그게 전부입니다.
VivekDev

답변:


179

이것은 순수한 CSS로 수행 할 수 있으며 미디어 쿼리도 필요하지 않습니다.

이미지를 유연하게 만들려면 max-width:100%height:auto. 이미지 max-width:100%height:autoIE7에서 작동,하지만 IE8에서 (예, 다른 이상한 IE 버그). 이 문제를 해결하려면 width:auto\9IE8 에 추가해야합니다 .

출처 : http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries

CSS :

img {
    max-width: 100%;
    height: auto;
    width: auto\9; /* ie8 */
}

이미지의 고정 된 최대 너비를 적용하려면 컨테이너 내부에 배치하기 만하면됩니다. 예를 들면 다음과 같습니다.

<div style="max-width:500px;">
    <img src="..." />
</div>

여기에 JSFiddle 예제가 있습니다 . JavaScript가 필요하지 않습니다. 최신 버전의 Chrome, Firefox 및 IE에서 작동합니다 (내가 테스트 한 전부입니다).


Opera 11과 일부 최신 Firefox에서 jsfiddle 링크를 테스트했으며 창이 축소 될 때 이미지 크기를 멋지게 조정했지만 창이 650px 이상으로 커지면 실패합니다
GDR

3
@GDR 이미지가 기본 크기 이상으로 커지는 것을 원하지는 않습니다. 픽셀 화되고보기 흉하게 보일뿐입니다. 더 크게 만들 필요가 있다면 더 큰 이미지로 시작하겠습니다.
Kurt Schindler

좋아요, 저는 이것이이 질문의 요점이라고 잘못 생각했습니다. 죄송합니다.
GDR

2
max-width를 100 %로 설정하고 height를 auto로 설정하면 아무런 효과가 없었습니다. 실제로 컨테이너로 작업했습니다. 이미지를 div로 감싸고 최대 높이 / 너비를 설정 한 다음 이미지 (#div img {})를 너비 100 %, 높이 100 %로 설정합니다.
Mave

1
이건 무슨 마법이야?! 굉장합니다!
Leonardo Wildt

24

2018 년 이후 솔루션 :

뷰포트 관련 단위를 사용하면 고양이 이미지가 있으므로 생활이 더 쉬워집니다.

고양이

이제 우리는 종횡비를 존중하면서이 고양이를 코드에 넣기를 원합니다.

img {
  width: 100%;
  height: auto;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

지금까지는별로 흥미롭지 않지만 cats 너비를 뷰포트의 최대 50 %로 변경하려면 어떻게해야할까요?

img {
  width: 100%;
  height: auto;
  /* Magic! */
  max-width: 50vw;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

동일한 이미지이지만 이제 최대 너비50vw vw (= 뷰포트 너비)로 제한된다는 것은 제공된 숫자에 따라 이미지가 뷰포트의 X 너비가됨을 의미합니다. 이것은 높이에도 적용됩니다.

img {
  width: auto;
  height: 100%;
  max-height: 20vh;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

이것은 이미지의 높이를 뷰포트의 최대 20 %로 제한합니다.


감사! 크기가 다른 이미지가있는 경우 vh 및 vw를 어떻게 결정합니까?
Herman Toothrot

안녕하세요 @HermanToothrot, 뷰포트 단위를 사용하는 동안 종횡비를 유지하고 싶다는 말씀인가요?
roberrrt-s

@Roberrrt는 크기가 다른 몇 개의 이미지와 인라인 블록이 있으며 모든 이미지의 가로 세로 비율을 유지하지만 동일한 높이 또는 너비로 설정하고 싶다고 말합니다.
Herman Toothrot

50vh 또는 역 : 100 % 및 최대 높이 : 어느 폭을 수행
roberrrt-의

@Roberrrt 너비 : 100 %는 큰 영향을 미치지 않는 것 같습니다. 저는 vh를 추측해야합니다. 제 경우 50은 너무 많고 40은 모든 이미지의 높이를 최대화합니다.
Herman Toothrot

11
window.onresize = function(){
    var img = document.getElementById('fullsize');
    img.style.width = "100%";
};

IE에서 onresize이벤트는 모든 픽셀 변경 (너비 또는 높이)에서 발생하므로 성능 문제가있을 수 있습니다. 자바 스크립트의 window.setTimeout ()을 사용하여 몇 밀리 초 동안 이미지 크기 조정을 지연합니다.

http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html


6

resize 속성을 둘 다로 설정합니다. 그런 다음 다음과 같이 너비와 높이를 변경할 수 있습니다.

.classname img{
  resize: both;
  width:50px;
  height:25px;
}

5

jQuery를 사용하고 있습니까?

jQuery 플러그에 대한 빠른 검색을 수행했고이 작업을 수행하는 플러그인이있는 것 같기 때문에이 플러그인을 확인하면 작동합니다.

http://plugins.jquery.com/project/jquery-afterresize

편집하다:

이것은 CSS 솔루션이며 style = "width : 100 %" 를 추가하고 최소한 크롬과 Safari에서 저에게 적합합니다. 나는 ie가 없으므로 거기에서 테스트하고 알려주십시오. 여기에 코드가 있습니다.

            <div id="gallery" style="width: 100%">
                <img src="images/fullsize.jpg" alt="" id="fullsize" />
                <a href="#" id="prev">prev</a>
                <a href="#" id="next">next</a>
            </div>

1
이러한 간단한 문제에는 jQuery가 필요하지 않습니다. 몇 줄의 JS에서 50KB + (전체 라이브러리)를로드하는 것이 왜 유익할까요?

1
확실히, 당신은 완전히 옳 s why I습니다. 그가 jQuery를 사용하고 있는지 묻습니다. 그가 사용한다면 플러그인을 추가하는 것이 좋습니다!
Arthur Neves 2011 년

그래서 JS 없이는 불가능합니까? unstoppablerobotninja.com/search/… 와 같은 간단한 솔루션을 찾았 지만 내 템플릿에서 성공적으로 구현할 수 없었습니다
depi

4

처음에는 다음 html / css를 사용했습니다.

img {
  max-width: 100%;
  height: auto;
  width: auto\9; /* ie8 */
}
<div> 
  <img src="..." />
</div>

그런 다음 다음 과 같이 추가 class="img"했습니다 <div>.

<div class="img">
  <img src="..." />
</div>

그리고 모든 것이 잘 작동하기 시작했습니다.




0

시험

.img{
   width:100vw; /* Matches to the Viewport Width */
   height:auto;
   max-width:100% !important;
}

디스플레이 블록 및 인라인 블록에서만 작동하며, 방금 알아 내려고 노력하면서 시간을 보냈기 때문에 플렉스 항목에는 영향을 미치지 않습니다.

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