미디어 쿼리
미디어 쿼리
미디어 쿼리 소개
각 미디어 매체에 따라 다른 스타일 시트를 적용할 수 있게 만드는 것
미디어 매체 : 스크린 매체, 프린트, 스크린 리더기
동일한 웹 페이지를 다양한 환경의 사용자들에게 최적화된 경험을 제공할 수 있게 해줌
CSS2 미디어 타입
동일한 미디어 타입에서 광범위하게 적용
미디어 타입을 제대로 지원하는 기기가 없어 제대로 활용되지 못함
미디어 쿼리
웹이 발전하면서 대응해야 하는 미디어의 폭이 늘어남
W3C는 CSS2의 미디어 타입을 확장하여 CSS3 미디어 쿼리를 발표하였다.
이 미디어 쿼리로 인해 웹 사이트를 제작함에 있어 정적인 고정 레이아웃 웹 사이트에서 동적으로 반응하는 웹 사이트로 패러다임이 변화하였다.
미디어 타입 & 미디어 특성
@media(at media)
@media mediaqueries{/*style rules*/}
@media 로 시작하며 이제부터 미디어 쿼리를 시작한다 라는 뜻
미디어 쿼리문은 논리적으로 평가되며 참일 때만 뒤에 나오는 규칙이 적용된다.
미디어 타입
all, braille, embossed, handheld, print, projection, screen, speech, tty, tv
- screan : 화면을 출력하는 display
- print : 인쇄할 때 사용
- all : 모든 미디어에 적용. 미디어를 구분하지는 않음
미디어 특성
width, height, device-width, device-height, orientation, aspect-ratio, device-aspect-ratio, color, color-index, monochrome, resolution, scan, grid
- width : 뷰포트의 너비, 브라우저 창의 너비
- orientation : 세로모드인지 가로모드인지 구분
Syntax
media_query_list
: S* [media_query [ ',' S* media_query ]* ]?
;
media_query
: [ONLY | NOT]? S* media_type S* [ AND S* expression ]*
| expression [ AND S* expression ]*
;
expression
: '(' S* media_feature S* [ ':' S* expr ]? ')' S*
;
S*
: 공백, 없는 걸로 간주[]
: 생략 가능A|B
: A or BA?
: A가 0 or 1 번만 나올 수 있음-
A*
: A가 0 or 1 or … n 번 나올 수 있음 - media_query_list
여러 개의 미디어 쿼리로 이루어진 리스트로 작성 가능하며, 쉼표를 이용해서 구분 - media_query
미디어 타입 또는 표현식 단독으로 작성할 수 있다 - expression
표현식은 값이 없이 특성 이름만으로 작성할 수 있다
min-/max- 접두사
미디어 특성은 이름 앞에 min-또는 max-접두사를 붙일 수 있다.
접두사 없이 width: 00px 이라고 선언하게 되면 뷰포트의 크기가 정확히 00px 일 때만 적용되기 때문에 다양한 기기들을 대응하기 힘들다.
orientation, grid, scan에는 접두사를 붙일 수 없다.
media_query
@media screen {...}
: 미디어 타입이 screen이면 적용@media screen and(min-width:768px) {...}
: 미디어 타입이 screen이고 width가 768px 이상이면 적용@media (min-width:768px) and (max-width: 1024px) {...}
: and 키워드로 연결된 모든 표현식이 참이어야 적용@media (color-index)
: 미디어 장치가 color-index를 지원하면 적용@media screen and (min-width: 768px), screen and (orientation: portrait), ...
: 쉼표로 연결된 미디어 쿼리 중 하나라도 참이면 적용 (and 키워드와 반대)@media not screen and (min-width: 768px)
: not 키워드는 하나의 media_query 전체를 부정
(not screen) and (min-width: 768px)
: O
not (screen and (min-width: 768px))
: X
@media not screen and (min-width: 768px), print
: 첫 번째 미디어 쿼리에만 not 키워드가 적용되며, 두 번째 미디어 쿼리(print)에는 영향을 미치지 않는다.
미디어 쿼리 선언
@media
css 파일,<style>
태그 안에 선언<link rel="stylesheet" media="screen and (color)" href="example.css">
<link>
태그의 media 속성에 미디어 쿼리를 선언@import url(example.css) screen and (color);
@import 문 뒤에 미디어 쿼리를 선언
viewport의 이해
모바일 브라우저에서 데스크탑 모니터 사이즈의 웹페이지를 보기 위해 뷰포트라는 가상의 화면을 만들고 그 화면에 페이지를 나타낸다.
여기서 실제 스마트폰의 스크린 사이즈와 뷰포트 사이즈의 차이가 발생한다.
기존 웹 페이지를 모바일 브라우저로 보게 되면 가로 스크롤 없이 화면에 딱 맞게 보인다.
스크롤 하지 않아도 내용이 다 보이지만 글자나 그림들이 작아지기 때문에 가독성이 매우 떨어진다.
그래서 모바일 safari에서 뷰포트를 설정할 수 있는 태그를 도입해서 크기와 스케일을 조정할 수 있게 되었다.
뷰포트 설정
뷰포트를 설정하는 태그는 <head>
내의 <meta>
태그이다.
<meta name="viewport" content="뷰포트의 설정 값">
content 설정값
- width(height)
뷰포트의 가로(세로) 크기를 지정
px 단위의 수치가 들어갈 수 있지만, 대부분 device-width(height)를 사용한다. - initial-scale
페이지가 처음 나타날 때 초기 줌 레벨 값을 설정 (소수값) - user-scalable
사용자의 확대/축소 기능을 설정할 수 있다.
<meta name="viewport" content="width=device-width, initial-scale=1.0">