CSS 입문 | CSS3 확장 | 미디어 쿼리

미디어 쿼리(media query)

CSS2에서는 @media 규칙을 통해 서로 다른 매체 유형(media type)을 위한 맞춤식 스타일 시트(style sheet)를 지원한다.
예를 들면, HTML 문서가 스크린에 표현될 때와 프린트할 때 서로 다른 스타일을 적용할 수 있다.

CSS3에서는 @media 규칙을 더욱 발전시켜 매체 유형(media type)과 하나 이상의 표현식(expression)으로 구성된 미디어 쿼리(media query)를 사용할 수 있다.
미디어 쿼리(media query)는 width, height, color 속성과 같은 미디어 관련 속성을 이용한 표현식을 통해 스타일이 적용되는 범위를 조절할 수 있다.
미디어 쿼리를 사용하면 콘텐츠(content)를 별도로 변경하지 않아도 웹 페이지에 접속하고 있는 기기에 알맞은 형태로 스타일이 조정된다.

CSS3 미디어 쿼리(media query) 지원 버전

CSS3 미디어 쿼리(media query)를 지원하는 주요 웹 브라우저의 버전은 다음과 같다.
브라우저별로 벤더 프리픽스(vendor prefix)를 이용해 이 기능을 최초로 지원한 버전도 같이 표기했다.

규칙 ie chrome firefox safari opera
@media 9.0 21.0 3.5 4.0 9.0

미디어 쿼리 문법

다음은 같은 파일 내의 <style>태그 안에 미디어 쿼리가 위치할 경우의 문법이다.

문법

@media only|not 매체유형 and (표현식) { CSS스타일코드; }

또 다른 방법으로는 외부 CSS 파일에 미디어 쿼리를 따로 저장할 수도 있다.

문법

<link rel="stylesheet" media="매체유형 and|only|not (표현식)" href="CSS파일URL"/>

만약 웹 페이지에 접속하고 있는 기기의 매체 유형과 명시된 매체 유형이 일치하고, 모든 표현식이 참(true)이면, 미디어 쿼리는 참(true)을 반환한다.
이렇게 미디어 쿼리의 반환값이 참이면, 해당 블록 안에 명시된 CSS 스타일 코드가 실행됩니다.
여기에 and, only, not 등과 같은 키워드를 사용하여 더욱 복잡한 조건을 명시할 수도 있다.

CSS3 매체 유형(media type)

CSS3의 매체 유형은 이전 CSS2에서 정의된 것을 그대로 사용하고 있다.
다음은 자주 사용되는 매체 유형(media type)이다.

매체 유형 설명
all 모든 매체에 사용함.
print 프린터 기기에 사용함.
screen 컴퓨터나 태블릿, 스마트폰 등 스크린(screen)이 있는 매체에 사용함.
speech 웹 페이지를 읽어주는 스크린 리더(screenreader)에 사용함.

CSS3 미디어 쿼리(media query) 속성

속성 설명
width 화면의 너비
height 화면의 높이
device-width 매체 화면의 너비
device-height 매체 화면의 높이
devie-aspect-ratio 매체 화면의 비율
orientation 매체 화면의 방향
color 매체의 색상 비트 수
color-index 매체에서 표현 가능한 색상의 개수
monochrome 흑백 매체에서의 픽셀당 비트 수
resolution 매체의 해상도

위의 속성 중에서 orientation 속성을 제외한 모든 속성의 앞에는 min 또는 max 접두사를 사용할 수 있다. 위의 속성들을 적절히 활용하면 반응형 웹 사이트를 손쉽게 제작할 수 있다.

CSS3 미디어 쿼리(media query)

예제

다음 예제는 뷰포트(viewport)의 너비가 480픽셀이거나 그 이상일 경우에 배경색을 darkorange로 표현해 준다.
하지만 뷰포트의 너비가 그 이하일 경우에는 배경색을 lightblue로 변경한다.

<style>
    body { background-color: darkorange; }
    @media screen and (min-width: 480px) {
        body { background-color: lightblue; }
    }
</style>

다음 예제를 웹 브라우저에서 실행하면 배경색을 검정색으로, 텍스트의 색상은 흰색으로 표현한다. 하지만 웹 페이지를 프린트하게 되면 배경색을 흰색으로, 텍스트의 색상을 검정색으로 바꿔서 프린트한다.

<style>
    @media screen {
        body { background-color: black; color: white; }
    }
    @media print {
        body { background-color: white; color: black; }
    }
</style>

이처럼 미디어 쿼리를 이용하면 매체에 따라 다른 동작을 하도록 손쉽게 설정할 수 있다.