CSS Baseline의 지원 상태와 프로젝트 브라우저의 폴백은 어떻게 확인하나요?
Baseline은 주요 브라우저의 공통 지원 상태를 읽는 기준입니다. 실제 대상 브라우저·버전과 대조하고, 미지원 환경에서도 내용을 읽는 기본 화면을 확인합니다. 폴백과 미확인 범위를 함께 기록합니다.
적용 조건·범위: 그렇다고 모든 기업 환경의 모든 오래된 브라우저에서 된다는 뜻은 아닙니다.
본문 근거: web.dev/baseline/
독립 실습: 직접 만들고 확인하기
CSS Baseline 보는 법: 지원 범위와 폴백을 직접 확인하기 · 독립 실습
브라우저 지원 확인표와 소스의 폴백 기준을 읽으세요. 이 예제는 지원 여부를 자동 검사하지 않습니다.
예제 크게 보기 (새 탭)table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #777; padding: 8px; text-align: left; }.slot { container-type: inline-size; width: min(100%, 700px); }
.card { display: block; border: 1px solid #777; padding: 16px; }
@container (min-width: 30rem) { .card { display: grid; grid-template-columns: 1fr 1fr; } }직접 실행: 환경 준비와 전체 파일
독자 질문
새 CSS 기능을 써도 되는지 Baseline 배지만 보고 결정해도 될까요?
직접 만들 화면
TaskFlow 기능별 지원 대상·기본 동작·확인 환경을 기록한 간단한 호환성 표
새 폴더에 index.html과 style.css를 만들고 아래 전체 파일을 각각 저장하세요. 브라우저에서 index.html을 엽니다.
<!doctype html>
<html lang="ko">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>CSS Baseline 보는 법: 지원 범위와 폴백을 직접 확인하기</title><link rel="stylesheet" href="./style.css"></head>
<body>
<table>
<caption>TaskFlow CSS 기능 확인 기록</caption>
<thead><tr><th scope="col">기능</th><th scope="col">기본 동작</th><th scope="col">직접 확인</th></tr></thead>
<tbody>
<tr><th scope="row">Container Query</th><td>세로 카드 유지</td><td>미확인</td></tr>
<tr><th scope="row">sticky</th><td>제목이 일반 흐름에 남음</td><td>미확인</td></tr>
</tbody>
</table>
</body>
</html>
확인할 결과와 실제 검증 상태
MDN 호환성 표와 web.dev Baseline에서 기능의 상태를 읽고, 프로젝트가 지원할 브라우저 버전과 나란히 기록하세요. Widely available은 모든 구형 브라우저 지원을 뜻하지 않습니다. 미시험 브라우저의 열은 미확인으로 두고 실제 재현 후 결과를 적으세요.
실제 브라우저·DevTools 조작 결과: 미확인. 위 내용은 코드에서 예상되는 결과와 독자가 수행할 확인 절차입니다.
다음 학습 연결
12회차에서는 z-index를 올려도 해결되지 않는 레이어 문제를 부모 stacking context부터 찾습니다.
폴백을 직접 비교하기
위 기록표 아래에 <div class="slot"><article class="card"><h2>기능</h2><p>설명</p></article></div>를 추가하고 아래 스타일을 적용합니다.
폭이 넓으면 제목과 설명이 두 열입니다. DevTools에서 @container 규칙을 끄면 block 배치로 돌아와도 두 내용을 읽을 수 있어야 합니다. 이는 폴백 확인이며 구형 브라우저 전체 재현은 아닙니다.
Baseline이란
Baseline은 주요 브라우저 엔진에서 웹 플랫폼 기능이 공통으로 지원되는 시점을 이해하기 쉽게 보여주는 기준입니다.
기능 문서에는 다음과 같은 상태가 표시될 수 있습니다.
Widely available
Newly available
Limited availability
정확한 표현은 문서에 따라 달라질 수 있지만 핵심은 지원 성숙도를 빠르게 파악하는 것입니다.
Widely available
주요 대상 브라우저 전체의 공통 지원으로 Newly available이 된 뒤 30개월이 지나면 Widely available로 분류합니다.
그렇다고 모든 기업 환경의 모든 오래된 브라우저에서 된다는 뜻은 아닙니다.
프로젝트 사용자 환경이 별도로 있다면 그 기준이 더 중요합니다.
Newly available
주요 엔진에서 공통 지원이 시작됐지만 지원 기간이 아직 짧은 기능입니다.
최신 브라우저를 대상으로 하는 서비스에서는 사용할 수 있지만, 오래된 버전까지 지원해야 한다면 fallback을 검토합니다.
프로젝트 기준이 우선
Baseline
→ 일반 웹 플랫폼 지원 판단
프로젝트 browser support policy
→ 실제 사용자의 최소 버전
둘을 함께 봅니다.
사내 환경에서 특정 오래된 브라우저를 고정 사용한다면 Baseline Widely만 보고 결정할 수 없습니다.

MDN compatibility table
기능의 실제 browser version을 확인할 수 있습니다.
예를 들어 Container Query는 현재 널리 사용 가능한 기능이지만, 프로젝트가 훨씬 오래된 브라우저를 포함한다면 기본 layout을 fallback으로 남길 수 있습니다.
progressive enhancement
기본 기능을 먼저 제공하고 최신 CSS를 지원하는 환경에서 경험을 개선합니다.
.card {
display: block;
}
@supports (
container-type:
inline-size
) {
.card-slot {
container-type:
inline-size;
}
}
항상 @supports가 필요한 것은 아닙니다.
지원되지 않아도 CSS rule이 무시되고 기본 layout이 충분히 usable하다면 별도 조건 없이 사용할 수도 있습니다.
@supports
@supports (
display: grid
) {
.cards {
display: grid;
}
}
feature query를 이용해 CSS property 지원 여부를 확인할 수 있습니다.
복잡한 browser sniffing보다 기능 자체를 확인하는 방식입니다.
Baseline 2026 읽기
Baseline 2026은 2026년에 Newly available이 된 기능의 집합입니다. @scope 같은 기능도 해당 연도의 공통 지원 여부와 개별 호환성 표를 함께 읽습니다.
하지만 “2026년에 Baseline이 됐다”와 “모든 사용자가 최신 브라우저다”는 같은 뜻이 아닙니다.
배포 대상과 지원 기간을 확인합니다.
폴백이 필요한 기준
- 기능이 없으면 핵심 정보에 접근할 수 없는가
- 단지 레이아웃이 덜 예쁜 정도인가
- 프로젝트 지원 브라우저가 기능 지원 전 버전인가
- JS polyfill이 정말 필요한가
- 기본 HTML/CSS로 usable 상태가 남는가
자주 발생하는 오류와 해결
Baseline Widely available이면 모든 사용자 환경에서 된다고 단정합니다
Baseline은 일반 웹 플랫폼 지원 성숙도를 보여주는 기준입니다. 사내 고정 브라우저나 오래된 WebView처럼 프로젝트별 지원 환경은 별도로 확인해야 합니다.
Newly available 기능은 무조건 사용하지 않습니다
핵심 기능이 아니고 기본 fallback이 usable하다면 progressive enhancement로 사용할 수 있습니다.
모든 최신 CSS에 @supports를 추가합니다
지원되지 않아도 기본 CSS가 정상 동작한다면 별도 분기가 필요하지 않을 수 있습니다. 폴백이 실제로 필요한지 먼저 판단합니다.
학습 완료 체크리스트
- Baseline의 목적을 설명할 수 있습니다.
- Widely와 Newly available을 구분할 수 있습니다.
- MDN compatibility 정보를 확인할 수 있습니다.
- 프로젝트 사용자 브라우저 정책과 Baseline을 함께 판단할 수 있습니다.
- progressive enhancement 방식으로 fallback을 남길 수 있습니다.
독립 실습은 여기서 마칠 수 있습니다. 아래 선택 실습은 TaskFlow 프로젝트 파일로 진행합니다.
선택 실습: 할 일 앱에 적용하기
TaskFlow는 간단한 서비스 화면에서 시작해 할 일 앱으로 이어 만드는 예제입니다. 이 선택 실습에서는 HTML과 CSS로 이번 화면을 만듭니다.
TaskFlow에서 사용한 주요 CSS 기능을 지원 범위 관점에서 점검합니다.
선택: 연재 프로젝트와 전체 자료
연재 프로젝트를 이어 만드는 분을 위한 자료입니다. 이 글의 개념과 예제만 찾으셨다면 필요한 파일과 실행 방법만 펼쳐보세요.
TaskFlow 프로젝트 적용
CSS Baseline 보는 법: 지원 범위와 폴백을 직접 확인하기 · 단계별 TaskFlow
TaskFlow 누적 11단계입니다. 브라우저 지원 확인표와 소스의 폴백 기준을 읽으세요. 이 예제는 지원 여부를 자동 검사하지 않습니다.
예제 크게 보기 (새 탭)실행 가능한 시작본과 이번 단계
이번 단계 시작 ZIP을 새 폴더에 압축 해제합니다. 이 ZIP은 직전 단계의 완료 파일과 같으며 앞 글의 코드를 따로 모을 필요가 없습니다. 이번 단계 완료 ZIP은 다른 폴더에 풀어 비교합니다.
화면 소스는 유지하고 docs/browser-support.md에 실제 사용 위치·폴백·미검증 범위를 기록합니다.
docs/browser-support.md: 새 파일로 저장합니다.
짧은 코드 예제는 변경 위치를 설명합니다. 파일 전체를 작성하거나 교체할 때는 완료 파일 전체를 사용하세요. 생략 표시가 있는 부분 코드를 파일 전체로 저장하지 않습니다.
실행: ZIP의 index.html을 브라우저에서 엽니다. 외부 서버나 npm 설치 없이 로컬 HTML·CSS·이미지를 사용합니다. 문의 폼은 서버 전송을 연결하지 않은 문서 예제입니다. 연습 값만 사용하고 입력 형식을 확인합니다.
직접 확인할 결과: Container Query가 없어도 카드 내용이 DOM에 남고 기본 세로 배치 규칙이 존재합니다. 지원 브라우저 전체 검증을 주장하지 않습니다.
전체 파일·코드 보기
완료 파일 전체
index.html 전체 파일
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>
TaskFlow
</title>
<link href="./style.css" rel="stylesheet"/>
</head>
<body>
<header class="site-header">
<div class="page site-header__inner">
<a class="brand" href="#home">
TaskFlow
</a>
<nav aria-label="주요 메뉴" class="nav">
<a href="#features">
기능
</a>
<a href="#contact">
문의
</a>
</nav>
</div>
</header>
<main class="page" id="home">
<div class="service-layout">
<div>
<section class="hero">
<h1>
해야 할 일을 한눈에 정리하세요
</h1>
<p>
TaskFlow는 오늘의 작업을 빠르게 정리하는 서비스입니다.
</p>
<img alt="TaskFlow 서비스 소개 페이지의 기능·문의 화면" class="hero__image" height="800" src="./images/hero.webp" width="1200"/>
</section>
<section id="features">
<h2>
주요 기능
</h2>
<div class="feature-grid">
<article class="card feature-card">
<span class="feature-card__badge">
NEW
</span>
<h3>
빠른 작업 추가
</h3>
<p>
해야 할 일을 바로 기록할 수 있습니다.
</p>
<img alt="TaskFlow 기능 카드 세 개" class="feature-card__image" height="450" src="./images/feature-board.webp" width="800"/>
</article>
<article class="card">
<h3>
간단한 분류
</h3>
<p>
해야 할 일을 구분합니다.
</p>
</article>
<article class="card">
<h3>
진행 확인
</h3>
<p>
완료 여부를 확인합니다.
</p>
</article>
<article class="card task-preview">
<div class="task-preview__content">
<h3>
아주 긴 작업 제목과 URL
</h3>
<p>
https://example.com/very-long-task-url-without-normal-break-points-123456789
</p>
</div>
<a href="#contact">
문의
</a>
</article>
</div>
</section>
<section class="faq" id="faq">
<h2>
자주 묻는 질문
</h2>
<details>
<summary>
TaskFlow는 어떤 서비스인가요?
</summary>
<p>
해야 할 일을 빠르게 정리하는 작업 관리 서비스 예제입니다.
</p>
</details>
<details>
<summary>
모바일에서도 볼 수 있나요?
</summary>
<p>
작은 화면부터 설계한 반응형 레이아웃을 사용합니다.
</p>
</details>
<details>
<summary>
문의는 어디서 하나요?
</summary>
<p>
아래 문의 폼을 이용할 수 있습니다.
</p>
</details>
</section>
<section id="pricing">
<h2>
요금제
</h2>
<div class="pricing-grid">
<article class="card">
<h3>
Basic
</h3>
<p>
개인 학습용
</p>
</article>
<article class="card">
<h3>
Pro
</h3>
<p>
더 많은 프로젝트
</p>
</article>
</div>
<div aria-label="요금제 비교표 가로 스크롤" class="table-scroll" role="region" tabindex="0">
<table class="pricing-table">
<caption>
TaskFlow 요금제 기능 비교
</caption>
<thead>
<tr>
<th scope="col">
항목
</th>
<th scope="col">
Basic
</th>
<th scope="col">
Pro
</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">
프로젝트
</th>
<td>
3개
</td>
<td>
무제한
</td>
</tr>
<tr>
<th scope="row">
작업 보관
</th>
<td>
30일
</td>
<td>
무제한
</td>
</tr>
<tr>
<th scope="row">
팀 공유
</th>
<td>
없음
</td>
<td>
지원
</td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="contact">
<h2>
문의하기
</h2>
<form>
<div class="form-field">
<label for="name">
이름
</label>
<input autocomplete="name" id="name" name="name" type="text"/>
</div>
<div class="form-field">
<label for="email">
이메일
</label>
<input autocomplete="email" id="email" name="email" type="email"/>
</div>
<div class="form-field">
<label for="message">
문의 내용
</label>
<textarea id="message" name="message" rows="5"></textarea>
</div>
<button type="submit">
문의 보내기
</button>
</form>
</section>
<div class="feature-slot">
<article class="card feature-card">
<img alt="TaskFlow 기능 카드 세 개" class="feature-card__image" height="450" src="./images/feature-board.webp" width="800"/>
<div>
<h3>
작업 카드
</h3>
<p>
넓은 공간에서는 이미지와 설명을 나란히 배치합니다.
</p>
</div>
</article>
</div>
</div>
<aside aria-label="기능 미리보기">
<div class="feature-slot">
<article class="card feature-card">
<img alt="TaskFlow 기능 카드 세 개" class="feature-card__image" height="450" src="./images/feature-board.webp" width="800"/>
<div>
<h3>
작업 카드
</h3>
<p>
넓은 공간에서는 이미지와 설명을 나란히 배치합니다.
</p>
</div>
</article>
</div>
</aside>
</div>
</main>
<footer class="site-footer">
<div class="page">
<p>
© TaskFlow
</p>
</div>
</footer>
<a class="help-button" href="#contact">
문의
</a>
</body>
</html>
style.css 전체 파일
:root {
color: #171717;
background: #f5f5f5;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
margin: 0;
font-family:
Arial,
sans-serif;
line-height: 1.6;
color: #171717;
background: #f5f5f5;
}
.page {
width: min(
100% - 32px,
960px
);
margin-inline: auto;
}
.site-header,
.site-footer {
padding-block: 20px;
}
main {
padding-block: 48px;
}
section + section {
margin-top: 64px;
}
.card {
padding: 24px;
border: 1px solid #d7d7d7;
background: #fff;
}
form {
display: grid;
gap: 16px;
}
.form-field {
display: grid;
gap: 8px;
}
input,
textarea {
width: 100%;
min-height: 44px;
padding: 10px 12px;
border: 1px solid #b8b8b8;
background: #fff;
}
button {
min-height: 44px;
padding: 10px 16px;
border: 1px solid #171717;
background: #171717;
color: #fff;
}
a { color: inherit; }
input, textarea, button { font: inherit; }
h1 { font-size: 32px; font-weight: 700; }
h2 { font-size: 24px; }
h3 { font-size: 20px; }
.site-header__inner {
display: flex;
flex-direction: column;
gap: 12px;
}
.nav {
display: flex;
flex-wrap: wrap;
gap: 8px 16px;
}
.feature-list {
display: flex;
flex-direction: column;
gap: 16px;
}
@media (min-width: 48rem) {
.site-header__inner {
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.feature-list {
flex-direction: row;
}
.feature-list > * {
flex: 1;
}
}
.site-header {
position: sticky;
top: 0;
z-index: 10;
background: #f5f5f5;
border: 1px solid #ddd;
}
.feature-card {
position: relative;
}
.feature-card__badge {
position: absolute;
top: 12px;
right: 12px;
padding: 4px 8px;
border: 1px solid #171717;
background: #fff;
font-size: 12px;
}
.help-button {
position: fixed;
right: 16px;
bottom: 16px;
min-width: 44px;
min-height: 44px;
padding: 10px 14px;
border: 1px solid #171717;
background: #171717;
color: #fff;
text-decoration: none;
}
.faq {
display: grid;
gap: 12px;
}
.faq details {
border: 1px solid #d7d7d7;
background: #fff;
}
.faq summary {
padding: 16px;
cursor: pointer;
font-weight: 700;
}
.faq details p {
margin: 0;
padding: 0 16px 16px;
}
.faq summary:focus-visible {
outline: 2px solid #171717;
outline-offset: 2px;
}
.feature-grid,
.pricing-grid {
display: grid;
grid-template-columns:
repeat(
auto-fit,
minmax(
min(100%, 220px),
1fr
)
);
gap: 16px;
}
.task-preview {
display: flex;
align-items: flex-start;
gap: 12px;
}
.task-preview__content {
min-width: 0;
flex: 1;
}
.task-preview__content p {
overflow-wrap: anywhere;
}
.settings-layout {
display: grid;
grid-template-columns:
180px
minmax(0, 1fr);
gap: 24px;
}
.table-scroll {
overflow-x: auto;
}
.pricing-table {
width: 100%;
min-width: 640px;
border-collapse: collapse;
background: #fff;
}
.pricing-table caption {
margin-bottom: 12px;
text-align: left;
font-weight: 700;
}
.pricing-table th,
.pricing-table td {
padding: 12px;
border: 1px solid #d7d7d7;
text-align: left;
}
img {
display: block;
max-width: 100%;
}
.hero__image {
width: 100%;
height: auto;
}
.feature-card__image {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
}
.service-layout {
display: grid;
gap: 24px;
}
@media (
min-width: 64rem
) {
.service-layout {
grid-template-columns:
minmax(0, 1fr)
280px;
}
}
.feature-slot {
container-type:
inline-size;
}
.feature-card {
display: grid;
gap: 16px;
}
@container (
min-width: 30rem
) {
.feature-card {
grid-template-columns:
180px
minmax(0, 1fr);
align-items: center;
}
}
.service-layout > * { min-width: 0; }
위 파일과 ZIP의 동명 파일은 동일합니다. 회차별 README·CHANGES 문서는 ZIP에 포함합니다. 생성 산출물·node_modules·실제 환경 변수 파일은 포함하지 않습니다.
시작본과 이번 변경
Container Query 실습: 같은 카드를 본문과 사이드바에 배치하기의 완료 체크포인트를 시작본으로 사용합니다.
TaskFlow가 쓰는 Flex/Grid/FAQ/이미지/Container Query/sticky 목록과 실제 지원 브라우저를 기록합니다. 미지원 상황의 기본 동작을 직접 확인한 항목만 통과로 표시하고 필요한 폴백만 추가합니다.
연속 프로젝트 선수 조건
- 1~10회차에서 사용한 CSS 기능을 실제 프로젝트에 적용해 본 상태를 권장합니다.
- 브라우저 지원은 기능 자체와 프로젝트 사용자 환경을 함께 봐야 한다는 전제로 진행합니다.
이전 체크포인트
publishing-step-10-container-query
이번 목표
TaskFlow에서 사용한 주요 CSS 기능을 지원 범위 관점에서 점검합니다.
TaskFlow 기능 목록 점검
현재 사용한 기술을 표로 정리합니다.
Flexbox
Grid
details/summary
aspect-ratio
Container Query
overflow-wrap:anywhere
sticky
각 기능을 MDN에서 확인하고 다음을 기록할 수 있습니다.
기능
지원 상태
fallback 필요 여부
TaskFlow 사용 위치
검증 브라우저
지원 기록 예시
details/summary
- 기본 disclosure 유지
- 오래된 환경에서도 정보 자체는 HTML에 존재
Container Query
- 최신 주요 브라우저 지원
- 미지원 시 세로 card layout 유지
aspect-ratio
- 이미지 width/height attribute도 함께 사용
sticky
- 실패해도 header가 normal flow에 남음
폴백 원칙
TaskFlow는 최신 기능이 동작하지 않아도 핵심 문서와 폼, 표, FAQ 내용을 사용할 수 있게 유지합니다.
검증
- MDN feature page 확인
- web.dev Baseline 상태 확인
- 프로젝트 대상 브라우저에서 실제 테스트
- fallback이 필요 없는 기능에 불필요한 코드 추가하지 않기
완료 체크포인트
publishing-step-11-baseline
다음 학습
다음 글에서는 z-index 숫자를 올려도 해결되지 않는 stacking context 문제를 계층 구조로 디버깅합니다.
공식 참고
- web.dev Baseline: https://web.dev/baseline/
- MDN Browser compatibility data
글 소개·학습 준비·전체 목차

웹 퍼블리싱 · 11 / 15 · 필수 학습 · CSS Baseline과 폴백
CSS 기능을 도입할 때는 Baseline 상태와 MDN의 지원 버전을 프로젝트 대상 브라우저에 대조하고, 미지원 환경에서도 핵심 내용을 읽을 수 있는 기본 폴백을 확인합니다.
Web Platform Baseline은 주요 브라우저에서 기능이 어느 정도 공통으로 제공되는지 빠르게 판단하는 기준을 제공합니다.
이번 글에서는 Baseline 상태를 읽고 프로젝트 지원 환경과 폴백을 함께 판단하는 방법을 익힙니다.
이번 글에서 배우는 내용
- Baseline이 무엇인가
- Widely available
- Newly available
- 브라우저 compatibility table
- 프로젝트 지원 대상과 Baseline의 차이
- progressive enhancement
- @supports
- fallback 작성 기준
먼저 알아야 할 내용
CSS 속성·선택자와 브라우저 버전 확인 방법을 알면 됩니다. 1~10회차 화면 완성 여부와 무관하게 기능 하나의 지원 조건을 조사할 수 있습니다.
목차
이 글이 도움이 되었나요?
읽음 기록
읽음 — / 전체 15개 · 필수 13개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.