Tailwind CSS

Tailwind CSS 반응형 클래스 사용법: sm md lg 기준 잡기

2026.04.24·수정 2026.05.12·약 15분

이 글에서 정리하는 내용

Tailwind CSS의 반응형 클래스를 화면 이름이 아니라 스타일이 바뀌기 시작하는 너비 기준으로 정리합니다. 접두사 없는 기본 클래스에서 출발해, 카드 리스트·검색 필터·섹션 여백처럼 실제 화면에서 달라지는 부분만 breakpoint로 조정하는 흐름을 중심으로 다룹니다.

sm md lg를 화면 이름으로 외우면 헷갈리는 이유

Tailwind CSS sm md lg breakpoint가 적용되는 기준을 비교한 반응형 설명 이미지

Tailwind CSS에서 반응형 클래스를 처음 쓰면, 라는 이름 때문에 자연스럽게 기기 이름을 떠올리게 됩니다. 은 작은 화면는 태블릿는 데스크톱처럼 나누는 방식입니다. 입문 단계에서는 기억하기 편하지만, 실제 코드를 작성하면 이 구분이 바로 흔들립니다.

가장 자주 생기는 오해는 을 모바일 전용 조건으로 보는 것입니다. 이름만 보면 small screen에 적용되는 것 같지만, Tailwind의 기본 반응형 클래스는 특정 너비 이하가 아니라 특정 너비 이상에서 적용됩니다. 그래서 는 작은 모바일 화면에서만 가운데 정렬하는 클래스가 아니라, 기준 너비 이상부터 가운데 정렬을 적용하는 클래스입니다.

모바일 화면을 기준으로 스타일을 잡고 싶다면 을 먼저 붙이는 것이 아니라 접두사 없는 클래스를 작성해야 합니다. 예를 들어 모바일에서는 세로로 쌓이고, 화면이 넓어지는 시점부터 가로 배치가 필요한 영역이라면 기본값은 이고, 전환 지점에 를 붙이는 흐름이 자연스럽습니다.

은 작은 화면 전용 조건이 아니다

<section class="text-left sm:text-center"> <h2>반응형 타이틀</h2>
</section>

이 코드는 모바일에서 왼쪽 정렬로 시작하고, 기준 이상에서 가운데 정렬로 바뀝니다. 를 “작은 화면에서만 가운데 정렬”이라고 이해했다면 실제 화면과 생각이 어긋납니다. Tailwind의 기본 breakpoint는 아래에서 위로 확장됩니다. 접두사 없는 클래스가 먼저 적용되고, 조건을 만족하는 순간 접두사가 붙은 클래스가 같은 CSS 속성을 덮어씁니다.

따라서는 기기 이름보다 스타일 변경 시점에 가깝습니다. 이 관점으로 보면 반응형 코드를 읽을 때 “이 클래스는 어떤 기기용인가?”보다 “어느 너비 이상부터 기존 값을 바꾸는가?”를 먼저 확인하게 됩니다.

Tailwind 반응형 클래스가 적용되는 실제 기준

Tailwind CSS의 기본 반응형 전략은 mobile-first입니다. 작은 화면에 적용할 스타일을 먼저 작성하고, 화면이 넓어질 때 필요한 부분만 breakpoint 접두사로 덮어씁니다. 기존 CSS로 보면 기반 media query를 유틸리티 클래스 형태로 쓰는 흐름에 가깝습니다.

Tailwind CSS v4 공식 문서 기준으로 기본 breakpoint는 40rem, 48rem, 64rem입니다. 일반적인 기본 브라우저 설정에서 1rem을 16px로 보면 각각 640px, 768px, 1024px에 해당합니다. 다만 이 숫자를 그대로 “모바일, 태블릿, PC”로 고정하면 실제 작업에서 오해가 생깁니다. 브라우저 폭, 확대 설정, 기기 종류, 레이아웃 성격에 따라 같은 너비라도 화면 사용감이 달라질 수 있습니다.

접두사 기본 기준 작업할 때의 해석
접두사 없음 모든 화면 가장 좁은 화면까지 포함하는 기본 스타일
40rem 이상 조금 넓어진 화면에서 필요한 첫 조정
48rem 이상 세로 배치에서 가로 배치로 바꾸기 좋은 지점
64rem 이상 컬럼 수, 여백, 최대 너비를 더 넓게 확장하는 지점

반응형 코드를 작성할 때 초보자가 자주 하는 실수는 모든 클래스 앞에를 붙이는 것입니다. 하지만 계속 유지될 스타일에는 breakpoint가 필요하지 않습니다. 기본 모양은 접두사 없는 클래스로 두고, 실제로 달라지는 속성에만 접두사를 붙여야 코드의 의도가 보입니다.

기본값에서 시작해 필요한 시점에만 덮어쓰기

<div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"> <article class="rounded-xl border p-4">카드 1</article> <article class="rounded-xl border p-4">카드 2</article> <article class="rounded-xl border p-4">카드 3</article> <article class="rounded-xl border p-4">카드 4</article>
</div>

이 코드에서는 모든 화면에 먼저 적용됩니다. 화면이 기준을 넘으면 컬럼 수만 2개로 바뀌고, 기준을 넘으면 다시 4개로 바뀝니다. 테두리, radius, 안쪽 여백은 화면 크기와 관계없이 유지되므로 breakpoint를 붙이지 않았습니다.

이 흐름을 잡아두면 반응형 클래스를 화면별 CSS 묶음으로 보지 않게 됩니다. 하나의 기본 스타일을 만들고, 특정 너비 이상에서 달라지는 값만 단계적으로 바꾼다고 보면 코드가 훨씬 읽기 쉬워집니다.

카드 UI로 보는 반응형 클래스 적용 순서

카드 리스트는 반응형 기준을 설명하기 좋은 예시입니다. 쇼핑몰 상품 카드, 블로그 글 목록, 관리자 페이지의 통계 카드처럼 반복되는 UI는 화면 너비에 따라 한 줄에 보여줄 개수가 달라집니다. 이때 먼저 정할 것은 PC에서 몇 열을 만들지가 아니라가장 좁은 화면에서 카드가 읽기 편한지입니다.

모바일에서 카드가 2열로 들어가면 이미지와 텍스트가 너무 좁아질 수 있습니다. 그래서 기본값은 로 잡고, 화면이 넓어지는 지점부터 2열 또는 4열로 늘리는 흐름이 자주 사용됩니다. 카드 내부 정보량이 많을수록 전환 시점은 조금 늦추는 편이 낫습니다.

<section class="px-4 py-8 md:px-8 lg:px-12"> <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"> <article class="rounded-2xl border bg-white p-4 shadow-sm"> <div class="aspect-[4/3] rounded-xl bg-gray-100"></div> <h3 class="mt-4 text-base font-semibold lg:text-lg">상품 카드 제목</h3> <p class="mt-2 text-sm text-gray-600">상품 설명 문구</p> </article> </div>
</section>

이 예시에서는 세 가지가 반응형으로 바뀝니다. 바깥 여백은 에서 시작해로 커집니다. 카드 컬럼 수는 에서 시작해로 늘어납니다. 카드 제목 크기는 기본 를 쓰다가 넓은 화면에서만 로 조금 키웁니다.

반대로같은 클래스는 breakpoint를 붙이지 않았습니다. 화면이 넓어져도 카드의 기본 모양은 유지되기 때문입니다. 실제 작업에서는 이 구분이 꽤 중요합니다. 화면 크기에 따라 바뀌는 클래스와 계속 유지되는 클래스를 분리해서 봐야 수정할 때 덜 흔들립니다.

검색 필터 영역은 방향 전환이 기준이 된다

카드 리스트가 컬럼 수 중심이라면, 검색 필터 영역은 정렬 방향이 기준이 되는 경우가 많습니다. 모바일에서는 입력창과 버튼이 세로로 쌓이는 구조가 안정적이고, 화면이 넓어지면 한 줄 배치로 전환해도 무리가 적습니다.

<form class="flex flex-col gap-3 md:flex-row md:items-center"> <input class="w-full rounded-lg border px-4 py-3 md:flex-1" type="text" placeholder="검색어 입력"> <button class="rounded-lg bg-gray-900 px-5 py-3 text-white md:w-auto" type="submit"> 검색 </button>
</form>

여기서는 기본값이 입니다. 모바일에서 입력창과 버튼이 위아래로 배치됩니다. 가 붙는 순간 같은 요소들이 가로 방향으로 놓이고로 세로축 정렬도 함께 맞춥니다. 입력창의 은 모바일에서 자연스럽고은 넓은 화면에서 남는 공간을 입력창이 가져가게 만듭니다.

이런 코드를 읽을 때 를 태블릿이라는 기기명으로 해석하면 기준이 흐려집니다. 더 정확히는 “이 너비 이상에서는 세로 배치가 답답하니 가로 배치로 바꾼다”는 작업 판단으로 읽어야 합니다.

sm md lg를 나눠 쓰는 실무 판단 기준

반응형 작업에서 어려운 부분은 breakpoint 값을 외우는 일이 아닙니다. 어느 속성에 breakpoint를 붙일지 고르는 일이 더 어렵습니다. 모든 요소에를 단계별로 붙이면 정교해 보일 수 있지만, 실제 유지보수에서는 왜 그 지점에서 바뀌는지 파악하기 어려워집니다.

먼저 레이아웃의 큰 구조를 봐야 합니다. 컬럼 수, 정렬 방향, 섹션 여백처럼 화면 너비에 따라 사용성이 달라지는 속성은 breakpoint를 붙일 후보입니다. 반면 색상, 테두리, radius, 기본 shadow처럼 화면이 달라져도 유지되는 시각 규칙은 굳이 나누지 않아도 됩니다.

컬럼 수는 에서 차이가 빨리 드러난다

리스트형 UI에서는 보다를 먼저 고민하는 경우가 많습니다. 모바일 기본값은 1열로 두고, 768px 전후에서 2열로 바꾸고, 1024px 이상에서 3열 또는 4열로 확장하는 식입니다. 물론 화면 성격에 따라 가 더 자연스러울 수도 있습니다. 카드 안의 정보가 짧고 이미지 비중이 낮다면 640px 이상에서 2열로 바꿔도 무리가 없습니다.

<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"> <article class="rounded-xl border p-4">짧은 카드</article> <article class="rounded-xl border p-4">짧은 카드</article> <article class="rounded-xl border p-4">짧은 카드</article>
</div>

이 구조는 카드 정보량이 적을 때 어울립니다. 반대로 이미지, 제목, 설명가격, 버튼이 모두 들어가는 상품 카드라면 가 빠를 수 있습니다. 이때는 로 전환을 늦추거나, 카드 내부 여백과 글자 크기를 함께 조정해야 합니다.

여백은 화면이 넓어질수록 조금씩 키우되 과하게 쪼개지 않는다

섹션 여백은 반응형으로 자주 조정합니다. 모바일에서는 정도가 자연스럽지만, 넓은 화면에서도 그대로 두면 콘텐츠가 화면 가장자리에 붙어 보일 수 있습니다. 그래서처럼 단계적으로 여백을 늘립니다.

<section class="px-4 py-10 md:px-8 md:py-14 lg:px-12 lg:py-20"> <div class="mx-auto max-w-6xl"> <h2 class="text-2xl font-bold md:text-4xl">섹션 제목</h2> </div>
</section>

다만 여백을 모든 breakpoint에서 바꿀 필요는 없습니다. 만으로 충분한 화면도 많습니다. 반응형 클래스가 늘어날수록 “왜 이 지점에서 값이 바뀌는지” 설명할 수 있어야 합니다. 설명이 안 되는 breakpoint는 나중에 디자인 수정이 들어왔을 때 가장 먼저 헷갈리는 부분이 됩니다.

반응형 클래스를 작성할 때 다시 확인할 것

Tailwind CSS 반응형 레이아웃 작성 시 확인할 mobile-first 체크포인트 정리 이미지

반응형 클래스를 작성한 뒤에는 클래스 개수보다 적용 순서를 먼저 확인해야 합니다. 가장 좁은 화면에서 접두사 없는 클래스만으로 화면이 자연스럽게 보이는지 확인하고, 그다음, 조건에서 어떤 속성이 바뀌는지 좁혀서 봅니다.

첫 번째 체크포인트는 모바일 기본값입니다. 을 붙이지 않아도 모바일에서 읽기 편한 구조인지 확인합니다. 카드가 너무 좁지는 않은지, 버튼이 누르기 어려울 정도로 작지는 않은지, 필터 영역이 한 줄에 억지로 들어가지는 않는지 봐야 합니다.

두 번째 체크포인트는 바뀌는 속성의 종류입니다. 반응형으로 바뀌는 값이 컬럼 수인지, 여백인지, 글자 크기인지, 정렬 방향인지 구분합니다. 이 구분 없이 클래스만 추가하면 나중에 와 가 왜 들어갔는지 알기 어려워집니다.

세 번째 체크포인트는 breakpoint 남발 여부입니다.를 모두 쓰지 않아도 되는 경우가 많습니다. 예를 들어 모바일 1열, 넓은 화면 2열이면 만으로 충분합니다. 억지로 이나 를 추가하면 코드만 길어집니다.

수정 전에 먼저 볼 부분

<div class="grid grid-cols-1 gap-4 md:grid-cols-2"> <article class="rounded-xl border p-4">콘텐츠 카드</article>
</div>

이 코드에서 PC 화면을 3열로 바꾸고 싶다면 전체 구조를 다시 만들 필요가 없습니다. 만 추가하면 됩니다. 반대로 모바일 카드 간격만 좁히고 싶다면 를 기본값으로 바꿀지처럼 넓은 화면에서만 키울지 판단하면 됩니다.

이처럼 반응형 코드는 처음부터 화면별 CSS를 따로 만드는 방식보다, 기본값과 변경 지점을 분리해두는 방식으로 작성해야 유지보수하기 쉽습니다. 수정할 때는 새 클래스를 붙이기 전에 기존 기본값이 어떤 역할을 하는지 먼저 확인하는 것이 좋습니다.

정리

Tailwind CSS의는 모바일, 태블릿, 데스크톱이라는 기기 이름으로 고정해서 외우면 금방 헷갈립니다. 더 정확한 기준은 접두사 없는 클래스가 기본 스타일이고는 해당 breakpoint 이상에서 기존 스타일을 덮어쓰는 조건이라는 점입니다.

반응형 레이아웃을 잡을 때는 먼저 가장 좁은 화면에서 자연스럽게 보이는 기본값을 작성합니다. 그다음 화면이 넓어지면서 실제로 바뀌어야 하는 부분만 breakpoint로 조정합니다. 카드 리스트라면 컬럼 수, 검색 필터라면 정렬 방향, 섹션 레이아웃이라면 여백과 최대 너비가 주요 기준이 됩니다.

다음에 Tailwind로 반응형 화면을 만들 때는 를 몇 개 썼는지보다, 접두사 없는 기본 스타일이 제대로 잡혔는지 먼저 보면 됩니다. 이후에는 “이 너비 이상에서 무엇이 달라져야 하는가?”를 기준으로 클래스만 추가하면 반응형 코드가 훨씬 읽기 쉬워집니다.

같이 읽으면 좋은 글

이 글이 마음에 드세요?

RSS 피드를 구독하세요!

댓글 남기기