어찌 보면 쉬운 주제이긴 한데, 가끔 헷갈려서 정리 해보려 한다.
CSS 는 툭하면 잊어버리기 쉬운 것 같다. 개인적으로 프로그래밍 언어보다 CSS가 더 헷갈리고 어렵다.
1️⃣ display 속성 값의 종류
HTML 에는 여러 태그들이 존재하며, 태그들은 크게 세 가지의 display 속성 값을 기본적으로 가지고 있다.
1. inline
2. block
태그마다 기본적으로 display 속성 값으로 위 두 가지 중 하나를 부여 받는다.
아래는 각 속성 값에 따라 기본적으로 적용되는 태그들을 분류한 것이다.
inline | <span>, <a>, <strong> ... |
block | <div>, <p>, <h>, <ul>, <ol> , <li> , <form> ... |
아마 위의 태그들을 보면, 빈번하게 쓰이는 몇몇 태그들이 빠져 있는 것을 알 수 있다.
대표적으로 <img>, <input>, <botton> 태그들이 있다.
그럼 위 태그들은 기본적으로 내재된 display 속성이 없는 것일까 ?
정답은 그렇지 않다.
사실 위의 태그들도 기본적으로 inline 을 가지고 있다.
그러나, 일반적인 inline과 다르게 조금 예외적으로 동작한다.
마치 inline 과 block의 특징이 합쳐진 lnine-block 처럼 동작하는데 이제부터 자세히 알아보자.
2️⃣ inline vs block vs inline-block
먼저, inline과 block 두 display 속성 값을 비교해보자


현재 span 태그(inline)와 p 태그(block)에 border 속성을 추가하여 보기 쉽게 해두었다.
보다시피 lnline인 span은 줄을 넘기지 않고 콘텐츠만큼 영역을 차지한다.
그러나, block인 p 태그는 줄을 넘기며 콘텐츠 크기 그 이상으로 영역을 갖는 것을 볼 수 있다.
그럼 block 은 구체적으로 얼마만큼의 영역을 가질까 ?
결론부터 말하면 block은 기본적으로 width, height 를 지정해주지 않는 이상 부모 요소의 크기 만큼
width를 가지며, 콘텐츠의 크기만큼 height를 갖는다.
예시를 보자


지금 p 태그는 div 안에 있기에 부모 태그가 div가 된다.
따라서 p 태그의 기본 width는 부모의 width와 같게 되며, 기본 height는 글자의 크기(콘텐츠)만큼 된다.
지금처럼 특별히 width와 height를 지정해주지 않은 가장 기본적인 경우일 때 그렇다.
첫 번째 예제에는 부모 태그가 body 이므로 body의 크기인 즉, 우리가 눈에 보이는 브라우저의 width (뷰포트) 만큼
p태그의 width가 결정되는 것이다.
inline과 block의 크기가 어떻게 결정되는지 깨달았다면, 이제 좀 더 세부적인 특징을 확인해보자.
첫 번째 예시로 돌아가서 span 태그와, p 태그에 width, heigth, margin, padding을 주어보겠다.


무언가 달라지긴 했는데 이렇게는 잘 모르겠다. 개발자 도구로 자세히 보자.


span 태그(inline)를 보면, width와 height 가 적용되지 않는다.
또한 margin, padding 이 좌우 적용이 되었다.
그러나 p 태그(block)는 width, height 가 모두 적용 되며,
margin, padding 모두 상하좌우로 적용이 된다.
또한 p 태그는 width를 조절하여 영역의 크기를 줄였음에도 기본적으로 줄바꿈이 된다.
여기까지 정리를 해보자
inline | block | |
width | 무시 | 적용 |
height | 무시 | 적용 |
padding | 좌우만 적용 | 상하좌우 적용 |
margin | 좌우만 적용 | 상하좌우 적용 |
그렇다면 display의 또 다른 값인 inline-block은 무엇일까?
위의 예시에서 span 태그의 display 의 값을 inline-block 으로 바꾸어 보겠다.



span의 display 값을 inline-blcok 으로 변경하니 마치 block 처럼
height, width, margin, padding 이 모두 적용되는 것을 확인할 수 있다.
또한 inline처럼 줄바꿈이 반드시 일어나지 않고, 다른 요소들과 같은 줄에 배치될 수 있다.
3️⃣ inline 예외 태그
display의 기본값이 inline이지만 마치 inline-block 처럼 동작하는 태그들이 있다.
대표적으로 <img>, <button>, <input> 태그들이 그렇다.
예시를 확인하자.



inline-block 처럼 동작하는 것을 확인할 수 있다.
그런데, 위의 예시의 모든 속성이 적용되었을 때 사이즈는 324*54 인데, button은 300*30으로 나타난다.
이 이유는 box-sizing 속성과 관련이 있다.
기본적으로 block 은 box-sizing 속성 값이 content-box 이지만,
button은 브라우저마다 다르다. 크롬은 border-box로 되어있다.
만약 box-sizing 속성을 모르면 추가적으로 알아보길 바란다. 이 글에서는 생략하겠다.
중요한 것은 button 의 display 는 기본값으로 inline이지만 예외적으로 inline-block 처럼 작동하는 것이다.
그럼 여기서 궁금증이 들 수 있다.
처음부터 기본값을 inline-block으로 하지 왜 inline으로 하는 것인가 ?
이유는 매우 단순하다.
HTML 초기 버전에서는 inline, block 두 요소만 정의되어 있었다.
inline-block 은 CSS의 발전과 함께 도입된 개념이다.
따라서, display의 기본 값을 갑작스레 inline-block 으로 변경하면 호환성 문제를 야기시킬 수 있다.
어찌 보면 쉬운 주제이긴 한데, 가끔 헷갈려서 정리 해보려 한다.
CSS 는 툭하면 잊어버리기 쉬운 것 같다. 개인적으로 프로그래밍 언어보다 CSS가 더 헷갈리고 어렵다.
1️⃣ display 속성 값의 종류
HTML 에는 여러 태그들이 존재하며, 태그들은 크게 세 가지의 display 속성 값을 기본적으로 가지고 있다.
1. inline
2. block
태그마다 기본적으로 display 속성 값으로 위 두 가지 중 하나를 부여 받는다.
아래는 각 속성 값에 따라 기본적으로 적용되는 태그들을 분류한 것이다.
inline | <span>, <a>, <strong> ... |
block | <div>, <p>, <h>, <ul>, <ol> , <li> , <form> ... |
아마 위의 태그들을 보면, 빈번하게 쓰이는 몇몇 태그들이 빠져 있는 것을 알 수 있다.
대표적으로 <img>, <input>, <botton> 태그들이 있다.
그럼 위 태그들은 기본적으로 내재된 display 속성이 없는 것일까 ?
정답은 그렇지 않다.
사실 위의 태그들도 기본적으로 inline 을 가지고 있다.
그러나, 일반적인 inline과 다르게 조금 예외적으로 동작한다.
마치 inline 과 block의 특징이 합쳐진 lnine-block 처럼 동작하는데 이제부터 자세히 알아보자.
2️⃣ inline vs block vs inline-block
먼저, inline과 block 두 display 속성 값을 비교해보자


현재 span 태그(inline)와 p 태그(block)에 border 속성을 추가하여 보기 쉽게 해두었다.
보다시피 lnline인 span은 줄을 넘기지 않고 콘텐츠만큼 영역을 차지한다.
그러나, block인 p 태그는 줄을 넘기며 콘텐츠 크기 그 이상으로 영역을 갖는 것을 볼 수 있다.
그럼 block 은 구체적으로 얼마만큼의 영역을 가질까 ?
결론부터 말하면 block은 기본적으로 width, height 를 지정해주지 않는 이상 부모 요소의 크기 만큼
width를 가지며, 콘텐츠의 크기만큼 height를 갖는다.
예시를 보자


지금 p 태그는 div 안에 있기에 부모 태그가 div가 된다.
따라서 p 태그의 기본 width는 부모의 width와 같게 되며, 기본 height는 글자의 크기(콘텐츠)만큼 된다.
지금처럼 특별히 width와 height를 지정해주지 않은 가장 기본적인 경우일 때 그렇다.
첫 번째 예제에는 부모 태그가 body 이므로 body의 크기인 즉, 우리가 눈에 보이는 브라우저의 width (뷰포트) 만큼
p태그의 width가 결정되는 것이다.
inline과 block의 크기가 어떻게 결정되는지 깨달았다면, 이제 좀 더 세부적인 특징을 확인해보자.
첫 번째 예시로 돌아가서 span 태그와, p 태그에 width, heigth, margin, padding을 주어보겠다.


무언가 달라지긴 했는데 이렇게는 잘 모르겠다. 개발자 도구로 자세히 보자.


span 태그(inline)를 보면, width와 height 가 적용되지 않는다.
또한 margin, padding 이 좌우 적용이 되었다.
그러나 p 태그(block)는 width, height 가 모두 적용 되며,
margin, padding 모두 상하좌우로 적용이 된다.
또한 p 태그는 width를 조절하여 영역의 크기를 줄였음에도 기본적으로 줄바꿈이 된다.
여기까지 정리를 해보자
inline | block | |
width | 무시 | 적용 |
height | 무시 | 적용 |
padding | 좌우만 적용 | 상하좌우 적용 |
margin | 좌우만 적용 | 상하좌우 적용 |
그렇다면 display의 또 다른 값인 inline-block은 무엇일까?
위의 예시에서 span 태그의 display 의 값을 inline-block 으로 바꾸어 보겠다.



span의 display 값을 inline-blcok 으로 변경하니 마치 block 처럼
height, width, margin, padding 이 모두 적용되는 것을 확인할 수 있다.
또한 inline처럼 줄바꿈이 반드시 일어나지 않고, 다른 요소들과 같은 줄에 배치될 수 있다.
3️⃣ inline 예외 태그
display의 기본값이 inline이지만 마치 inline-block 처럼 동작하는 태그들이 있다.
대표적으로 <img>, <button>, <input> 태그들이 그렇다.
예시를 확인하자.



inline-block 처럼 동작하는 것을 확인할 수 있다.
그런데, 위의 예시의 모든 속성이 적용되었을 때 사이즈는 324*54 인데, button은 300*30으로 나타난다.
이 이유는 box-sizing 속성과 관련이 있다.
기본적으로 block 은 box-sizing 속성 값이 content-box 이지만,
button은 브라우저마다 다르다. 크롬은 border-box로 되어있다.
만약 box-sizing 속성을 모르면 추가적으로 알아보길 바란다. 이 글에서는 생략하겠다.
중요한 것은 button 의 display 는 기본값으로 inline이지만 예외적으로 inline-block 처럼 작동하는 것이다.
그럼 여기서 궁금증이 들 수 있다.
처음부터 기본값을 inline-block으로 하지 왜 inline으로 하는 것인가 ?
이유는 매우 단순하다.
HTML 초기 버전에서는 inline, block 두 요소만 정의되어 있었다.
inline-block 은 CSS의 발전과 함께 도입된 개념이다.
따라서, display의 기본 값을 갑작스레 inline-block 으로 변경하면 호환성 문제를 야기시킬 수 있다.