display
속성
display
속성은 요소의 디스플레이(표시) 방식 유형을 정의합니다.
이 속성으로 요소가 외부 레이아웃에 따라 디스플레이되는 방식이나,
요소 상자 자체와 내부의 레이아웃의 디스플레이 방식을 지정할 수 있습니다.
구문
아래는 display
속성에서 자주 사용되는 값들의 일부를 유형별로 정리한 구문 예시입니다.
/* 외부 + 내부 디스플레이 유형 */
display: block;
display: inline;
display: inline-block;
display: flex;
display: inline-flex;
display: grid;
display: inline-grid;
display: flow-root;
display: table;
display: list-item;
/* 요소 자체 디스플레이 유형 */
display: none; /* 요소 자체를 화면에 표시하지 않음 */
display: contents; /* 요소는 제거하고 자식 요소만 남김 */
/* 테이블 내부 디스플레이 유형 */
display: table-row;
display: table-cell;
display: table-caption;
/* 두 개의 값: 명시적 외부 + 내부 디스플레이 조합 (복합 키워드) */
display: block flex;
display: block grid;
display: inline flex;
display: inline grid;
/* 전역 값 */
display: inherit;
display: initial;
display: unset;
display: revert;
display: revert-layer;
데모
다음의 CSS 데모로 display
속성으로 요소의 표시와 레이아웃 방식 유형을 어떻게 정의하는지 살펴보세요.
나는 p 요소입니다.
나는 p 요소입니다.
나는 p 요소입니다.
값
display
속성은 키워드 값을 사용하여 지정합니다.
먼저 브라우저에서 지원하는 호환성을 고려해서 대표적인 값을 표로 간단히 살펴보고, 이후 각각의 값을 유형별로 정리합니다.
키워드 값 요약표
값 | 설명 |
---|---|
none |
요소를 표시하지 않습니다.
(화면에서 요소와 그 안의 콘텐츠 모두가 존재하지 않는 것처럼 렌더링됩니다.) |
contents |
요소 상자의 컨테이너 자체는 표시하지 않지만 그 안의 콘텐츠(가상 콘텐츠 포함)는 그대로 렌더링됩니다. |
block |
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있는 블록 레벨의 컨테이너를 생성합니다. |
inline |
일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격이 없는 인라인 레벨 컨테이너를 생성합니다. |
inline-block |
일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격이 없는 인라인 레벨의 블록 컨테이너를 생성합니다. |
flex |
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있는 블록 레벨의 플렉스 컨테이너를 생성합니다. |
inline-flex |
일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격은 없지만, 컨테이너 영역을 정의할 수 있는 인라인 레벨의 플렉스 컨테이너를 생성합니다. |
grid |
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있는 블록 레벨의 그리드 컨테이너를 생성합니다. |
inline-grid |
일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격은 없지만, 컨테이너 영역을 정의할 수 있는 인라인 레벨의 그리드 컨테이너를 생성합니다. |
list-item |
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있으며, <li> 요소처럼 마커가 표시되는 블록 레벨의 컨테이너를 생성합니다. |
table |
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있으며, <table> 요소처럼 테이블 레이아웃을 형성하는 블록 레벨의 테이블 박스를 생성합니다. |
inline-table |
일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격은 없지만, 컨테이너 영역을 정의할 수 있으며, <table> 요소처럼 테이블 레이아웃을 형성하는 인라인 레벨의 테이블 박스를 생성합니다. |
table-caption |
<caption> 요소의 디스플레이 방식입니다. |
table-row |
<tr> 요소의 디스플레이 방식입니다. |
table-cell |
<td> 요소의 디스플레이 방식입니다. |
table-header-group |
<thead> 요소의 디스플레이 방식입니다. |
table-row-group |
<tbody> 요소의 디스플레이 방식입니다. |
table-footer-group |
<tfoot> 요소의 디스플레이 방식입니다. |
table-column-group |
<colgroup> 요소의 디스플레이 방식입니다. |
table-column |
<col> 요소의 디스플레이 방식입니다. |
알아두세요!
위 값 외에도 ruby
, run-in
, flow-root
등 display
값이 더 있습니다. 하지만, 브라우저 지원이 제한적이거나 실무 사용 빈도가 낮아 여기서는 다루지 않습니다. 다루지 않는 값들에 대해서는 MDN 문서에서 참조할 수 있습니다.
이제 각 키워드 값의 의미를 하나씩 자세히 살펴보겠습니다.
none
none
키워드 값은 요소를 화면에 표시하지 않습니다.
이 값이 적용되면, 요소와 그 안의 콘텐츠는 화면에서 완전히 사라진 것처럼 렌더링됩니다. 따라서 공간도 차지하지 않으며, 주변 레이아웃에도 영향을 주지 않습니다. 또한 스크린 리더를 사용하는 시각 장애인은 이 요소에 접근할 수 없습니다.
다만, 해당 요소는 여전히 DOM에 존재하므로 자바스크립트로는 접근이 가능합니다.
예제
<ol>
<li>A</li>
<li class="ex">B</li> <!-- 화면에 표시하지 않습니다. -->
<li>C</li>
<li>D</li>
</ol>
.ex {
display: none;
}
.ex
선택자를 가진 B
항목은 display: none
으로 인해 마크업하지 않은 것처럼 화면에 표시되지 않습니다.
하지만, DOM에는 존재하므로 자바스크립트로 접근 가능합니다.
- A
- B
- C
- D
참고하세요!
만약 요소를 렌더링하지 않으면서도 정상적으로 공간을 차지하도록 하고 싶다면, display: none
대신에 CSS의 visibility
속성을 사용하세요.
display: none
이 기본값으로 설정되어 있는 요소
브라우저의 기본 스타일시트에서 display: none
이 기본값으로 설정되어 있는 요소들은 다음과 같습니다.
none
값에 대한 자세한 설명과 더 많은 예제는 CSS display: none 완벽 가이드를 참조하세요!
contents
단, 콘텐츠가 없다면, display: none
방식이 적용됩니다.
예제
<button class="ex" type="button">Button</button>
<hr>
<p class="ex">Hello <strong>World</strong></p>
<hr>
<a class="ex" href="https://www.google.com/" target="_blank">Google로 이동하기</a>
<hr>
<!-- 콘텐츠가 없다면, display: none 방식이 적용됩니다. -->
<p class="ex"></p>
<hr>
<input class="ex" type="text">
.ex {
display: contents;
}
.ex
선택자를 가진 요소들은 모두 자체 요소 상자의 컨테이너 자체는 표시하지 않고 내부 콘텐츠만 렌더링됩니다. 그런데, <p class="ex"></p>
처럼 콘텐츠가 없거나 <input>
처럼 콘텐츠를 가질 수 없는 빈 요소 경우에는 display: none
처럼 동작하여 아예 표시되지 않습니다.
content
값에 대한 좀 더 자세한 설명은 CSS display: contents 완벽 가이드를 참조하세요!
block
block
키워드 값은 일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고,
컨테이너 영역을 정의할 수 있는 블록 레벨의 컨테이너를 생성합니다.
다음은 브라우저의 기본 스타일시트에서 display: block
이 기본값으로 설정되어 있는 대표적인 요소들입니다.
display: block
으로 설정된 요소들은 요소의 앞과 뒤 요소를 줄바꿈시킵니다.
그리고 요소의 컨테이너 영역, 즉 요소의 너비나 높이 등을 지정할 수 있습니다.
이번에는 display: block
이 기본값으로 설정된 요소들을 실제로 마크업하고 CSS로 요소의 영역을 눈으로 살펴볼 수 있도록 했습니다.
display: block
인 요소의 특징 예시
<h3>h3</h3>
<p>p</p>
h3, p {
width: 70px; /* 너비 지정 */
height: 100px; /* 높이 지정 */
border: 1px solid red; /* 빨간색 테두리 지정 */
}
위 코드를 적용하면, 각 요소는 앞뒤 요소와 줄바꿈되며 너비와 높이를 가지는 박스로 표시됩니다.
h3
p
지금까지는 display: block
의 기본 개념과 특징을 살펴봤습니다.
이번에는 기본적으로 display: block
이 아닌 요소에 display: block
을 적용하면 어떤 변화가 생기는지 예제를 통해 확인해보겠습니다.
예제: block
이 아닌 요소에 display: block
적용하기
이제 display: block
이 기본값으로 설정되어 있지 않은 <span>
요소의 디스플레이 방식을 먼저 살펴보고, 이후 display: block
을 적용했을 때 어떤 방식으로 바뀌는지 확인해 보겠습니다.
<span>첫 번째 span</span>
<span>두 번째 span</span>
<span>세 번째 span</span>
span {
width: 70px; /* 너비 지정 */
height: 100px; /* 높이 지정 */
border: 1px solid red; /* 빨간색 테두리 지정 */
}
앞서 살펴본 <span>
요소에 display: block
을 적용하면 다음과 같은 변화가 일어납니다.
변경된 CSS
span {
width: 70px;
height: 100px;
border: 1px solid red;
display: block; /* 👈 display: block 적용 */
}
<span>
요소에 display: block
을 적용하면
- 요소의 앞과 뒤를 줄바꿈 시킵니다.
width: 70px
과height: 100px
로 지정한 요소의 너비와 높이가 적용됩니다.
inline
inline
키워드 값은 일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격이 없는 인라인 레벨 컨테이너를 생성합니다.
float
이 설정된 경우position: absolute
또는position: fixed
가 설정된 경우- 플렉스 박스의 아이템으로 사용되는 경우
- 그리드 박스의 아이템으로 사용되는 경우
에는 예외적으로 컨테이너 영역(너비, 높이)을 지정할 수 있습니다.
브라우저의 기본 스타일시트에서 display: inline
이 기본값으로 설정되어 있는 대표적인 요소들입니다.
이번에는 display: inline
이 기본값으로 설정된 요소들을 실제로 마크업하고 CSS로 요소의 영역을 눈으로 살펴볼 수 있도록 했습니다.
display: inline
인 요소의 특징 예시
<span>span</span>
<strong>strong</strong>
<em>em</em>
span, strong, em {
width: 70px; /* 너비 지정 */
height: 100px; /* 높이 지정 */
border: 1px solid red; /* 빨간색 테두리 지정 */
}
지금까지는 display: inline
의 기본 개념과 특징을 살펴봤습니다.
이번에는 기본적으로 display: inline
이 아닌 요소에 display: inline
을 적용하면 어떤 변화가 생기는지 예제를 통해 확인해보겠습니다.
예제: inline
이 아닌 요소에 display: inline
적용하기
이제 display: inline
이 기본값으로 설정되어 있지 않은 <div>
요소의 디스플레이 방식을 먼저 살펴보고, 이후 display: inline
을 적용했을 때 어떤 방식으로 바뀌는지 확인해 보겠습니다.
<div>첫 번째 div</div>
<div>두 번째 div</div>
<div>세 번째 div</div>
div {
width: 70px; /* 너비 지정 */
height: 100px; /* 높이 지정 */
border: 1px solid red; /* 빨간색 테두리 지정 */
}
앞서 살펴본 <div>
요소에 display: inline
을 적용하면 다음과 같은 변화가 일어납니다.
변경된 CSS
div {
width: 70px;
height: 100px;
border: 1px solid red;
display: inline; /* 👈 display: inline 적용 */
}
<div>
요소에 display: inline
을 적용하면
- 요소의 앞과 뒤를 줄바꿈 시키는 성격이 없어지고 한 줄로 표시됩니다.
width: 70px
과height: 100px
로 지정한 요소의 너비와 높이가 적용되지 않습니다.
inline-block
inline-block
키워드 값은 일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격이 없는 인라인 레벨의 블록 컨테이너를 생성합니다.
다음은 inline
값을 이해하는 데 도움이 되도록 block
, inline
, inline-block
을 간단히 비교한 표입니다.
키워드 값 | 줄바꿈 발생 여부 | 일반적인 문서 흐름에서 영역 정의 가능 여부 |
---|---|---|
block |
예 | 예 |
inline |
아니오 | 아니오 |
inline-block |
아니오 | 예 |
지금까지는 display: inline-block
의 기본 개념과 특징을 살펴봤습니다.
이번에는 기본적으로 display: inline-block
이 아닌 요소에 display: inline-block
을 적용하면 어떤 변화가 생기는지 예제를 통해 확인해보겠습니다.
예제: inline-block
이 아닌 요소에 display: inline-block
적용하기
<h6>diplay가 block인 div 요소</h6>
<div>첫 번째 div</div>
<div>두 번째 div</div>
<div>세 번째 div</div>
<h6>diplay가 inline인 span 요소</h6>
<span>첫 번째 span</span>
<span>두 번째 span</span>
<span>세 번째 span</span>
div, span {
width: 70px; /* 너비 지정 */
height: 100px; /* 높이 지정 */
border: 1px solid red; /* 빨간색 테두리 지정 */
}
diplay가 block인 div 요소
diplay가 inline인 span 요소
첫 번째 span 두 번째 span 세 번째 span변경된 CSS
div, span {
width: 70px;
height: 100px;
border: 1px solid red;
display: inline-block; /* 👈 display: inline-block 적용 */
}
diplay가 block인 div 요소
diplay가 inline인 span 요소
첫 번째 span 두 번째 span 세 번째 span- 요소의 앞과 뒤를 줄바꿈 시키는 성격이 없어지고 한 줄로 표시됩니다.
width: 70px
과height: 100px
로 지정한 요소의 너비와 높이가 적용됩니다.
flex
flex
키워드 값은 일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고,
컨테이너 영역을 정의할 수 있는 블록 레벨의 플렉스 컨테이너를 생성합니다.
이 값은 외부 디스플레이는 block
값으로 동작하며, 내부 디스플레이는 플렉스 박스 모델에 따라 콘텐츠를 배치합니다.
예제
<div class="flex-container">
<div class="flex-item">child 1</div>
<div class="flex-item">child 2</div>
<div class="flex-item">child 3</div>
</div>
.flex-container {
display: flex;
border: 2px solid #333;
padding: 10px;
}
.flex-item {
background-color: #4CAF50;
color: white;
padding: 10px;
margin: 5px;
}
inline-flex
inline-flex
키워드 값은 일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키는 성격은 없지만,
컨테이너 영역을 정의할 수 있는 인라인 레벨의 플렉스 컨테이너를 생성합니다.
이 값은 외부 디스플레이는 inline
값으로 동작하며, 내부 디스플레이는 플렉스 박스 모델에 따라 콘텐츠를 배치합니다.
<p>
앞 문장
<span class="inline-flex-container">
<span class="flex-item">child 1</span>
<span class="flex-item">child 2</span>
<span class="flex-item">child 3</span>
</span>
뒷 문장
</p>
.inline-flex-container {
display: inline-flex;
background-color: #eef;
}
.inline-flex-container > span {
padding: 10px;
background: #99c;
margin: 5px;
}
앞 문장 child 1 child 2 child 3 뒷 문장
grid
grid
키워드 값은 일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고,
컨테이너 영역을 정의할 수 있는 블록 레벨의 그리드 컨테이너를 생성합니다.
이 값은 외부 디스플레이는 block
값으로 동작하며, 내부 디스플레이는 그리드 박스 모델에 따라 콘텐츠를 배치합니다.
예제
<div class="grid-container">
<div class="grid-item">child 1</div>
<div class="grid-item">child 2</div>
<div class="grid-item">child 3</div>
<div class="grid-item">child 4</div>
<div class="grid-item">child 5</div>
<div class="grid-item">child 6</div>
</div>
.grid-container {
display: grid;
grid-template-columns: repeat(3, auto);
border: 2px solid #333;
padding: 10px;
gap: 10px;
}
.grid-item {
background-color: #4CAF50;
color: white;
padding: 10px;
}
inline-grid
inline-grid
키워드 값은 일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키는 성격은 없지만,
컨테이너 영역을 정의할 수 있는 인라인 레벨의 그리드 컨테이너를 생성합니다.
이 값은 외부 디스플레이는 inline
값으로 동작하며, 내부 디스플레이는 그리드 박스 모델에 따라 콘텐츠를 배치합니다.
예제
<p>
앞 문장
<span class="inline-grid-container">
<span class="grid-item">child 1</span>
<span class="grid-item">child 2</span>
<span class="grid-item">child 3</span>
<span class="grid-item">child 4</span>
<span class="grid-item">child 5</span>
<span class="grid-item">child 6</span>
</span>
뒷 문장
</p>
.inline-grid-container {
display: inline-grid;
grid-template-columns: repeat(3, auto);
background-color: #eef;
gap: 5px;
}
.grid-item {
padding: 10px;
background: #99c;
}
앞 문장 child 1 child 2 child 3 child 4 child 5 child 6 뒷 문장
list-item
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있으며, <li>
요소처럼 마커가 표시되는 블록 레벨의 컨테이너를 생성합니다.
예제
<p>p 요소를 display: list-item으로 적용하기</p>
<p>p 요소를 display: list-item으로 적용하기</p>
<p>p 요소를 display: list-item으로 적용하기</p>
p {
display: list-item;
}
p 요소를 display: list-item으로 적용하기
p 요소를 display: list-item으로 적용하기
p 요소를 display: list-item으로 적용하기
알아두세요!
display: list-item
이 적용된 요소는 리스트 마커 관련 속성(list-style
, list-style-type
,
list-style-image
,
list-style-position
)을 적용할 수 있습니다.
table
일반적인 문서 흐름에서 요소의 앞과 뒤 요소를 줄바꿈 시키고, 컨테이너 영역을 정의할 수 있으며, <table>
요소처럼 테이블 레이아웃을 형성하는 블록 레벨의 테이블 박스를 생성합니다.
주의할 점
display: table
는 시각적으로는 테이블 레이아웃을 형성하지만, HTML의 실제 <table>
요소가 아니기 때문에 의미론적인 측면에서 대부분의 접근성 도구에서는 의미 있는 데이터 테이블로 인식되지 않을 수 있습니다.
이로 인해 스크린 리더 등 보조 기술은 테이블의 구조적 의미(행, 열, 셀 등)를 이해하지 못하고, 단순한 레이아웃 요소로 해석할 가능성이 있습니다.
inline-table
일반적인 문서 흐름에서 요소의 앞뒤를 줄바꿈 시키는 성격은 없지만, 컨테이너 영역을 정의할 수 있으며, <table>
요소처럼 테이블 레이아웃을 형성하는 인라인 레벨의 테이블 박스를 생성합니다.
이 값은 외부 디스플레이는 inline
값으로 동작하며, 내부 디스플레이는 블록 레벨의 테이블 박스 모델에 따라 콘텐츠를 배치합니다.
table-caption
<caption>
요소의 디스플레이 방식입니다.
이처럼 올바르게 table-caption
값이 적용된 요소는 테이블 캡션의 위치를 지정하는 caption-side
속성을 적용할 수 있습니다.
table-row
<tr>
요소의 디스플레이 방식입니다.
table-cell
<td>
요소의 디스플레이 방식입니다.
table-header-group
<thead>
요소의 디스플레이 방식입니다.
table-row-group
<tbody>
요소의 디스플레이 방식입니다.
table-footer-group
<tfoot>
요소의 디스플레이 방식입니다.
table-column-group
<colgroup>
요소의 디스플레이 방식입니다.
<colgroup>
요소가 아닌 다른 요소에서 적용된 table-column-group
값은 display: table
또는 display: inline-table
이 적용된 요소의 콘텐츠로만 사용되어야 하며, HTML의 테이블 구문 규칙에 맞게 사용되어야 합니다. <table>
요소의 콘텐츠로는 사용할 수 없습니다. 만약 <table>
요소에서 사용되면 HTML의 테이블 구문 규칙 위반이 되어 브라우저가 올바르게 렌더링할 수 없게 됩니다.
table-column
<col>
요소의 디스플레이 방식입니다.
두 개의 값 구문
display
속성은 두 개의 값 구문을 사용할 수 있습니다.
두 개의 값 구문 형식
display: <outside> <inside>;
<outside>
는 외부 디스플레이 유형, 즉 요소가 일반적인 문서 흐름에서 어떻게 배치될지를 키워드 값으로 지정합니다.<inside>
는 내부 디스플레이 유형, 즉 요소가 내부 콘텐츠의 어떤 컨테이너로 디스플레이될지를 키워드 값으로 지정합니다.
예를 들어 , display: block flex
는 display: block flex
와 동일하며, display: inline flex
는 display: inline-flex
와 동일합니다.
형식 정의
초깃값 | inline |
---|---|
적용 요소 | 모든 요소 |
상속 | 아니오 |
애니메이션 | 아니오 |
알아두세요!
display
속성은 CSS 명세서를 기준으로 애니메이션되지 않는 속성입니다.
하지만, 일부 브라우저에서는 display: none
과 같은 값을 불연속적으로 전환하는 애니메이션(discrete animation)을 실험적으로 지원하기도 합니다. 실험적 지원이기 때문에, 브라우저 호환성 표에는 따로 표시하지 않았습니다.
브라우저 호환성
속성 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
display
|
예 | 예 | 예 | 예 |
두 개의 키워드 값
|
115 | 115 | 70 | 15 |
명세서
명세서 사양 | |
---|---|
display
|
CSS Display Module Level 3 #the-display-properties |