Recent Posts
Recent Comments
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Today
Total
관리 메뉴

DH의 개발 공부로그

[CSS] 블록(block)요소 안에 img 태그의 하단 여백 없애기 본문

HTML & CSS

[CSS] 블록(block)요소 안에 img 태그의 하단 여백 없애기

DeveloperDH 2022. 4. 15. 17:49
728x90

블록(block) 요소 안에 이미지를 넣었는데 하단 여백이 생기는 특이한 점을 발견하였습니다.

<style>
.box {
    border: 2px solid red;
}
</style>

<body>
    <div class="box">
        <img src="./dog.jpg" alt="강아지 이미지">
    </div>
</body>

블록 요소안에 이미지 태그를 넣으면 생기는 여백

 

너무 궁금해서 찾아 본 결과 원인은 이러했습니다.

 

이미지 태그는 인라인(inline) 속성이고 인라인 속성의 텍스트, 또는 이미지 콘텐츠는 콘텐츠들이 정렬되는 기준 선이 있습니다. 

인라인 요소의 기본 설정 기준선 값은 베이스라인(baseline) 입니다.

베이스라인은 문자(알파벳 기준)가 얹히는 기준 바닥을 말하며, 영어에서 g, j, p, q와 같은 꼬리가 있는 문자들은 베이스라인 밑으로 꼬리가 내려가 걸쳐집니다.

그러다 보니 베이스라인의 기준에서는 블록 요소 안에 이미지만 있더라도, 보이지 않는 문자를 대비하기 위해 위와 아래에 공간을 만들어 두는 것입니다.

베이스라인의 기본 구조
베이스라인 설정으로 된 이미지와 텍스트

 

이러한 문제의 해결방법은 다음과 같은 방법들이 있습니다.

 

block 요소 안 img 태그 하단 여백 없애기

방법 1. img 태그를 display: block;으로 설정한다.

인라인 요소여서 생기는 block요소 안 수직 정렬의 문제이기 때문에 img 태그를 block 요소로 바꿔주면 해결이 됩니다.

<style>
.box {
    border: 2px solid red;
}
.box > img {
    display: block;
}
</style>

<body>
    <div class="box">
        <img src="./dog.jpg" alt="강아지 이미지">
    </div>
</body>

 

방법 2. img 태그에 vertical-align을 baseline이 아닌 top, middle, bottom으로 설정한다.

"baseline"으로 인한 하단 여백이 생긴 것이기 때문에 vertical-align 포로퍼티 값이 baseline 만 아닌 다른 값을 적용하면 하단에 여백이 남는 현상은 발생하지 않습니다.

<style>
.box {
    border: 2px solid red;
}
.box > img {
    vertical-align: bottom;
}
</style>

<body>
    <div class="box">
        <img src="./dog.jpg" alt="강아지 이미지">
    </div>
</body>

 

방법 3. img 태그에 margin-bottom을 음수의 값으로 설정한다.

<style>
.box {
    border: 2px solid red;
}
.box > img {
    margin-bottom: -5px;
}
</style>

<body>
    <div class="box">
        <img src="./dog.jpg" alt="강아지 이미지">
    </div>
</body>

 

이런 방식으로 문제를 해결할 수 있었습니다.

728x90
Comments