CSS 미디어 쿼리 생성기는 고른 조건으로 @media 규칙을 조립합니다. 미디어 유형(all, screen, print), px 또는 em 단위의 최소·최대 너비, 방향, 그리고 prefers-color-scheme, prefers-reduced-motion, prefers-contrast, hover, pointer 같은 사용자 설정을 and로 정해진 순서에 맞춰 이어 붙이고 스타일을 넣을 빈 블록을 만들어 줍니다.
결과 아래에는 오른쪽 가장자리를 끌 수 있는 가상 뷰포트가 있습니다. 눈금자 위로 끌면 직접 쓴 브레이크포인트에서 정확히 켜짐과 꺼짐이 바뀌고, 다크 모드·동작 줄이기·대비·호버·포인터 스위치로 운영체제 설정을 바꾸지 않고도 사용자 설정 조건이 어떻게 동작하는지 볼 수 있습니다.
입력한 값은 브라우저 밖으로 나가지 않습니다. 동작할 수 없는 조합은 거부합니다. 최소 너비가 최대보다 큰 경우, 범위를 벗어난 너비, 그리고 어디에나 적용되어 쓸모가 없는 조건 없는 @media all 규칙입니다.
사용 방법
예제로 시작하거나 미디어 유형 고르기
모바일 우선, 태블릿 범위, 다크 모드, 동작 줄이기, 인쇄 같은 예제를 고르거나 all, screen, print를 직접 고릅니다. all을 고르고 다른 조건이 있으면 기본값이라 유형은 출력에서 빠집니다.
너비 범위와 단위 정하기
min-width, max-width 또는 둘 다 켜고 px나 em을 고릅니다. 단위를 바꾸면 em당 16px로 값을 환산하므로 브레이크포인트 위치는 그대로 유지됩니다.
방향과 사용자 설정 더하기
세로·가로 방향, 색상 모드, 대비 설정, 호버 지원, 포인터 정밀도를 고르고 동작 줄이기를 켭니다. 상관없음으로 두면 그 조건은 출력에서 빠집니다.
뷰포트를 끌어 규칙 시험하기
가상 뷰포트의 오른쪽 가장자리를 끌거나 방향키를 누릅니다. 눈금자에 min과 max 브레이크포인트가 표시되고, 규칙이 켜진 동안 안쪽 상자가 강조됩니다. 사용자 설정 조건은 시뮬레이션 스위치로 시험합니다.
복사 후 블록 채우기
버튼이나 Ctrl 또는 Command와 Enter로 규칙을 복사하고 자리표시 주석을 실제 선언으로 바꿔 넣습니다. 공유 버튼은 현재 설정을 복원하는 링크를 만듭니다.
작동 원리
미디어 쿼리의 구조
미디어 쿼리는 선택적인 미디어 유형 뒤에 괄호로 묶은 미디어 기능을 and로 이은 것입니다. 너비, 높이, 방향은 Media Queries Level 3에 정의되어 있습니다. Level 4는 범위 비교 문법을 더하고 hover, pointer, any-hover를 정의하며, 사용자 설정 기능인 prefers-color-scheme, prefers-reduced-motion, prefers-contrast는 Level 5에 정의되어 있습니다. and로 이은 조건이 모두 참이어야 블록이 적용됩니다.
이 생성기는 미디어 유형, min-width, max-width, 방향, 색상 모드, 동작 줄이기, 대비, 호버, 포인터 순서로 조건을 고정해 출력합니다. 유형이 all이고 선택한 조건이 하나도 없으면 규칙을 만들지 않습니다. @media all은 모든 기기에 일치하기 때문입니다.
@media screen and (min-width: 768px) and (max-width: 1200px) and (prefers-reduced-motion: reduce) {
/* Add responsive styles here */
}min-width와 max-width는 경계값을 포함합니다
(min-width: 768px)는 정확히 768px인 뷰포트와 그보다 넓은 모든 뷰포트에 일치하고, (max-width: 767px)는 한 픽셀 앞에서 끝납니다. 그래서 max-width: 768px와 min-width: 768px를 각각 쓰면 768px에서 둘 다 일치하고, 충돌하는 속성은 파일에서 나중에 온 규칙이 이깁니다. 가상 뷰포트도 같은 경계 포함 비교를 씁니다.
너비 기능은 보이는 스크롤바를 포함한 뷰포트를 재며, 페이지를 확대하면 값이 달라집니다. 이 도구는 599.98처럼 소수 둘째 자리까지 허용하는데, 고해상도 화면에서 뷰포트 너비가 소수가 될 때 범위가 겹치지 않게 하려는 용도입니다.
px 브레이크포인트와 em 브레이크포인트
미디어 쿼리 안의 em은 페이지나 요소의 글꼴 크기가 아니라 언제나 브라우저의 초기 글꼴 크기, 보통 16px을 뜻합니다. 그래서 48em은 기본 상태에서 768px이고, 사용자가 브라우저 설정에서 기본 글꼴을 키우면 함께 커지는 반면 768px은 고정됩니다. 미리보기는 em을 16px로 환산합니다.
| 목적 | 쓸 조건 |
|---|---|
| 태블릿 이상 | min-width: 768px 또는 48em |
| 휴대폰만 | max-width: 767.98px |
| 태블릿만 | min-width: 768px, max-width: 1023.98px |
| 다크 모드 | prefers-color-scheme: dark |
| 애니메이션 줄이기 | prefers-reduced-motion: reduce |
| 터치 화면 | hover: none, pointer: coarse |
| 인쇄 스타일 | print 유형, 다른 조건 없음 |
사용자 설정 쿼리는 화면이 아니라 방문자를 설명합니다
prefers-color-scheme, prefers-reduced-motion, prefers-contrast: more 또는 less는 방문자가 운영체제나 브라우저에서 정한 설정을 읽습니다. hover: none과 pointer: coarse는 주 입력 장치가 마우스가 아니라 손가락이라는 뜻입니다. 이런 조건은 너비처럼 끌어서 바꿀 수 없어서 미리보기에 시뮬레이션 스위치를 둡니다.
실제 예시
유형 screen, 최소 768px, 최대 꺼짐@media screen and (min-width: 768px) {
/* Add responsive styles here */
}도구를 처음 열었을 때의 기본 상태입니다.
유형 screen, 최소 768px, 최대 1023.98px@media screen and (min-width: 768px) and (max-width: 1023.98px) {
/* Add responsive styles here */
}정확히 1024px가 되면 가상 뷰포트의 판정이 꺼짐으로 바뀝니다.
유형 all, 색상 모드 다크@media (prefers-color-scheme: dark) {
/* Add responsive styles here */
}유형 all, 최소 48em@media (min-width: 48em) {
/* Add responsive styles here */
}기본 16px 기준으로 768px과 같습니다.
유형 all, 방향 가로, 호버 불가, 포인터 거침@media (orientation: landscape) and (hover: none) and (pointer: coarse) {
/* Add responsive styles here */
}유형 all, 너비 없음, 설정 없음오류: 조건을 하나 이상 추가해 주세요결과 영역은 마지막으로 유효했던 규칙을 흐리게 계속 보여 줍니다.
자주 하는 실수
px와 em 브레이크포인트를 섞어 쓰기
한 규칙은
max-width: 767px, 다음 규칙은min-width: 48em을 쓰면 기본 글꼴을 키운 사용자에게는 둘 사이에 틈이나 겹침이 생깁니다. 한 묶음의 브레이크포인트에는 한 단위만 쓰세요.같은 너비에서 범위가 겹칩니다
양쪽 경계가 모두 포함되므로
max-width: 768px와min-width: 768px는 768px에서 둘 다 일치합니다. 작은 범위의 상한은 767.98px로 두거나 모바일 우선 순서를 분명히 지키세요.방향은 기기 종류가 아닙니다
portrait는 뷰포트 높이가 너비 이상이라는 뜻이라 좁게 줄인 데스크톱 브라우저 창도 portrait입니다. 휴대폰을 구분하는 용도로 쓰지 마세요.
동작 줄이기에서는 글이 아니라 움직임을 없애야 합니다
블록 안에서는 패럴랙스, 큰 전환, 자동 재생되는 움직임을 끕니다. 이 설정이 콘텐츠를 숨기거나 레이아웃을 바꿔 달라는 뜻은 아닙니다.
hover와 pointer는 주 입력 장치만 설명합니다
터치스크린이 달린 노트북도 마우스가 주 입력이면
hover: hover,pointer: fine으로 보고합니다. 어떤 입력이든 호버할 수 있는지 알아야 하면any-hover,any-pointer를 직접 쓰세요.print 유형은 따로 확인해야 합니다
print규칙은 인쇄할 때나 인쇄 미리보기에서만 적용되므로 가상 뷰포트에서는 켜지지 않습니다. 배경색이 기본적으로 빠지는 경우가 많으니 브라우저 인쇄 미리보기에서 확인하세요.
자주 묻는 질문
min-width와 max-width 미디어 쿼리 문법은 어떻게 되나요?
각 조건을 괄호로 묶어 and로 잇습니다. @media (min-width: 768px) and (max-width: 1200px) { ... }처럼 씁니다. 이 생성기가 대신 써 주고, screen이나 print를 고르면 유형을 맨 앞에 붙입니다.
브레이크포인트는 몇 px로 잡아야 하나요?
기기 이름이 아니라 콘텐츠가 깨지는 지점을 기준으로 잡으세요. 600, 768, 1024, 1280px 근처가 흔한 출발점이지만 표준은 없습니다. 가상 뷰포트와 만들고 있는 페이지를 함께 줄여 보며 레이아웃이 어색해지는 곳에 브레이크포인트를 둡니다.
다크 모드 미디어 쿼리는 어떻게 쓰나요?
색상 모드를 다크로 고르면 (prefers-color-scheme: dark)가 만들어집니다. 색상 덮어쓰기를 블록 안에 넣고, 미리보기에서 시뮬레이션 색상 모드를 바꿔 판정이 달라지는지 확인하세요.
prefers-reduced-motion 쿼리는 어떻게 쓰나요?
동작 줄이기를 켜면 (prefers-reduced-motion: reduce)가 추가됩니다. 블록 안에 animation: none이나 transition-duration: 0.01ms 같은 덮어쓰기를 넣으세요.
브레이크포인트는 px와 em 중 무엇을 쓰나요?
둘 다 동작합니다. em은 사용자의 기본 글꼴 크기를 따라가서 글자를 키워 읽는 사람에게 유리하고, px는 고정됩니다. 하나를 정해 모든 브레이크포인트에 일관되게 쓰세요. 단위를 바꾸면 도구가 em당 16px로 값을 환산해 줍니다.
왜 조건이 없는 미디어 쿼리는 거부하나요?
조건 없는 @media all은 모든 기기에 일치해서 미디어 쿼리가 없는 것과 같습니다. 너비, 방향, 사용자 설정 조건을 추가하거나 screen 또는 print를 고르세요.
미디어 쿼리가 적용되지 않는 이유는 무엇인가요?
모바일이라면 viewport 메타 태그를 확인하고, min-width가 실제 뷰포트보다 크지 않은지 점검하세요. 덮어써야 할 기본 규칙보다 뒤에 쓰였는지도 봅니다. 명시도가 같으면 소스 순서가 결정합니다.
마지막 업데이트:
