<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: screensize</title>
    <description>The latest articles on DEV Community by screensize (@screensize).</description>
    <link>https://dev.to/screensize</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4199476%2F650bacef-5591-44cb-9a1d-4adde7241eed.png</url>
      <title>DEV Community: screensize</title>
      <link>https://dev.to/screensize</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/screensize"/>
    <language>en</language>
    <item>
      <title>Screen Sizes &amp; Viewport Cheat Sheet for 2026</title>
      <dc:creator>screensize</dc:creator>
      <pubDate>Thu, 22 Oct 2026 03:41:26 +0000</pubDate>
      <link>https://dev.to/screensize/screen-sizes-viewport-cheat-sheet-for-2026-kba</link>
      <guid>https://dev.to/screensize/screen-sizes-viewport-cheat-sheet-for-2026-kba</guid>
      <description>&lt;h1&gt;
  
  
  Screen Sizes &amp;amp; Viewport Cheat Sheet for 2026
&lt;/h1&gt;

&lt;p&gt;Every responsive bug report starts the same way: "it looks broken on my phone." Then you spend ten minutes hunting for that phone's viewport width — one site lists the panel resolution, another lists a viewport from two generations ago, and a third just says "various."&lt;/p&gt;

&lt;p&gt;This is the cheat sheet I keep coming back to: the device viewports worth testing in 2026, the framework breakpoints next to them, and the three numbers — resolution, viewport, DPR — that developers constantly mix up. All values below are portrait CSS-pixel references. Treat heights as references, not guarantees: mobile browser bars, keyboards and zoom change the visible height, while width stays comparatively stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phone viewports worth testing
&lt;/h2&gt;

&lt;p&gt;Eleven models cover nearly every width your layout will meet in production, from the narrow 360px Android baseline to the 440px Pro Max class. The full model-by-model reference lives in the &lt;a href="https://screensize.net/iphone-viewport-sizes" rel="noopener noreferrer"&gt;iPhone viewport sizes&lt;/a&gt; table and the &lt;a href="https://screensize.net/device-screen-sizes" rel="noopener noreferrer"&gt;device screen sizes index&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Device&lt;/th&gt;
&lt;th&gt;CSS viewport&lt;/th&gt;
&lt;th&gt;Panel resolution&lt;/th&gt;
&lt;th&gt;DPR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Galaxy S25&lt;/td&gt;
&lt;td&gt;360 × 780&lt;/td&gt;
&lt;td&gt;1080 × 2340&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone SE (3rd gen)&lt;/td&gt;
&lt;td&gt;375 × 667&lt;/td&gt;
&lt;td&gt;750 × 1334&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Galaxy S25 Ultra&lt;/td&gt;
&lt;td&gt;384 × 832&lt;/td&gt;
&lt;td&gt;1440 × 3120&lt;/td&gt;
&lt;td&gt;3.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 14&lt;/td&gt;
&lt;td&gt;390 × 844&lt;/td&gt;
&lt;td&gt;1170 × 2532&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 16&lt;/td&gt;
&lt;td&gt;393 × 852&lt;/td&gt;
&lt;td&gt;1179 × 2556&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 17&lt;/td&gt;
&lt;td&gt;402 × 874&lt;/td&gt;
&lt;td&gt;1206 × 2622&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pixel 10&lt;/td&gt;
&lt;td&gt;412 × 923&lt;/td&gt;
&lt;td&gt;1080 × 2424&lt;/td&gt;
&lt;td&gt;2.625&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone Air&lt;/td&gt;
&lt;td&gt;420 × 912&lt;/td&gt;
&lt;td&gt;1260 × 2736&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pixel 10 Pro&lt;/td&gt;
&lt;td&gt;427 × 952&lt;/td&gt;
&lt;td&gt;1280 × 2856&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 16 Plus&lt;/td&gt;
&lt;td&gt;430 × 932&lt;/td&gt;
&lt;td&gt;1290 × 2796&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 17 Pro Max&lt;/td&gt;
&lt;td&gt;440 × 956&lt;/td&gt;
&lt;td&gt;1320 × 2868&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Patterns worth internalizing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modern iPhones cluster tightly.&lt;/strong&gt; Everything from the iPhone 14 to the 17 sits between 390 and 440 CSS pixels wide, all at DPR 3. If your layout survives 390, 402 and 430, it survives the current iPhone line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android is wider at the edges.&lt;/strong&gt; The base Galaxy line still reports 360px — the narrowest mainstream target, and the one that exposes cramped toolbars and rigid dialogs first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DPR is not always a whole number.&lt;/strong&gt; The Pixel 10 ships at 2.625 and the S25 Ultra at 3.75. Hard-coding "retina = 2x or 3x" assumptions into image pipelines is how blurry hero images happen; serve &lt;code&gt;srcset&lt;/code&gt; steps and let the browser pick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared widths hide differences.&lt;/strong&gt; Several models share a viewport width while differing in height, DPR and safe areas. A matching reference is a starting point for testing, not proof two devices render identically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tablets and laptops, briefly
&lt;/h2&gt;

&lt;p&gt;Tablet viewports overlap small-laptop widths, which is why "tablet layout" and "small desktop layout" so often collide around 1024px.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Device / class&lt;/th&gt;
&lt;th&gt;CSS viewport / workspace&lt;/th&gt;
&lt;th&gt;Panel resolution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iPad mini (A17 Pro)&lt;/td&gt;
&lt;td&gt;744 × 1133&lt;/td&gt;
&lt;td&gt;1488 × 2266&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classic iPad reference&lt;/td&gt;
&lt;td&gt;768 × 1024&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPad (10th gen) / iPad Air 11"&lt;/td&gt;
&lt;td&gt;820 × 1180&lt;/td&gt;
&lt;td&gt;1640 × 2360&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPad Pro 11" (M4)&lt;/td&gt;
&lt;td&gt;834 × 1210&lt;/td&gt;
&lt;td&gt;1668 × 2420&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPad Pro 13" (M4)&lt;/td&gt;
&lt;td&gt;1032 × 1376&lt;/td&gt;
&lt;td&gt;2064 × 2752&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget laptop (WXGA)&lt;/td&gt;
&lt;td&gt;1366 × 768&lt;/td&gt;
&lt;td&gt;1366 × 768&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MacBook Air 13" (M3)&lt;/td&gt;
&lt;td&gt;1470 × 956&lt;/td&gt;
&lt;td&gt;2560 × 1664&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MacBook Pro 14" (M4)&lt;/td&gt;
&lt;td&gt;1512 × 982&lt;/td&gt;
&lt;td&gt;3024 × 1964&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1080p panel at 125% scaling&lt;/td&gt;
&lt;td&gt;1536 × 864&lt;/td&gt;
&lt;td&gt;1920 × 1080&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things to notice. First, laptop "workspace" values are scaled: a 2560 × 1664 MacBook Air panel gives CSS a 1470 × 956 layout space, and OS scaling — not the panel — decides what your media queries see. Second, the classic 768 × 1024 iPad reference refuses to die; it is still a useful portrait test width even though current iPads report larger viewports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tailwind vs. Bootstrap breakpoints
&lt;/h2&gt;

&lt;p&gt;Both frameworks are mobile-first min-width systems, but their thresholds only agree at 768px. The side-by-side reference, with a live checker that tracks your current width against both systems, is the &lt;a href="https://screensize.net/responsive-breakpoints" rel="noopener noreferrer"&gt;responsive breakpoint checker&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Tailwind&lt;/th&gt;
&lt;th&gt;Bootstrap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Base&lt;/td&gt;
&lt;td&gt;0–639px (base)&lt;/td&gt;
&lt;td&gt;0–575px (&lt;code&gt;xs&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sm&lt;/code&gt; 640px&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sm&lt;/code&gt; 576px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;md&lt;/code&gt; 768px&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;md&lt;/code&gt; 768px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;lg&lt;/code&gt; 1024px&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;lg&lt;/code&gt; 992px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extra large&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;xl&lt;/code&gt; 1280px&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;xl&lt;/code&gt; 1200px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Largest&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;2xl&lt;/code&gt; 1536px&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;xxl&lt;/code&gt; 1400px&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Practical consequences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A layout that switches to two columns at Bootstrap &lt;code&gt;lg&lt;/code&gt; (992px) does so 32px earlier than the same layout at Tailwind &lt;code&gt;lg&lt;/code&gt; (1024px). Porting components between the two without adjusting expectations shifts every boundary.&lt;/li&gt;
&lt;li&gt;Tailwind expresses its thresholds in rem (640px = 40rem at the default root size), Bootstrap in px. If a user changes their browser's root font size, rem-based breakpoints move and px-based ones don't — a classic source of "works on my machine."&lt;/li&gt;
&lt;li&gt;Test the pixel &lt;em&gt;below&lt;/em&gt; each threshold, not just the threshold itself: 639, 767, 1023, 1279 and 1535 are where the old layout makes its last stand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only keep one testing set, make it 360, 393, 430, 768, 1024, 1366, 1536 and 1920 — narrow Android, common iPhone, large phone, tablet portrait, tablet landscape, small laptop, large laptop and desktop. The reasoning behind that set is laid out in the &lt;a href="https://screensize.net/common-screen-resolutions" rel="noopener noreferrer"&gt;common screen resolutions reference&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your own device, live
&lt;/h2&gt;

&lt;p&gt;Tables tell you what a device &lt;em&gt;should&lt;/em&gt; report. Your actual browser may disagree — because of zoom, OS display scaling, an installed web app shell, or a keyboard eating half the screen. When a bug is on &lt;em&gt;your&lt;/em&gt; desk, measure the real thing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://screensize.net/viewport-size" rel="noopener noreferrer"&gt;viewport size checker&lt;/a&gt; on the device in question.&lt;/li&gt;
&lt;li&gt;Read three values: viewport (&lt;code&gt;window.innerWidth&lt;/code&gt; × &lt;code&gt;innerHeight&lt;/code&gt;), DPR (&lt;code&gt;window.devicePixelRatio&lt;/code&gt;), and the active Tailwind/Bootstrap range.&lt;/li&gt;
&lt;li&gt;Resize or rotate and watch the values update; then paste the report straight into the bug ticket, so QA reproduces at your width instead of guessing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For screenshot and image bugs, multiply the CSS slot by the live DPR: a 360px-wide slot on a DPR 3 phone needs a 1080px asset to stay sharp, and exporting at the panel resolution "to be safe" just ships megabytes nobody asked for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three numbers everyone confuses
&lt;/h2&gt;

&lt;p&gt;Most screen-size confusion is one paragraph away from disappearing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical resolution&lt;/strong&gt; is the panel's pixel grid — 1179 × 2556 on an iPhone 16. It describes hardware. Your CSS never sees it directly. &lt;strong&gt;CSS viewport&lt;/strong&gt; is the area the page renders into, in CSS pixels — 393 × 852 on that same phone. Media queries, breakpoints and layout respond to this number and only this number. &lt;strong&gt;DPR&lt;/strong&gt; is the ratio between them: how many physical pixels paint one CSS pixel. It drives image sharpness (and screenshot dimensions), but it does &lt;em&gt;not&lt;/em&gt; change which breakpoint is active.&lt;/p&gt;

&lt;p&gt;So when a spec sheet brags about a huge resolution, divide by DPR before you panic: what lands in your stylesheet is the viewport. And when a user reports a "tiny" screen, ask for their viewport and DPR — not their panel resolution — before you touch a single media query.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Test widths, not devices: 360–440px covers current phones, 768–1032px covers tablets, and scaled laptop workspaces matter more than panel resolutions. Keep resolution, viewport and DPR in separate mental buckets, verify your own browser live instead of trusting spec sheets, and always check the pixel just below the breakpoint.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>frontend</category>
      <category>responsive</category>
    </item>
  </channel>
</rss>
