미디어 쿼리는 화면 해상도, 뷰포트 너비, 단말기의 유형 등에 따라 스타일을 수정할 수 있는 CSS3의 문법 중 하나이다.
오늘날 거의 모든 웹 사이트는 제각각의 크기인 스마트 디바이스들이나 여러 디스플레이에서 같은 콘텐츠를 보고 있어도 무리없이 사이트 이용을 가능케 해주는 반응형(Responsive) 기능을 탑재한 반응형 웹이 대다수이다.
/*
media-type: 미디어 유형
media-feature-rule: 미디어 특성 표현식
*/
@media media-type and|only|not (media-feature-rule){
/* css rules */
}
미디어 쿼리는 지정한 미디어 유형이 일치하고 미디어 특성 표현식이 참일 때 작성된 스타일(css rules)이 적용된다.
속성 | 설명 |
---|---|
any-hover | 입력 방식 중 호버 가능한 것 |
any-pointer | 입력 방식 중 포인팅 가능한 것 |
color | 출력 장치의 색상 채널별 비트 수, 흑백일 땐 0 |
color-gamut | 사용자 에이전트(브라우저)와 출력 장치가 지원하는 색상의 대략적인 범위 |
color-index | 출력 장치의 색상 검색 테이블 항목 수, 부재 시 0 |
forced-colors | 사용자 에이전트(브라우저)가 색상 팔레트를 제한하는 지 여부 |
grid | 장치가 그리드와 비트맵 스크린 중 어느 것을 사용하는 지 |
inverted-colors | 사용자 에이전트(브라우저)나 운영체제가 색상을 반전 중인가? |
overflow-block | 콘텐츠가 블록 축 방향으로 뷰포트를 넘어갈 경우 출력 장치가 어떻게 처리할 지 |
overflow-inline | 위와 동일(블록 -> 인라인) |
prefers-color-scheme | 흑/백 중 사용자가 더 선호하는 것 |
prefers-contrast | 사용자가 시스템에 고대비를 요청했는지 |
prefers-reduced-motion | 사용자가 줄어든 움직임을 선호 |
resolution | 출력 장치의 픽셀 밀도 |
scripting | JavaScript등 스크립트 사용 가능 여부 탐지 |
update | 출력 장치가 콘텐츠 외형을 수정할 수 있는 주기 |
width | (스크롤 바를 포함한)뷰포트의 너비 |
height | 뷰포트의 높이 |
orientation | 뷰포트의 방향 |
aspect-ratio | 뷰포트의 가로세로비 |
not, and, only를 사용해 복잡한 쿼리를 조합할 수 있다. 여러 미디어 쿼리를 쉼표로 구분해 하나의 규칙으로 만들 수 있다.
and 연산자는 다수의 미디어 특성을 조합해 하나의 미디어 쿼리를 만들 때 사용한다. 쿼리가 참이려면 모든 미디어 특성이 참이어야 한다.
not 연산자는 미디어 쿼리를 부정하여, 쿼리가 거짓일 때만 참을 반환한다. 쉼표로 구분한 쿼리에 사용할 경우 전체가 아닌 구분된 부분의 쿼리에만 적용된다. not 연산자를 사용한 경우, 반드시 미디어 유형도 지정해야 한다.
💡 참고로 Level 3 모듈에서는 단일 부정이 안되고 전체 부정만 가능하다.
only 연산자는 전체 쿼리가 일치할 때만 스타일을 적용하며 오래된 브라우저가 스타일을 잘못 적용하는 것을 방지할 때 유용하다. only 연산자를 사용할 경우, 반드시 미디어 유형도 지정해야 한다.
쉼표는 여러 미디어 쿼리를 하나로 묶을 때 사용한다. 쉼표로 구분된 쿼리 각각 중 하나라도 참일 시, 전체가 참으로 적용된다. (or과 같다)
❕주의할 것
@media not all and (monochrome) { ... } /* 위 구문은 */ /* 다음과 같이 평가된다. */ @media not (all and (monochrome)) { ... } /* 그리고 아래 구문은 */ @media not screen and (color), print and (color) { ... } /* 다음과 같이 평가된다. */ @media (not (screen and (color))), print and (color) { ... }
only 키워드는 미디어 기능을 가진 미디어 쿼리를 지원하지 않는 구형 브라우저가 주어진 스타일을 적용하지 못하게 한다. 신형 브라우저에는 아무런 영향을 주지 않는다.
@media only screen and (color) { ... }
미디어 쿼리 Level 4 부터는 향상된 기능의 구문을 사용할 수 있다. 대표적으로 3가지를 보자면,
❕주의
미디어 쿼리 Level 4 사양에는 다수의 최신 브라우저들을 지원하지만, 몇몇 미디어 기능들은 지원되지 않으니 browser compatibility table 참조 필요
출처: https://developer.mozilla.org/ko/docs/Web/CSS/Media_Queries/Using_media_queries