CSS 미디어쿼리(Media Query)는 웹 페이지가 다양한 디바이스와 화면 크기에 맞게 반응형으로 동작하도록 스타일을 적용하는 방법.
즉, 화면의 크기, 해상도, 방향(세로/가로), 디바이스 유형에 따라 다른 CSS 스타일을 적용할 수 있음.
@media (조건) {
/* 조건이 참일 때 적용할 CSS */
selector {
property: value;
}
}
예시
@media screen and (max-width: 500px) {
/* 스크린의 너비가 500px 이하일 경우 적용될 스타일 시트를 작성합니다. */
}
@media
는 미디어 쿼리를 시작할 때 사용하는 CSS 규칙screen
은 미디어 타입(media type)을 지정print
(인쇄용), speech
(음성 합성 장치용) 같은 다른 타입도 존재합니다.max-width: 500px
는 뷰포트(viewport)의 너비가 500px 이하일 때 스타일이 적용된다는 조건.and
는 여러 조건을 결합할 때 사용screen
과 max-width: 500px
조건이 모두 참일 때 스타일이 적용`
/* 기본 스타일 */
body {
background-color: white;
font-size: 16px;
}
/* 화면 너비가 768px 이하일 때 */
@media (max-width: 768px) {
body {
background-color: lightgray;
font-size: 14px;
}
}
@media (orientation: landscape) {
body {
background-color: lightblue;
}
}
@media (orientation: portrait) {
body {
background-color: lightgreen;
}
}
max-width
: 특정 너비 이하일 때 적용min-width
: 특정 너비 이상일 때 적용orientation
: landscape
(가로), portrait
(세로)resolution
: 화면 해상도에 따라 적용 (예: 레티나 디스플레이 대응)미디어쿼리를 사용하면 하나의 CSS 파일로 PC, 태블릿, 모바일 등 다양한 환경에 맞춰 웹 페이지를 만들 수 있음. 그래서 요즘은 거의 필수적으로 사용됨
Viewport는 웹 페이지가 표시되는 디바이스의 화면 영역을 말함. 즉, 사용자가 보고 있는 화면의 가시 영역(visible area).
과거에는 웹 페이지가 데스크탑에 맞춰 만들어졌기 때문에 모바일에서 보면 글자나 레이아웃이 너무 작게 보였음. 이 문제를 해결하기 위해 Viewport 설정이 중요해짐.
HTML의 <head>
태그 안에 아래와 같이 작성:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
width=device-width
→ 디바이스의 화면 너비에 맞게 페이지를 표시 initial-scale=1.0
→ 페이지의 초기 확대/축소 비율을 1로 설정 (100%) 1️⃣ Viewport 설정이 없는 경우
2️⃣ Viewport 설정이 있는 경우
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=no">
maximum-scale=1.5
→ 최대 확대 비율을 1.5배로 제한 user-scalable=no
→ 사용자가 확대/축소하는 기능 비활성화 BreakPoint란 반응형 웹 페이지에서 디자인이나 레이아웃이 변화하는 기준점을 의미.
간단히 말하면, PC, Tablet, Mobile과 같은 기기 유형에 따라 레이아웃을 조절하기 위해 설정하는 화면 너비 기준
이 기준점이 되는 너비를 설정함으로써, 다양한 화면 크기에서도 사용자에게 최적화된 UI를 제공할 수 있음.
크기 | BreakPoint |
---|---|
Mobile | 0 ~ 767px |
Tablet | 768px ~ 1923px |
PC | 1024px ~ 1439px |
PC Large | 1440px 이상 |
이 표는 가장 일반적인 규격일 뿐이며, 프로젝트의 목적이나 타겟 사용자에 따라 더 세분화하거나 단순화할 수 있음.
/* 모바일용 스타일 */
@media (max-width: 767px) {
body {
background-color: lightgray;
font-size: 14px;
}
}
/* 태블릿용 스타일 */
@media (min-width: 768px) and (max-width: 1023px) {
body {
background-color: lightblue;
font-size: 16px;
}
}
/* PC용 스타일 */
@media (min-width: 1024px) {
body {
background-color: white;
font-size: 18px;
}
}
max-width
/ max-height
max-width: 1240px; /* 가로 최대 1240px로 제한 */
max-height: 100vh; /* 세로 최대 화면 높이(100vh)로 제한 */
min-width
/ min-height
min-width: 720px; /* 가로 최소 720px로 설정 */
min-height: 30%; /* 세로 최소 30%로 설정 */
max()
height: max(320px, 20%); /* 320px과 20% 중 더 큰 값이 적용됨 */
min()
width: min(1240px, 100%); /* 1240px과 100% 중 더 작은 값이 적용됨 */