CSS 미디어 쿼리(Media Query) 딥다이브
서론
반응형 웹(Responseive Web Design, RWD)
을 구현하다 보면, 필연적으로 마주하게 되는게 Media Query
이다.
이번에 강의를 들으면서, Media Query
에 대해 간단하게 학습해보게 되었다.
강의 내용으로는 성에 차지 않아, 좀 더 깊게 탐구해보게 되었다.
Media Query란?
미디어 쿼리를 사용하면 디바이스의 미디어 유형(예: 인쇄 vs. 화면) 또는 화면 해상도, 방향, 화면 비율, 브라우저 뷰포트의 너비 또는 높이, 사용자의 선호도(예: 감소된 모션 선호, 데이터 사용, 투명도)와 같은 기타 기능이나 특성에 따라 CSS 스타일을 적용할 수 있습니다.
- 출처 : MDN
우리가 보는 웹 화면은 모니터, 태블릿, 스마트폰 등 다양한 미디어 매체를 통해 보여지고 있다.
그리고, 이런 미디어 기기들은 화면 사이즈, 비율과 같이 각각의 특성을 가지고 있다.
이런 특성을 고려해서, 사용자의 미디어 매체를 기반으로 특정 유형과 특정 조건에 대해 원하는 스타일을 정의하는 방법이 곧 미디어 쿼리이다.
Media Query 문법
미디어 쿼리는 선택적인 미디어 타입과 여러 개의 미디어 특징 표현식으로 구성되며, 논리 연산자를 사용하여 다양한 방식으로 조합할 수도 있습니다. 미디어 쿼리는 대소문자를 구분하지 않습니다.
- 출처 : MDN
기본적으로 미디어 쿼리는 CSS
의 at-rule
문법을 따르며, 다음과 같이 표현된다.
@media 조건문 {
적용할 css 스타일
}
그리고 조건문은 다음과 같이 표현된다.
미디어 유형 and (미디어 특성)
미디어 쿼리는 미디어 유형과 미디어 특성으로 구성되는 '참' 또는 '거짓'의 값을 갖는 논리식이다.
미디어 유형이 screen
이고, 미디어 특성이 width:768px
일 경우 다으모가 같이 표현할 수 있다.
screen and (width: 768px)
이 논리식은 미디어 유형이 screen
이 고, 너비가 768px
이상인 기기에서 '참'이 되며, 그렇지 않을 경우 '거짓'이 된다.
미디어 쿼리를 작성할 경우, 미디어 특성은 괄호로 감싸 표현하며, 각 미디어 유형과 미디어 특성은 생략이 가능하다.
screen // 미디어 특성이 생략된 경우
(min-width:768px) // 미디어 유형이 생략된 경우
미디어 유형과 미디어 특성을 모두 작성하고자 할 때는 and
키워드로 미디어 유형과 미디어 특성을 구분 짓는다.
screen and (min-width:768px)
또한, 연산자를 사용하여 여러 미디어 특성을 결합하여 좀 더 복잡하고 다양한 미디어 쿼리를 작성할 수 있다.
screen and (min-width:768px) and (max-width:1024px)
미디어 유형(Media Types)
<media-type>
는 장치의 일반적인 유형을 설명합니다.only
논리 연산자를 사용할 때를 제외하면, 미디어 타입은 선택 사항이며 기본적으로all
타입이 적용됩니다.
- 출처 : MDN
미디어 유형은 딱 3가지가 존재한다.
미디어 유형 | 설명 |
---|---|
all | 모든 장치 |
인쇄된 문서 및 출력 미리보기 모드 | |
screen | 컴퓨터 화면, 태블릿, 스마 트폰 등 화면 기반 장치 |
미디어 유형은 선택 사항이며, 기본적으로 all
타입이 적용된다. (미디어 유형을 생략하면 all
타입이 적용된다.)
미디어 특성(Media Features)
미디어 특성(Media Features)은 사용자 에이전트(User Agent)나 디바이스(Device)의 특정 속성을 나타내며, 이를 기반으로 반응형 스타일을 적용할 수 있다.
미디어 특성의 기본 구조
미디어 특성은 항상 괄호 안에 위치하며, 다음과 같은 형식으로 작성된다.
- 미디어 특성 예시
- 예제
(미디어 특성: 값)
@media (min-width: 768px) {
body {
background-color: lightblue;
}
}
미디어 특성의 유형
미디어 특성은 두 가지 유형으로 나뉜다.
- Discrete 타입
- Range 타입
Discrete 타입
특정한 값들로 이루어진 집합을 갖는 타입이다. (예: [true, false]
, 특정 키워드 집합 등)
값 간의 크기 비교가 불가능하며, min-
또는 max-
접두사를 사용할 수 없다.
@media (orientation: portrait) {
body {
background-color: lightgray;
}
}
화면이 세로 모드일 때 스타일을 적용하는 예시이다.
Range 타입
특정한 범위를 갖는 타입이다. (예: width
, height
, resolution
등)
값 간의 크기 비교가 가능하다.
min-
, max-
접두사를 붙일 수 있다.
@media (min-width: 768px) and (max-width: 1024px) {
body {
background-color: yellow;
}
}
화면 너비가 768px
이상이고, 1024px
이하일 때 스타일을 적용하는 예시이다.
미디어 쿼리의 표준화
미디어 쿼리는 W3C(World Wide Web Consortium)에서 여러 단계(Level)을 거쳐 발전해 왔으며, 현재 레벨 5까지 표준화 과정이 진행되고 있다.
이걸 설명하는 이유는, 발전사에 따라, 레벨에 따라 미디어 특성의 유형이 추가되어 왔기 때문이다.
즉, 상황에 따라서는 구형 브라우저에서 지원이 안될 가능성이 있기에 알아두면 좋다.