
선언방법 : @media media queris{...}
미디어 타입
우리가 알아야 할 타입은 all, print, screen 정도입니다. 그 중에서도 screen이 거의 대부분입니다.
all 타입은 모든 미디어에 적용되는 타입입니다. 미디어를 구분하는 용도가 아니기 때문에 유용하게 사용되지는 않습니다.
print 타입도 간혹 사용이 됩니다. 실습할 때 다룹니다. 폰트가 약간크고 프린트미리보기에서도 사용됨
화면을 출력하는 디스플레이가 있는 미디어들은 전부 screen에 속하기 때문에 현실적으로 고려해야하는 미디어들은 전부 여기에 해당이 됩니다.
미디어 특성
미디어 특성 역시 우리가 알아야 할 특성은 width와 orientation 정도입니다.
width는 뷰포트의 너비, 즉 브라우저 창의 너비를 말합니다.(스크린의 크기 x)
orientation은 미디어가 세로모드인지 가로모드인지를 구분합니다.
미디어 쿼리에서는 이 구분을 width와 height 특성의 값을 비교해서 height가 width보다 같거나 크면 세로모드
반대인 경우에는 가로모드라고 해석합니다. 세로모드에서는 portrait, 가로모드에서는 landscape 키워드와 매칭이 됩니다.
디어 쿼리 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*
;
[] 대 괄호 : 있을수도 있고 없을수도 있다, 생략이 가능하다()? : 0 or 1()* : 0or1or…n 연속적으로 계속 나올수 있다'' : 반드시 들어가야 하는 것을 작은 따옴표로 표시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*
;
media_query_list : 여러개의 미디어 쿼리로 이루어진 리스트로 작성 가능하며, 쉼표를 이용해서 구분합니다.
media_query : A 형태 - 미디어 타입에 and 키워드를 이용해서 미디어 표현식을 붙일 수 있습니다.
미디어 타잎 앞에는 only 또는 not 키워드가 올 수 있습니다.
미디어 표현식은 생략 가능하기 때문에 미디어 타입 단독으로 사용될 수 있습니다.
: B 형태 - 미디어 타입 없이 미디어 표현식이 바로 나올 수 있습니다.(미디어 타입이 명시되지 않으면 all로 간주합니다.) 미디어 표현식은 and 키워드를 이용해서 계속해서 나올 수 있습니다.
expression : 미디어 표현식은 괄호로 감싸야 하며, 특성 이름과 해당하는 값으로 이루어집니다. 이름과 값은 : 기호로 연결합니다. 또, 값이 없이 특성 이름만으로도 작성할 수 있다.
@media screen { ... }
: 미디어 타입이 screen이면 적용됩니다.
@media screen and (min-width: 768px) { ... }
: 미디어 타입이 screen이고 width가 768px 이상이면 적용됩니다. 두 개 중 하나라도 만족하지 않으면 거짓이 됩니다.
@media (min-width: 768px) and (max-width: 1024px) { ... }
: and는 연결된 모든 표현식이 참이면 적용됩니다.(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) 잘못된 해석!
: not (screen and (min-width: 768px)) 올바른 해석!
: @media not screen and (min-width: 768px), print
첫 번째 미디어 쿼리에만 not 키워드가 적용되며, 두 번째 미디어 쿼리(print)에는 영향이 없습니다.
미디어 쿼리 선언 방법
미디어 쿼리를 선언하는 3가지 방법에 대해 알아보겠습니다.
참고로 @media를 이용한 방법을 가장 많이 사용하며 나머지 2가지 방법은 거의 쓰이지 않습니다.
@media screen and (color)
: CSS 파일 내부에 또는 <style> 태그 내부에 사용가능 합니다. 대부분의 경우 이렇게 사용합니다.
<link rel="stylesheet" media="screen and (color)" href="example.css">
: <link> 태그의 media 속성에 미디어 쿼리를 선언합니다. 미디어 쿼리가 참이면 뒤에 css 파일 규칙이 적용됩니다.
@import url(example.css) screen and (color);
: CSS 파일 내부에 또는 <style> 태그 내부에 사용가능 합니다. @import문 뒤에 미디어 쿼리를 선언하면 됩니다.
@media screen{..} : 미디어 타입이 screen경우 …를 적용media screen and (min-width:768px){...} : 미디어 타입이 screen이고 width 768보다 클때 적용@media(min-width:768px) and (max-width:1024px){...}: width768보다 크면서 1024보다 작을때 적용@media(color-index) : 미디어 장치가 color index를 지원할때만 적용@media screen and (min-width:768px), screen and (oriental:portrait),... : 미디어 스크린이며 width가 768보다 클때 혹은 세로값이 긴 형태일때@media not screen and (min width)not은 뒤의 조건 하나를 부정한다 ,로 나누어진 다른 조건은 부정하지 않는다 (and는 포함한다)
not(screen and (min width))
@mediastyle태그 안쪽에 선언할수있다.
<link media="">스타일시트를 불러오는 태그에 삽입하여 적용할수 있다, 조건이 충족하지 않아도 파일은 다운받아진다
<link rel="stylesheet" media="screen and (color)" herf="example.css">
@import@import url(example.css) screen and (color);
실제로는 거의 사용되지 않는다
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>media Queries</title>
<style>
/*
@media screen and (min-width:768px) and (max-width:1024px) {
body{background-color:lightblue;}
}
@media screen and (max-width:767px) {
body{background-color:gold;}
}
@media screen and (min-width:1025px) {
body{background-color:lightpink;}
} */
/*mobile first*/
body {
background-color:gold;
}
@media screen and (min-width:768px) and (max-width:1024px) {
body{background-color:lightblue;}
}
@media screen and (min-width:1025px) {
body{background-color:lightpink;}
}
/*desktop first*/
/*
body {
background-color:lightpink;
}
@media screen and (min-width:768px) and (max-width:1024px) {
body{background-color:lightblue;}
}
@media screen and (max-width:767px) {
body{background-color:gold;}
}
*/
@media print {
a {text-decoration:none;}
a:after {
display:inline;
content: '('attr(href)')';}
}
</style>
</head>
<body>
<p>
W3C는 <a href="https://www.w3.org/TR/css3-mediaqueries/">CSS3미디어 쿼리 문서</a>를 2012년 6월에 표준 권고안으로 제정하였습니다.
</p>
<p>
또한, 기존의 미디어쿼리 개선 작업을 진행중이며, 2017년 9월에
<a href="https://www.w3.org/TR/mediaqueries-4">미디어퀄 레벨4</a>를
발표했습니다. 이 문서는 현재 유력 표준 권고안입니다.
</p>
</body>
</html>
@media screen and (min-width:768px) and (max-width:1024px) {
body{background-color:lightblue;}
{}안에 실행될 값을 입력한다@media screen and (max-width:767px) {
body{background-color:gold;}
}
@media screen and (min-width:1025px) {
body{background-color:lightpink;}
@media print {
a {text-decoration:none;}
a:after {
display:inline;
content: '('attr(href)')';}
}
{}값이 실행된다@media의 선언