안녕하세요! AT SOPT YB 36기 엄지우입니다.
이번 주 블로그 만들기 과제를 하면서 반응형 웹페이지를 만들 때 어떤 것들을 활용할 수 있을지 고민해 보다가 관련 글을 작성하게 되었습니다.
목차
- 미디어 쿼리
- 타이포그래피
- 벤더 프리픽스
요즘 웹페이지는 PC, 태블릿, 모바일 등 다양한 화면에서 잘 보여야 합니다.
이걸 가능하게 해주는 핵심 도구들이 바로 미디어 쿼리, 반응형 타이포그래피, 그리고 벤더 프리픽스입니다.
이번 글에서는 이 세 가지를 정리하면서, 반응형 CSS의 기본기를 제대로 다져보겠습니다. 🤙🏻
1. 미디어 쿼리
뷰포트에 따라 스타일 바꾸기
미디어 쿼리(media query)는 화면의 너비, 높이, 해상도 등을 기준으로 스타일을 다르게 적용할 수 있게 해주는 CSS 기능입니다.
✅ 기본 문법
/* 768px 이하일 때 적용되는 스타일 */
@media (max-width: 768px) {
body {
background-color: lightgray;
}
}
/* 1024px 이상일 때 적용되는 스타일 */
@media (min-width: 1024px) {
body {
background-color: white;
}
}
✅ 실전 예시: 블로그 과제에서 사용한 코드
@media screen and (max-width: 550px) {
aside {
position: fixed;
width: 12rem;
left: 1rem;
top: 10rem;
}
section {
width: calc(100vw - 14rem);
margin-left: calc(12rem + 2rem);
}
.top-section {
grid-template-columns: repeat(2, 1fr);
}
.card-list {
justify-content: flex-start;
}
}
- 550px 이하 화면에서 레이아웃을 조정한 코드입니다.
- 사이드 내비게이션 위치를 고정시키고, 섹션 너비 및 카드 그리드를 조절했습니다.
✅ 자주 쓰는 뷰포트 기준
디바이스 | max-width 예시 |
모바일 | 480px |
태블릿 | 768px |
작은 노트북 | 1024px |
데스크탑 | 1280px 이상 |
📌 팁
- 모바일 우선(mobile-first) 접근법을 추천합니다. 기본 스타일은 모바일 기준으로 작성하고, min-width로 더 큰 화면을 점점 덮는 방식이 좋습니다.
💡 왜 모바일 우선인가?
1) 모바일 사용자 비중 ↑
- 통계적으로 대부분의 웹 트래픽은 모바일에서 발생합니다. 📱
- 모바일 기준으로 먼저 만들면 주 타깃 사용자에게 최적화된 UX를 제공할 수 있습니다.
2) CSS 코드가 더 간결해짐
- 모바일 기본 스타일을 먼저 작성하고, 더 큰 화면만 덮어씌우면 됩니다.
/* 기본: 모바일 기준 스타일 */
body {
font-size: 14px;
}
/* 데스크탑에서만 다르게! */
@media (min-width: 1024px) {
body {
font-size: 16px;
}
}
→ 이 방식은 모바일은 그대로, 큰 화면만 점진적으로 확장해 주는 구조라 훨씬 깔끔하고 예측하기 쉽습니다.
3) 점진적 향상(Progressive Enhancement)
- 모바일은 성능이 낮은 기기가 많습니다.
- 모바일 기준으로 먼저 구현하고, 고성능 환경(태블릿, PC)일 때만 스타일을 강화하면, 사용자 경험이 전반적으로 안정적입니다.
4) 로딩 속도에 유리
- 작은 CSS만 먼저 로딩되고, 미디어 쿼리에 따라 큰 화면용 스타일이 추가로 적용되기 때문에 초기 로딩 속도가 빨라질 수 있습니다.
- 모바일에서 불필요한 데스크톱 스타일을 덮어쓰는 코드 낭비가 줄어듭니다.
🆚 반대로 Desktop-First일 경우?
/* 기본: 데스크탑 기준 스타일 */
body {
font-size: 16px;
}
/* 모바일에서 덮어써야 함 */
@media (max-width: 768px) {
body {
font-size: 14px;
}
}
- 이렇게 되면 모바일에서 먼저 로딩된 스타일을 다시 덮어써야 합니다.
- 중복 스타일도 많아지고, 코드가 복잡해지고, 유지보수가 어려워질 수 있습니다.
2. 타이포그래피
clamp()와 vw 단위 활용
미디어 쿼리 없이도, 글자 크기를 화면 크기에 따라 자동으로 조절할 수 있을까요?
CSS의 clamp() 함수와 vw 단위를 활용하면 가능합니다!
✅ clamp() 기본 사용법
h1 {
font-size: clamp(1.5rem, 5vw, 3rem);
}
- 최솟값, 선호값, 최댓값을 순서대로 넣습니다.
- 위 코드는 화면이 작아도 1.5rem보다 작아지지 않고, 커도 3rem 이상으로 커지지 않습니다.
✅ vw 단위란?
- 1vw는 뷰포트 너비의 1%입니다.
- ex) 화면 너비가 1000px이면 1vw는 10px
📌 팁
- clamp()는 미디어 쿼리 없이 자연스러운 폰트 크기 조절이 가능해서 요즘 많이 쓰입니다.
- 버튼 패딩, 카드 너비에도 응용할 수 있습니다!
3. 벤더 프리픽스
브라우저별 벤더 프리픽스 정리
CSS 속성 중 일부는 브라우저마다 구현 방식이 다르거나 실험적인 기능이 있어서, -webkit-, -moz-, -ms- 같은 접두사(벤더 프리픽스)가 필요할 수 있습니다.
✅ 예시: linear-gradient
background: -webkit-linear-gradient(to right, red, blue);
background: -moz-linear-gradient(to right, red, blue);
background: linear-gradient(to right, red, blue);
✅ 자주 쓰는 프리픽스 대상
속성 | 벤더 프리픽스 |
transform, transition | -webkit-, -ms- |
flex, grid 초기 버전 | -webkit- |
appearance, backdrop-filter | -webkit-, -moz- |
📌 팁
- 요즘은 대부분의 최신 브라우저가 프리픽스 없이 지원합니다.
- Autoprefixer 같은 툴을 쓰면 빌드 과정에서 자동으로 붙여줍니다.
- MDN 또는 Can I Use 사이트에서 지원 여부 확인이 가능합니다.
🤙🏻 마무리 정리
항목 | 핵심 요약 |
미디어 쿼리 | 화면 너비 기준으로 스타일 구분 (모바일 우선 접근 추천) |
반응형 타이포그래피 | clamp(최소, 선호, 최대) + vw로 자연스럽게 크기 조절 |
벤더 프리픽스 | 오래된 브라우저 대응용 접두사, 요즘은 자동화 툴 사용 + MDN/Can I Use 확인 필수 |
'1주차' 카테고리의 다른 글
클로저 closure (0) | 2025.04.11 |
---|---|
JS없이 HTML과 CSS로 만들 수 있는 것들 (0) | 2025.04.11 |
<template> 태그와 Shadow DOM을 활용한 HTML 구성 분리 (0) | 2025.04.11 |
BEM으로 시작하는 CSS 방법론 (0) | 2025.04.11 |
JS에서 Truthy와 Falsy 그리고 단락평가 (0) | 2025.04.11 |