div 내부의 이미지는 이미지 아래에 여분의 공간이 있습니다.


503

다음 코드 에서의 높이가 ? div의 높이보다 큰 이유는 무엇 img입니까? 이미지 아래에 틈이 있지만 패딩 / 여백이 아닌 것 같습니다.

이미지 아래의 간격이나 여분의 공간은 무엇입니까?

#wrapper {
  border: 1px solid red;
  width:200px;
}
img {
  width:200px;
}
<div id="wrapper">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>

그 아래에 공백이나 공백이있는 이미지


10
다음은이 질문에 대한 간단하고 완전한 답변입니다. stackoverflow.com/a/31445364/3597276
Michael Benjamin

1
다음은이 문제에 대한 좋은 읽기는 다음과 같습니다 이상한 <IMG> 간격에서 HTML
마테우스 Avellar

답변:


601

기본적으로 이미지는 문자처럼 인라인으로 렌더링되므로 a, b, c 및 d가 앉아있는 것과 같은 줄에 있습니다.

g, j, p 및 q와 같은 문자에서 찾을 수 있는 자손 을 위한 줄 아래에 공백이 있습니다 .

자손의 데모

당신은 할 수 있습니다 :

  • [조정 vertical-align다른 곳에 위치하는 이미지를 (예 middle) 또는
  • display인라인되지 않도록 변경하십시오 .

div {
  border: solid black 1px;
  margin-bottom: 10px;
}

#align-middle img {
  vertical-align: middle;
}

#align-base img {
  vertical-align: bottom;
}

#display img {
  display: block;
}
<div id="default">
<h1>Default</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt="">
</div>

<div id="align-middle">
<h1>vertical-align: middle</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt=""> </div>
  
  <div id="align-base">
<h1>vertical-align: bottom</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt=""> </div>

<div id="display">
<h1>display: block</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt="">
</div>


포함 된 이미지를 공개하고있다 출처 위키 미디어 공용에


9
더 정확하게 말하자면, 이것은 인라인 요소가 현재의 공간을 차지하는 것 line-height입니다. line-height원하는 치수로 설정 하면 원하지 않는 공백도 극복 할 수 있습니다.
Kevin Boucher

3
"f"는 자손으로 인정됩니까?
j08691

2
@ j08691 — 글꼴에 따라 다릅니다.
Quentin

134

여기 에 제안 된 또 다른 옵션 은 이미지의 스타일을style="display: block;"


4
감사. 또한 플래시 무비 아래의 공간과 비슷한 문제가 해결되었습니다. (
add

5
또는 inline-block이미지가 평소처럼 인라인으로 표시되도록하려는 경우.
Ian

6
@Ian @Imperative inline-block가 작동하지 않는 것 같습니다.
p.matsinopoulos 21시 59 분

93

빠른 수정:

이미지 아래의 간격제거 하려면 다음을 수행 하십시오 .

  • 이미지 의 세로 정렬 속성을 vertical-align: bottom; vertical-align: top;또는vertical-align: middle;
  • 이미지의 표시 속성을 display:block;

라이브 데모는 다음 코드를 참조하십시오.


설명 : 이미지 아래에 왜 틈이 있습니까?

이미지 아래의 간격이나 여분의 공간은 버그 나 문제가 아니며 기본 동작입니다. 근본 원인은 이미지가 교체 된 요소이기 때문입니다 ( MDN 교체 된 요소 참조 ). 이렇게하면 "이미지처럼 작동"하고 고유 한 크기, 종횡비를 가질 수 있습니다.
브라우저는 표시 속성을 계산 inline하지만 inline-block요소에 더 가깝게 만드는 특수한 동작을 제공합니다 (수직 정렬 할 수 있으므로 그것들은 높이, 위 / 아래 여백과 패딩을 변형시킵니다 ...).

이것은 또한 다음을 의미합니다.

<img>기준선이 없으므로 수직 정렬 : 기준선이있는 인라인 서식 컨텍스트에서 이미지를 사용하면 이미지 의 맨 아래가 텍스트 기준선에 배치됩니다.
( 출처 : MDN , 강조 광산 )

브라우저가 기본적으로 세로 정렬 속성을 기준선으로 계산할 때 이것이 기본 동작입니다. 다음 이미지는 텍스트에서 기준선이있는 위치를 보여줍니다.

텍스트 기준선의 위치 ( 이미지 소스 )

기준선 정렬 요소 는 위 이미지에서 볼 수 있듯이 기준선 아래 (예 :) 아래로 확장 되는 하위 항목의 공간을 유지해야합니다 j, p, g .... 이 구성 에서이 예에서 볼 수 있듯이 이미지 하단이 기준선에 정렬됩니다 .

div{border:1px solid red;font-size:30px;}
img{width:100px;height:auto;}
<div>
  <img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>


그렇기 때문에 <img>태그 의 기본 동작이 컨테이너 하단에 간격을 생성하는 이유와 수직 정렬 속성 또는 디스플레이 속성을 변경하면 다음 데모와 같이 제거됩니다.

div {width: 100px;border: 1px solid red;}
img {width: 100px;height: auto;}

.block img{
  display:block;
}
.bottom img{
  vertical-align:bottom;
}
<p>Default:</p>
<div>
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With display:block;</p>
<div class="block">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With vertical-align:bottom;</p>
<div class="bottom">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>


따라서 font-size를 0으로 설정하면 작동하지 않습니다. 아니면합니까?
Persijn

2
@Persijn 않습니다. 설정처럼 line-height:0;하지만 좋은이 수직 정렬 또는 표시 특성 변화에 비해 해결 방법으로이 문제를 고려하지 않는다
웹 티키을

2
그러나 일부 브라우저는 존중하지 않습니다 font-size:0. 사용자 설정에서 글꼴 크기를 최소 크기로 설정합니다.
Mr Lister

예, 공백처럼 보입니다.
mrbengi

글쎄요, middle text-top sub super그림 의 위치가 옳지 않다고 생각합니다 .
xianshenglu

40

부모의 줄 높이를 무효화 할 수도 있습니다.

#wrapper {
  line-height: 0;
}

모든 수정 사항 : http://jsfiddle.net/FaPFv/


5
경고! 또한 #wrapper의 모든 텍스트 노드가 종료됩니다. 상속 될 것입니다. 그러나 그 멋진 피들러에 대한 보너스 포인트! 여기서는 텍스트 노드로 업데이트됩니다. jsfiddle.net/FaPFv/30
gcb

또는 font-size : 0
Kiran

13

이 속성을 지정하기 만하면됩니다.

img {
    display: block;
}

기본적으로 이미지에는이 속성이 있습니다.

img {
    display: inline;
}

7

이 문제에 대해 다음과 같은 몇 가지 방법을 사용할 수 있습니다

  1. 사용 line-height

    #wrapper {  line-height: 0px;  }
  2. 사용 display: flex

    #wrapper {  display: flex;         }
    #wrapper {  display: inline-flex;  }
  3. 사용 display: block, table, flexinherit

    #wrapper img {  display: block;    }
    #wrapper img {  display: table;    }
    #wrapper img {  display: flex;     }
    #wrapper img {  display: inherit;  }

매우 조잡한 line-height해킹을 권장하지 않거나 적어도 그것이 왜 최악의 "솔루션"인지 분명하게 밝히십시오. 처음보다 더 나쁜 상황에 처하게됩니다.
Sz.

5

나는 그것을 사용 line-height:0했고 그것은 나에게 잘 작동한다.


죄송합니다. -1 : 텍스트 위치를 고정 시키므로 누군가 <BR>가 이미지 옆 에 일부 (예 : 여러 줄로 된 텍스트 포함) 텍스트를 넣으면 위치가 잘못되거나 겹치거나 늘어납니다.
Sz.

3

나는 display : block을 사용하여 훌륭하게 작동한다는 것을 알았습니다. 이미지와 수직 정렬 : 상단; 텍스트에.

.imagebox {
    width:200px;
    float:left;
    height:88px;
    position:relative;
    background-color: #999;
}
.container {
    width:600px;
    height:176px;
    background-color: #666;
    position:relative;
    overflow:hidden;
}
.text {
    color: #000;
    font-size: 11px;
    font-family: robotomeduim, sans-serif;
    vertical-align:top;
    
}

.imagebox img{ display:block;}
<div class="container">
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
</div>

또는 JS FIDDLE 코드를 편집 할 수 있습니다


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