이미지를 늘리지 않고 너비와 높이를 설정하는 방법은 무엇입니까?


87

만약 내가 가지고 있다면:

#logo {
    width: 400px;
    height: 200px;
}

그때

<img id="logo" src="logo.jpg"/>

그 공간을 채우기 위해 늘어납니다. 이미지가 같은 크기로 유지되기를 원하지만 DOM에서 그 정도의 공간을 차지합니다. 캡슐화 <div>또는 추가해야 <span>합니까? 스타일링을 위해 마크 업을 추가하는 것이 싫습니다.


아직 Stack Overflow를 사용 중이라면 답변 업데이트를 고려 하시겠습니까?
mikemaccana

답변:


116

예, 캡슐화 div가 필요합니다.

<div id="logo"><img src="logo.jpg"></div>

다음과 같이

#logo { height: 100px; width: 200px; overflow: hidden; }

다른 솔루션 (패딩, 여백)은 더 지루하지만 (이미지의 크기를 기반으로 올바른 값을 계산해야한다는 점에서) 컨테이너가 이미지보다 작을 수 있도록 효과적으로 허용하지 않습니다.

또한 위의 내용은 다른 레이아웃에 대해 훨씬 더 쉽게 적용 할 수 있습니다. 예를 들어 오른쪽 하단에 이미지를 원하는 경우 :

#logo { position: relative; height: 100px; width: 200px; }
#logo img { position: absolute; right: 0; bottom: 0; }

5
<div> 태그를 <figure>로 바꿀 수 있습니다 : 의미를 추가하고 필요한 경우 캡션 (<figcaption>)을 제공 할 수 있습니다. developer.mozilla.org/en-US/docs/Web/HTML/Element/figure
Mateus Leon

또한 브랜딩 용인 경우 웹 사이트 프레젠테이션에서 <h1> (인덱스 인 경우) 또는 <p> (기타 인 경우)를 사용하고 <img>에 제목 및 alt 속성을 적용하여 SEO 친화적 인 마크 업을 추가 할 수 있습니다. . div와 같은 블록 레벨 요소이기도하며 자르기 기능에 대한 래퍼가 될 수 있습니다.
Mateus Leon

3
나는 Cletus가 웹 개발자라는 것을 전혀 몰랐습니다. Amazing
Piyin


28

div의 배경으로 이미지를로드합니다.

대신에:

<img id='logo' src='picture.jpg'>

하다

<div id='logo' style='background:url(picture.jpg)'></div>

모든 브라우저는 맞지 않는 이미지 부분을 자릅니다.
이는 오버플로가 숨겨진 요소를 래핑하는 것보다 몇 가지 장점이 있습니다.

  1. 추가 마크 업이 없습니다. div는 단순히 img를 대체합니다.
  2. 이미지를 쉽게 중앙에 배치하거나 다른 오프셋으로 설정할 수 있습니다. 예.url(pic) center top;
  3. 충분히 작을 때 이미지를 반복하십시오. (좋아, 왜 그걸 원하는지 모르겠어)
  4. 동일한 명령문에서 bg 색상을 설정하고 동일한 이미지를 여러 요소에 쉽게 적용하고 bg 이미지에 적용되는 모든 것을 적용하십시오.

업데이트 :이 대답은 개체 맞춤 이전의 것입니다. 이제 아마도 object-fit / object-position을 사용해야합니다.

이전 브라우저, 추가 속성 (예 : background-repeat) 및 엣지 케이스 (예 : 플렉스 박스 및 개체 위치가있는 Chrome 버그 및 그리드 + 자동 높이 + 개체와 관련된 FF (이전?) 문제 해결)에 여전히 유용합니다. 그리드 / 플렉스 박스의 래퍼 div는 종종 직관적이지 않은 결과를 제공합니다.)


4
-1을 주신 분들은 다른 유저들의 이익을 위해 설명 해주시기 바랍니다. 개인적으로 iOS의 IE6 및 Safari에서도 훌륭한 결과를 얻었습니다.
SamGoody

추가하고 싶었습니다. 이것은 일반적으로 좋은 접근 방식입니다. 사람들은 최적화로 이미지 스프라이트 시트의 배경 위치 좌표도 지정합니다. 그러나 한 가지 차이점은 <img>에있는 오류 이벤트 핸들러가 없다는 것입니다
badunk

또한 다음 내용으로 div에 클래스를 추가했습니다.background-repeat:no-repeat !important; float:left; width:100px; height:100px;
Nils

2
기본적으로 일부 브라우저는 배경 이미지를 인쇄하지 않으므로 사용자가 해당 페이지를 인쇄하도록 허용하려는 경우이 방법이 좋지 않을 수 있습니다.
Bennett McElwee 2015 년

5
이것은 의미 상 정확하지 않습니다. 이것이 유용하다면 왜 HTML5는 figcaption, picture로 의미 체계를 최적화하기 위해 더 많은 이미지 관련 태그를 배치합니까? 설계된대로 img 태그를 사용하고 모든 것을 <div>로 바꾸지 마십시오.
마테우스 레온

23

CSS3 객체 맞춤

webkit, IE 및 firefox에서 얼마나 멀리 구현되었는지 잘 모르겠습니다. 하지만 오페라는 마법처럼 작동합니다

object-fitSVG 콘텐츠에서 작동하지만 preserveAspectRatio=""SVG 자체에서 속성 을 설정하여 동일한 효과를 얻을 수도 있습니다 .

img {
  height: 100px;
  width: 100px;
  -o-object-fit: contain;
}

Chris Mills 데모 http://dev.opera.com/articles/view/css3-object-fit-object-position/


2
1+ 이것은 정말 멋지다. 지원제한 되어서 안타깝습니다. Chrome 32가 공급 업체 접두사없이 지원하는 최초의 제품인 것 같습니다.
Josh Crozier 2014

이것은 환상적이고 매력처럼 작동합니다. 하나의 속성 만 추가하면 모든 것이 해결되었습니다. Chrome이 필요했고 작동합니다. 그리고 예, 공급 업체 접두사가 없습니다. 감사.
whyAto8

9
#logo {
    width: 400px;
    height: 200px;

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

7

div를 만들고 수업을 제공하십시오. 그런 다음 그 안에 img를 놓습니다.

<div class="mydiv">

<img src="location/of/your/image" ></img>

</div>

div의 크기를 설정하고 상대적으로 만듭니다.

    .mydiv {
        position: relative;
        height:300px;
        width: 100%;
        overflow: hidden;
    }

그런 다음 이미지 스타일링

img {
    width: 100%;
    height: auto;
    overflow: hidden;
}

도움이되는 희망


2

다음과 같이 사용할 수 있습니다.

.width100 {
  max-width: 100px;
  height: 100px;
  width: auto;
  border: solid red;
}
<img src="https://www.gravatar.com/avatar/dc48e9b92e4210d7a3131b3ef46eb8b1?s=512&d=identicon&r=PG" class="width100" />


1

캡슐화 <div> 또는 <span>을 추가해야합니까?

그렇게 생각합니다. 마음에 떠오르는 유일한 것은 패딩이지만,이를 위해서는 미리 이미지의 크기를 알아야합니다.



0

내가 생각할 수있는 것은 너비 나 높이를 늘리고 비율 측면에서 크기를 조정하는 것입니다. 측면에 약간의 공백이 있습니다. 와이드 스크린이 1024x768의 해상도를 표시하는 것과 같은 것입니다.


0

flexbox를 사용하는 것이 유효한 옵션이면 (이전 브라우저를 지원할 필요가 없음) 여기에서 다른 답변을 확인 하십시오 (이것의 중복 일 수 있음).

기본적으로 img 태그를 div에 래핑해야하며 CSS는 다음과 같습니다.

.img__container {
    display: flex;
    padding: 15px 12px;
    box-sizing: border-box;
    width: 400px; height: 200px;

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

-1

이것은 꽤 오래된 질문이지만 Chrome / Edge (객체 맞춤 속성 포함)에서 모든 것이 잘 작동했지만 동일한 CSS 속성이 IE11에서 작동하지 않는 (IE11에서 지원되지 않기 때문에) 똑같은 성가신 문제가 발생했습니다. 내 모든 문제를 해결 한 HTML5 "figure"요소를 사용합니다.

제 경우에는 전혀 도움이되지 않았기 때문에 개인적으로 외부 DIV 태그를 사용하지 않았으므로 외부 DIV를 피하고 단순히 'figure'요소로 대체했습니다.

아래 코드는 이미지를 강제로 축소 / 축소하도록합니다 (원래 종횡비를 변경하지 않고).

<figure class="figure-class">
  <img class="image-class" src="{{photoURL}}" />
</figure>

및 CSS 클래스 :

.image-class {
    border: 6px solid #E8E8E8;
    max-width: 189px;
    max-height: 189px;
}

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