Guides8 min read·

Tailwind breakpoints on real devices, from sm to 2xl

Which real phones, tablets, laptops and monitors land in Tailwind's sm, md, lg, xl and 2xl breakpoints, upright and sideways, plus the gotchas that bite.

Tailwind's default breakpoints are sm (640px), md (768px), lg (1024px), xl (1280px) and 2xl (1536px), and each one means "this width and wider". On real devices that works out like this: every phone held upright gets your unprefixed classes, most phones on their side get md, iPads span sm to lg, and laptops land in xl or 2xl depending on their display scaling. The tables below map 123 real devices onto each range.

How Tailwind breakpoints work

Tailwind is mobile-first. A class without a prefix applies at every width. A prefixed class switches on at its breakpoint and stays on for everything wider, because under the hood it's a min-width media query.

<!-- 1 column on phones, 2 from 768px, 3 from 1280px -->
<div class="grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3">
  ...
</div>
Prefix Starts at Written in Tailwind v4 as
(none) 0 –
sm: 640px 40rem
md: 768px 48rem
lg: 1024px 64rem
xl: 1280px 80rem
2xl: 1536px 96rem

At the browser's default 16px font size, the rem values equal the pixel values. The width being tested is the viewport in CSS pixels, not the screen's physical pixels (why those differ). The official reference is Tailwind's responsive design docs.

Phones and tablets held upright

Range Width Real devices (CSS width)
no prefix under 640 Every closed phone: Galaxy S25 360, iPhone SE 375, Galaxy S25 Ultra 384, iPhone 17e 390, iPhone 16 393, iPhone 17 Pro 402, Pixel 10 412, iPhone Air 420, iPhone 17 Pro Max 440, Pixel 10 Pro XL 448, and the iPhone Duo outer screen, where pages get 382
sm: 640–767 iPad mini 744, and opened foldables: Galaxy Z Fold 6 708, Galaxy Z Fold 7 750, Pixel 10 Pro Fold 755
md: 768–1023 iPad 9.7″ 768, 11″ Android tablets 800, iPad 10.2″ 810, iPad Air 11″ and iPad 11″ 820, iPad Pro 11″ 834, Galaxy Tab S10+ 876, Galaxy Tab S11 Ultra 924, Surface Pro 960–976, and the iPhone Duo unfolded (951, it opens sideways)
lg: 1024–1279 iPad Air 13″ and iPad Pro 12.9″ 1024, iPad Pro 13″ 1032
xl: and up 1280+ none

Phones and tablets on their side

Turn a device sideways and its long side becomes the width. The numbers below are those screen widths. On iPhones with a notch or Dynamic Island, Safari insets pages into the safe area in landscape by default (WebKit's explanation), so the width your page actually lays out at can come out smaller. Either way, treat any phone on its side as "sm or md".

Range Width Real devices on their side
no prefix under 640 none
sm: 640–767 iPhone SE 667, iPhone Duo outer screen 678 (its side strip should leave pages about 594, below sm; calculated, not measured)
md: 768–1023 Nearly every other phone: Galaxy S25 780, iPhone 13 mini 812, Galaxy S25 Ultra and A56 832, iPhone 17e 844, iPhone 16 852, iPhone 17 Pro 874, iPhone 11 896, iPhone Air 912, Pixel 10 924, iPhone 17 Pro Max 956, Pixel 10 Pro XL 998. Opened foldables too: Pixel 10 Pro Fold 783, Galaxy Z Fold 6 823, Galaxy Z Fold 7 832
lg: 1024–1279 iPad 9.7″ 1024, iPad 10.2″ 1080, iPad mini 1133, iPad Air 11″ 1180, iPad Pro 11″ 1194–1210
xl: 1280–1535 11″ Android tablets 1280, iPad Air 13″ 1366, iPad Pro 13″ 1376, Galaxy Tab S10+ 1400, Surface Pro 1440–1464, Galaxy Tab S11 Ultra 1480
2xl: 1536+ none

Laptops and monitors

At each machine's default display scaling:

Range Width Real devices (CSS width)
lg: 1024–1279 none at default settings
xl: 1280–1535 Windows 13–14″ Full HD @ 150% 1280, WUXGA @ 150% 1280, Surface Laptop 13″ 1280, HD laptops and HD Chromebooks 1366, MacBook Neo 1408, MacBook Air M1 1440, 14″ 2.8K OLED 1440, MacBook Air 13″ 1470, Framework 13 1504, MacBook Pro 14″ 1512
2xl: 1536+ Windows 15.6″ Full HD @ 125% 1536, 16″ WUXGA @ 125% 1536, Surface Laptop 13.8″ 1536, Dell XPS 16 1600, Surface Laptop 15″ 1664, 16″ 2560×1600 @ 150% 1707, MacBook Air 15″ 1710, MacBook Pro 16″ 1728, and every Full HD or bigger monitor

These are screen widths. The browser window only matches them when it's maximized.

The gotchas

Phones on their side get your md layout

Your md design probably has a horizontal nav, two columns and maybe a sticky header. A phone on its side has the width for that but not the height: an iPhone 17 Pro in landscape leaves roughly 337px of height once Safari's bars are in (an estimate; see how much of the screen iPhone users see in Safari). A 64px sticky header eats a fifth of it.

An arbitrary variant fixes it without touching your breakpoints:

<header class="sticky top-0 [@media(max-height:500px)]:static">

That wraps the class in @media (max-height: 500px). Every closed phone on its side is 466px tall or less, while no tablet or laptop screen is shorter than 720px, so only sideways phones match (plus a desktop window someone has squashed very short).

md is not "tablet"

  • The iPad mini (744) is below md, so it gets your sm layout, which in most sites is the phone layout stretched.
  • The iPad Air 11″ (820) gets md.
  • The 13″ iPads held upright (1024–1032) get lg, which is often the full desktop nav on a touch screen.

If that desktop nav relies on hover menus, iPad users are stuck. Tailwind v4 already applies hover: styles only on devices that can hover, but a menu that opens only on hover still won't open with a tap.

Deciding layout in JavaScript? Don't read screen.width: iPadOS Safari keeps reporting its portrait values after the iPad is rotated. window.matchMedia('(min-width: 1024px)').matches tests the same viewport Tailwind does.

1366, 1440 and most MacBooks never reach 2xl

The 1366×768 HD laptop, the MacBook Air M1 (1440), the MacBook Air 13″ (1470) and the MacBook Pro 14″ (1512) all live in xl. A 15.6″ Windows laptop at 125% is exactly 1536, and min-width includes the edge, so it gets 2xl. If you polish the design at 2xl and treat xl as leftovers, the leftovers are what most MacBook users see.

The container class has the same edge. It caps width at the start of the current breakpoint, so a MacBook Air 13″ gets a 1280px container with 95px of space on each side, while a 1536px Windows laptop gets a 1536px container with none. Add padding (container mx-auto px-6) or text will sit against the window edge. More on that in mobile padding that works.

One setting moves a laptop between xl and 2xl

A 1920×1080 laptop reports 1920 (2xl) at 100% scaling, 1536 (2xl) at 125% and 1280 (xl) at 150%. The 16″ 2560×1600 laptops are 1707 at their default 150% but 1463 (xl) at 175%. Details in Windows display scaling and the 1536×864 viewport and MacBook resolution vs CSS pixels.

Split screen

A window snapped to half of a 1536px screen is about 768px wide: right on md. Laptop users working with two windows side by side see your tablet layout.

max-* variants for ranges

Tailwind also generates max-* variants (since v3.2) for "below this width", and you can stack them to target a range:

<!-- only below 768px -->
<nav class="max-md:hidden">...</nav>

<!-- only from 768px up to 1279px -->
<aside class="hidden md:max-xl:block">...</aside>

<!-- one-off widths -->
<div class="grid grid-cols-2 min-[900px]:grid-cols-3">...</div>
<p class="text-base max-[380px]:text-sm">...</p>

That last one catches only the narrowest phones: 360px Galaxys, 375px iPhones and anyone using a zoomed display setting.

Customizing breakpoints

Tailwind v4: @theme in your CSS

@import "tailwindcss";

@theme {
  --breakpoint-md: 46.5rem; /* 744px: the iPad mini joins md */
  --breakpoint-3xl: 120rem; /* 1920px: adds a 3xl: variant */
}

Moving md to 744px pulls in the iPad mini and the opened Galaxy Z Fold 7 and Pixel 10 Pro Fold, while every closed phone stays below it. To remove a default, set it to initial (--breakpoint-2xl: initial;). To start from scratch, put --breakpoint-*: initial; first and then define your own.

Tailwind v3: tailwind.config.js

const defaultTheme = require('tailwindcss/defaultTheme')

/** @type {import('tailwindcss').Config} */
module.exports = {
  theme: {
    screens: {
      ...defaultTheme.screens,
      md: '744px',     // iPad mini joins md
      '3xl': '1920px', // new, after 2xl
    },
  },
}

In v3, theme.screens replaces the whole set, which is why the defaults are spread in first. Keep them in ascending order.

Ask your AI to check it

If an AI tool built your site, paste this in:

My site uses Tailwind's default breakpoints (sm 640, md 768, lg 1024, xl 1280, 2xl 1536, all min-width). Go through every sm:, md:, lg:, xl: and 2xl: class and check: 1) phones on their side (667–1006px wide but only 360–466px tall) don't get anything that needs height, like a sticky header or a full-screen hero; 2) the iPad mini (744px) and iPad Air (820px) both get a sensible layout; 3) laptops between 1280 and 1535px (MacBook Air 13 is 1470px, MacBook Pro 14 is 1512px) get a finished design, not a gap between the tablet and 2xl layouts; 4) any container has side padding. Don't change the breakpoint values. List every change you make.

Does your site fit?

Paste your address (or localhost:3000). doesitfit shows it on real screen sizes at once and tells you, bluntly, where it spills.

Free, no sign-up. Or ask Claude, ChatGPT or Codex to check it.

In doesitfit, the Tailwind breakpoints preset loads one screen at the start of each range (640, 768, 1024, 1280 and 1536 wide, plus a 375px phone), and the Rotate button turns every phone sideways at once, which is the quickest way to catch the md-on-a-phone problem. For the bigger picture on where to put breakpoints, see responsive breakpoints in 2026.

The short version

  • No prefix = phones. No regular phone held upright reaches sm.
  • md catches most tablets and nearly every phone on its side. Check it at 874×337, not just 820×1180.
  • The iPad mini is sm; the 13″ iPads are lg.
  • Most MacBooks are xl, not 2xl. Finish your xl design.
  • Customize in @theme (v4) or theme.screens (v3) when the data says a device is on the wrong side of a line.

Questions people ask

Is Tailwind's md breakpoint for tablets?

Only loosely. md starts at 768px, which catches most iPads and Android tablets held upright, but also nearly every phone turned sideways, and it misses the iPad mini at 744px.

Are Tailwind breakpoints min-width or max-width?

Min-width. md:flex means from 768px and wider. Use max-md:flex when you want below 768px instead.

What is the Tailwind breakpoint for mobile?

There isn't one, because mobile is the default. Write phone styles without a prefix and add sm:, md: and so on for wider screens. No regular phone held upright is 640px wide, so none of them reach sm.

How do I add a custom breakpoint in Tailwind v4?

Add a --breakpoint-* variable inside @theme in your main CSS file, for example --breakpoint-3xl: 120rem; which creates a 3xl: variant. Tailwind v3 used the screens key in tailwind.config.js instead.

Keep reading