CSS 입문 | CSS 위치 속성 | 디스플레이 (display)

CSS 디스플레이 (display)

display 속성은 웹 페이지의 레이아웃(layout)을 결정하는 CSS의 중요한 속성 중 하나이다. 이 속성은 해당 HTML 요소가 웹 브라우저에 언제 어떻게 보이는가를 결정합니다.

대부분의 HTML 요소는 display 속성의 기본값으로 다음 두 가지 값 중 하나의 값을 가진다.

  1. 블록(block)
  2. 인라인(inline)

블록(block)

display 속성값이 블록(block)인 요소는 언제나 새로운 라인(line)에서 시작하며, 해당 라인의 모든 너비를 차지한다.

<div?>, <h1>, <p>, <ul>, <ol>, <form> 요소는 대표적인 블록(block) 요소이다.

인라인(inline)

display 속성값이 인라인(inline)인 요소는 새로운 라인(line)에서 시작하지 않는다.
또한, 요소의 너비도 해당 라인 전체가 아닌 해당 HTML 요소의 내용(content)만큼만 차지한다.

<span>, <a>, <img> 요소는 대표적인 인라인(inline) 요소이다.

display 속성의 기본 설정값의 변경

HTML의 모든 요소는 각각의 기본 display 속성값을 가지고 있다.

하지만 display 속성값이 블록인 요소의 속성값을 인라인으로 바꿀 수 있다.
또한, 반대로 display 속성값이 인라인인 요소의 속성값을 블록으로 바꿀 수도 있다.

이렇게 HTML 요소의 display 속성값을 변경함으로써 웹 페이지를 개발자가 원하는 모양으로 변경할 수 있다.

<style>
    li { display: inline; }
</style>

위의 예제에서 블록 요소인 <li>요소의 display 속성값을 인라인으로 변경하고 있다.
display 속성값이 인라인으로 변경된 <li>요소는 해당 라인의 모든 너비를 차지하는 블록 요소의 특징을 잃어버리게 된다.

display 속성값을 변경해도, 실제로 해당 요소가 완전히 다른 타입의 요소로 바뀌는 것은 아니다.
즉, display 속성값을 인라인에서 블록으로 변경했더라도, 변경된 요소는 내부에 다른 요소를 포함할 수 없다.
왜냐하면, 처음부터 display 속성값이 블록인 요소만이 내부에 다른 요소를 포함할 수 있기 때문이다.

인라인-블록(inline-block)

인라인과 블록 이외에도 display 속성에 자주 사용되는 속성값에는 인라인-블록(inline-block)이 있다.
display 속성값이 인라인-블록으로 설정된 요소는 해당 요소 자체는 인라인(inline) 요소처럼 동작한다.
하지만 해당 요소 내부에서는 블록(block) 요소처럼 동작한다.

이처럼 인라인-블록 요소는 인라인 요소와 비슷하지만, 너비와 높이를 설정할 수 있다.
또한, 블록 요소처럼 margin을 이용하여 여백을 지정할 수도 있게 된다.

다음 예제는 다양한 display 속성값의 동작을 보여주는 예제이다.

<style>
    div { width: 100px; height: 50px; }
 
    .first { background-color: aqua; }
    .second { background-color: green; }
    .third { background-color: yellow; }
 
    .inline { display: inline; }
    .inline-block { display: inline-block; }
</style>

위의 예제처럼 display 속성값이 인라인-블록으로 설정된 요소들은 인라인 요소처럼 한 줄로 늘어서게 된다.
하지만 블록 요소처럼 너비와 높이를 설정할 수 있게 된다.
따라서 웹 사이트의 메뉴나 내비게이션 바를 만들 때 자주 사용된다.

visibility 속성

visibility 속성은 HTML 요소가 웹 페이지에 표현될지 아닐지만을 결정한다.
따라서 웹 페이지에는 나타나지 않더라도 레이아웃 내에는 여전히 존재하게 되며, 코드 내에도 당연히 존재하게 된다.
visibility 속성을 자바스크립트와 함께 사용하면 매우 복잡한 메뉴나 레이아웃을 손쉽게 만들 수 있다.

visibility 속성에 사용할 수 있는 속성값은 다음과 같다.

  1. visible : 해당 HTML 요소를 웹 페이지에 나타낸다.
  2. hidden : HTML 요소를 웹 페이지에 나타내지 않습니다. 하지만 여전히 웹 페이지의 레이아웃에는 존재한다.
  3. collapse : 이 속성값은 동적인 테이블에서만 사용할 수 있으며, 테이블의 테두리를 한 줄만 보여준다.

HTML 요소 숨기기

HTML 요소를 숨기기 위해서는 display 속성값을 none으로 설정하면 된다. 이렇게 하면 해당 요소는 웹 페이지에 더 이상 나타나지 않으며, 웹 페이지의 레이아웃에도 영향을 미치지 않는다.

또한, visibility 속성값을 hidden으로 설정해도 HTML 요소를 숨길 수 있다. 하지만 display 속성값을 none으로 설정한 것과는 달리, 눈에 보이지만 않을 뿐 여전히 웹 페이지의 레이아웃에는 존재하게 된다.

<style>
    p.none { display: none; }
    p.hidden { visibility: hidden; }
</style>

따라서 민감하거나 귀중한 데이터를 visibility 속성을 이용하여 감추는 것은 바람직하지 않다.

opacity 속성

opacity 속성을 이용하면 HTML 요소의 투명도를 간단히 조절할 수 있다. opacity 속성값은 0.0부터 1.0까지 설정할 수 있으며, 속성값이 0에 가까울수록 투명한 상태가 된다.

익스플로러 8과 그 이전 버전에서는 투명도를 표현하기 위해 다음과 같은 문법을 사용한다.

문법

filter:alpha(opacity=x)

여기서 x값은 0부터 100까지 설정할 수 있으며, x값이 0에 가까울수록 투명한 상태가 된다.

다음 예제는 대부분의 웹 브라우저뿐만 아니라 익스플로러 8과 그 이전 버전에서도 투명도를 정확하게 표현하는 예제이다.

<style>
    img { opacity: 0.4; filter: alpha(opacity=40); }
    img:hover { opacity: 1.0; filter: alpha(opacity=100); }
</style>