[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
+139 -70
View File
@@ -2,92 +2,161 @@
id: wiki-2026-0508-css-media-queries
title: CSS Media Queries
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: []
aliases: [Media Query, "@media"]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
tags: [uncategorized]
confidence_score: 0.9
verification_status: applied
tags: [css, responsive, media-query, frontend]
raw_sources: []
last_reinforced: 2026-05-08
last_reinforced: 2026-05-10
github_commit: pending
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
language: CSS
framework: none
---
# [[CSS Media Queries|CSS Media Queries]]
# CSS Media Queries
## 📌 한 줄 통찰 (The Karpathy Summary)
CSS Media Queries(미디어 쿼리)는 뷰포트 너비, 화면 해상도, 방향 등의 특정 조건에 따라 각기 다른 CSS 스타일을 적용할 수 있게 해주는 규칙이다 [1, 2]. 이는 반응형 웹 디자인의 논리적 토대를 형성하며, 다양한 디바이스에 맞춰 단일 코드베이스로 레이아웃을 유연하게 조정할 수 있도록 돕는다 [1-3]. 또한, 특정 조건에서만 필요한 스타일을 분리하여 브라우저의 초기 렌더링 차단 현상을 방지하는 등 웹 성능 최적화에도 필수적인 역할을 한다 [4, 5].
## 한 줄
> **"매 viewport / user preference 의 conditional CSS"**. Media Queries 는 device width, color scheme, motion preference condition 의 styling 의 적용. 2026 Container Queries 의 출현 에도 viewport-level adaptation 의 표준.
## 📖 구조화된 지식 (Synthesized Content)
- **반응형 디자인의 논리적 기반:** 미디어 쿼리는 뷰포트 너비뿐만 아니라 고해상도 디스플레이, 다크/라이트 모드, 가로/세로 화면 방향 등의 조건에 반응하여 각기 다른 CSS 규칙을 적용할 수 있게 해준다 [2, 6]. 이를 통해 모바일용과 데스크톱용 페이지를 따로 만들 필요 없이 유기적으로 적응하는 레이아웃을 구성할 수 있다 [1, 2].
- **모바일 우선 설계 ([[Mobile-First Approach|Mobile-First Approach]]):** 미디어 쿼리 작성 시 가장 작은 화면(모바일)을 위한 기본 스타일을 먼저 정의한 후, `min-width` 쿼리를 사용해 화면이 커짐에 따라 점진적으로 복잡한 레이아웃이나 요소를 추가하는 것이 권장된다 [7-9]. 이 방식은 불필요한 스타일 덮어쓰기를 방지하여 코드를 논리적이고 유지보수하기 쉽게 만들어준다 [9].
- **중단점(Breakpoints) 설정 원칙:** 특정 디바이스의 해상도 규격에 맞춰 중단점을 정하기보다는, 화면을 줄이거나 늘릴 때 콘텐츠의 레이아웃이 깨지기 시작하는 지점을 기준으로 설정해야 한다 [10]. 실무에서는 통상적으로 모바일(480px 이하), 태블릿(481~1024px), 데스크톱(1200px 이상) 등과 같은 구간을 활용한다 [2, 6, 10].
- **렌더링 성능 최적화 (Optimizing Render [[Blocking|Blocking]]):** 브라우저는 CSS 파싱을 완료하기 전까지 화면 렌더링을 차단하지만, 미디어 쿼리를 활용하면 이 문제를 완화할 수 있다 [4]. HTML `<link>` 태그에 `media` 속성을 명시하여 인쇄용(print)과 같이 당장 필요하지 않은 스타일 시트를 분리하면, 브라우저가 해당 파일을 다운로드하더라도 렌더링 과정을 차단하지 않아 페이지 로딩 속도를 향상시킬 수 있다 [4, 5, 11].
- **뷰포트 한계와 컴포넌트 중심 설계로의 진화:** 뷰포트 기반 미디어 쿼리는 화면 전체 크기에 반응할 뿐, 컴포넌트가 실제로 속해 있는 부모 컨테이너의 가용 공간을 인식하지 못하는 근본적인 한계를 지닌다 [12]. 따라서 디자인 시스템이나 모듈화된 설계를 위해, 2026년 현재는 부모 컨테이너의 크기에 맞춰 컴포넌트가 스스로 형태를 변경하는 컨테이너 쿼리([[Container Queries|Container Queries]])와 미디어 쿼리를 병행해서 사용하는 것이 표준으로 자리 잡았다 [12-14].
## 매 핵심
## 🔗 지식 연결 (Graph)
- **Related Topics:** [[반응형 디자인|반응형 디자인]], Container Queries, Mobile-First Design, [[CSS Performance Optimization|CSS Performance Optimization]]
- **Projects/Contexts:** [[실무에서 CSS 관리하는 방법|실무에서 CSS 관리하는 방법]], [[디자인 시스템 개념|디자인 시스템 개념]]
- **Contradictions/Notes:** 소스에서는 뷰포트 기반의 미디어 쿼리만으로는 완벽한 재사용 컴포넌트를 만드는 데 제약이 있다고 지적한다. 사이드바나 모달 등 다양한 컨텍스트(공간)에 독립적으로 반응해야 하는 컴포넌트를 설계할 때는 미디어 쿼리보다 컨테이너 쿼리를 사용하는 것이 더 적합하며, 이는 최근 반응형 디자인의 패러다임이 페이지 수준에서 컴포넌트 수준으로 이동했음을 보여준다 [12, 14-16].
### 매 query types
- **Width**: `min-width`, `max-width` — viewport 크기
- **Orientation**: `portrait`, `landscape`
- **User preference**: `prefers-color-scheme`, `prefers-reduced-motion`, `prefers-contrast`
- **Resolution**: `min-resolution: 2dppx` (Retina)
- **Hover capability**: `hover: hover` vs `hover: none`
- **Pointer**: `pointer: fine` vs `coarse`
---
*Last updated: 2026-04-26*
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
**언제 이 지식을 쓰는가:**
- *(TODO)*
**언제 쓰면 안 되는가:**
- *(TODO)*
## 🧪 검증 상태 (Validation)
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌:** 없음
- **정책 변화:** 없음
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
### 매 Range syntax (2026 표준)
```css
@media (width >= 768px) { ... }
@media (400px <= width <= 800px) { ... }
```
## 🤔 의사결정 기준 (Decision Criteria)
### 매 Mobile-first vs Desktop-first
- **Mobile-first** (권장): base = mobile, `min-width` 의 add — 매 cascade 친화적
- **Desktop-first**: base = desktop, `max-width` 의 override — 매 legacy
**선택 A를 써야 할 때:**
- *(TODO)*
### 매 응용
1. Responsive breakpoint.
2. Dark mode (`prefers-color-scheme`).
3. Accessibility (`prefers-reduced-motion`).
4. Print stylesheet (`@media print`).
5. High-DPI image (Retina).
**선택 B를 써야 할 때:**
- *(TODO)*
## 💻 패턴
**기본값:**
> *(TODO)*
### Mobile-first breakpoints
```css
/* base: mobile */
.card { padding: 1rem; font-size: 14px; }
## ❌ 안티패턴 (Anti-Patterns)
@media (width >= 640px) { .card { padding: 1.5rem; } }
@media (width >= 1024px) { .card { font-size: 16px; } }
@media (width >= 1440px) { .card { padding: 2rem; } }
```
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
### Dark mode
```css
:root {
--bg: #fff;
--fg: #111;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0a0a0a;
--fg: #f5f5f5;
}
}
body { background: var(--bg); color: var(--fg); }
```
### Reduced motion (a11y)
```css
.fade { transition: opacity 0.4s ease; }
@media (prefers-reduced-motion: reduce) {
.fade { transition: none; }
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
```
### Hover-only enhancements
```css
@media (hover: hover) and (pointer: fine) {
.btn:hover { background: #eee; transform: scale(1.02); }
}
```
### Print stylesheet
```css
@media print {
nav, .ads, .comments { display: none; }
body { font-size: 12pt; color: #000; background: #fff; }
a::after { content: " (" attr(href) ")"; }
}
```
### JS 의 matchMedia
```js
const dark = window.matchMedia('(prefers-color-scheme: dark)');
dark.addEventListener('change', (e) => {
document.documentElement.dataset.theme = e.matches ? 'dark' : 'light';
});
```
### Container Query (2026 표준, MQ 와 의 보완)
```css
.card-host { container-type: inline-size; }
@container (width >= 400px) {
.card { display: grid; grid-template-columns: 120px 1fr; }
}
```
## 매 결정 기준
| 상황 | Approach |
|---|---|
| Viewport-level layout | Media Query |
| Component-level adaptation | Container Query |
| 사용자 preference (dark/motion) | `prefers-*` MQ |
| JS 의 query check | `matchMedia` |
| Print styling | `@media print` |
**기본값**: mobile-first + range syntax (`width >=`).
## 🔗 Graph
- 부모: [[CSS]] · [[Responsive Design]]
- 변형: [[Container Queries]] · [[matchMedia]]
- 응용: [[Dark Mode]] · [[Accessibility]]
- Adjacent: [[CSS Grid]] · [[Flexbox]] · [[CSS Variables]]
## 🤖 LLM 활용
**언제**: responsive breakpoint, dark mode, a11y motion handling 의 generation.
**언제 X**: component-level adaptation (Container Query 의 사용).
## ❌ 안티패턴
- **Device-targeted MQ**: `iPhone`, `iPad` 의 device sniff — 매 width-based 의 사용.
- **너무 many breakpoints**: 5개 이상 의 maintenance hell — 매 3-4개 의 기본.
- **`prefers-reduced-motion` 의 무시**: a11y 위반.
- **`max-width` desktop-first**: cascade 의 복잡 — 매 mobile-first.
## 🧪 검증 / 중복
- Verified (MDN Media Queries, CSS Media Queries Level 4/5).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — MQ patterns + range syntax + container queries |