Contents
see List작성일 2025. 11. 30.
반응형 웹 디자인 - Media Query 활용
Media Query를 사용하면 화면 크기, 해상도, 방향 등에 따라 다른 CSS를 적용하여 반응형 웹사이트를 만들 수 있습니다.
언제 사용하나요?
- 모바일/태블릿/데스크톱 대응
- 프린트용 스타일 지정
- 화면 방향(가로/세로)에 따른 레이아웃
- 다크 모드 대응
기본 문법
/* 기본 */
@media (조건) {
/* 조건을 만족할 때 적용될 CSS */
}
/* 화면 너비가 768px 이하일 때 */
@media (max-width: 768px) {
.container {
width: 100%;
}
}
/* 화면 너비가 768px 이상일 때 */
@media (min-width: 768px) {
.container {
width: 750px;
}
}일반적인 브레이크포인트
/* 모바일 우선 (Mobile First) */
/* 기본 스타일 = 모바일 */
/* 태블릿 (768px 이상) */
@media (min-width: 768px) {
/* 태블릿 스타일 */
}
/* 데스크톱 (1024px 이상) */
@media (min-width: 1024px) {
/* 데스크톱 스타일 */
}
/* 와이드 데스크톱 (1280px 이상) */
@media (min-width: 1280px) {
/* 와이드 데스크톱 스타일 */
}자주 사용하는 브레이크포인트
| 기기 | 너비 |
|---|---|
| 모바일 | < 576px |
| 모바일 가로 | 576px ~ 767px |
| 태블릿 | 768px ~ 991px |
| 데스크톱 | 992px ~ 1199px |
| 와이드 | ≥ 1200px |
복합 조건
/* AND 조건 */
@media (min-width: 768px) and (max-width: 1024px) {
/* 768px ~ 1024px 사이 */
}
/* OR 조건 */
@media (max-width: 600px), (orientation: portrait) {
/* 600px 이하 또는 세로 모드 */
}
/* NOT 조건 */
@media not screen and (color) {
/* 컬러 화면이 아닐 때 */
}
/* 미디어 타입 지정 */
@media screen and (min-width: 768px) {
/* 화면에서만 */
}
@media print {
/* 프린트할 때만 */
}실전 예시: 반응형 레이아웃
/* 기본 (모바일) */
.container {
display: flex;
flex-direction: column;
padding: 10px;
}
.sidebar {
width: 100%;
order: 2;
}
.main {
width: 100%;
order: 1;
}
/* 태블릿 이상 */
@media (min-width: 768px) {
.container {
flex-direction: row;
padding: 20px;
}
.sidebar {
width: 250px;
order: 1;
}
.main {
flex: 1;
order: 2;
}
}실전 예시: 반응형 네비게이션
/* 모바일: 햄버거 메뉴 */
.nav-menu {
display: none;
}
.hamburger {
display: block;
}
.nav-menu.active {
display: flex;
flex-direction: column;
}
/* 데스크톱: 가로 메뉴 */
@media (min-width: 768px) {
.nav-menu {
display: flex;
flex-direction: row;
}
.hamburger {
display: none;
}
}실전 예시: 반응형 폰트
/* 기본 폰트 (모바일) */
body {
font-size: 14px;
}
h1 {
font-size: 24px;
}
/* 태블릿 */
@media (min-width: 768px) {
body { font-size: 16px; }
h1 { font-size: 32px; }
}
/* 데스크톱 */
@media (min-width: 1024px) {
body { font-size: 18px; }
h1 { font-size: 40px; }
}
/* 또는 clamp() 사용 */
h1 {
font-size: clamp(24px, 5vw, 48px);
}특수 미디어 쿼리
/* 다크 모드 */
@media (prefers-color-scheme: dark) {
body {
background: #1a1a1a;
color: #fff;
}
}
/* 라이트 모드 */
@media (prefers-color-scheme: light) {
body {
background: #fff;
color: #000;
}
}
/* 애니메이션 줄이기 설정 */
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
}
}
/* 고해상도 디스플레이 */
@media (-webkit-min-device-pixel-ratio: 2),
(min-resolution: 192dpi) {
/* Retina 디스플레이용 고해상도 이미지 */
}
/* 프린트 */
@media print {
.no-print {
display: none;
}
body {
font-size: 12pt;
}
}viewport 메타 태그
<!-- 반응형 웹 필수 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">CSS 변수와 함께 사용
:root {
--container-width: 100%;
--font-size: 14px;
}
@media (min-width: 768px) {
:root {
--container-width: 750px;
--font-size: 16px;
}
}
.container {
width: var(--container-width);
font-size: var(--font-size);
}html
| No | 작성일 | Title |
|---|---|---|
| 3364 | 2026. 08. 16. | HTML 폼 오류를 누구나 이해하게 만드는 방법: label·aria-describedby·aria-live 실전 가이드 |
| 3332 | 2026. 08. 07. | CSS @layer로 스타일 충돌 줄이기: 대규모 웹 프로젝트 우선순위 설계 가이드 |
| 3300 | 2026. 07. 30. | CSS Container Query 실전 적용: 컴포넌트가 놓인 영역에 맞춰 반응형 만들기 |
| 3269 | 2026. 07. 22. | 접근성 있는 모달 만들기: HTML dialog와 포커스 관리 실전 가이드 |
| 3241 | 2026. 07. 14. | 반응형 이미지 최적화: picture·srcset·sizes로 모바일 전송량 줄이기 |
| 3186 | 2026. 07. 05. | HTML Popover API로 자바스크립트 드롭다운 메뉴 줄이기 |
| 3144 | 2026. 06. 27. | CSS 컨테이너 쿼리 운영 가이드: 화면이 아니라 컴포넌트 폭에 맞춰 레이아웃 바꾸기 |
| 3088 | 2026. 06. 19. | 접근성 있는 모달 창 구현: dialog, focus, 닫기 동작을 함께 설계하기 |
| 2999 | 2026. 06. 11. | HTML 폼 검증 운영 가이드: 브라우저 기본 검증과 서버 검증을 함께 설계하기 |
| 2943 | 2026. 06. 03. | CSS 컨테이너 쿼리 실전 적용: 화면이 아니라 컴포넌트 너비에 맞춰 카드 레이아웃 바꾸기 |