Skip to content

Tailwind CSS - Sizing

Sizing utilities are fundamental to building consistent and responsive layouts in Tailwind CSS. They allow you to control the width and height of elements using a predefined, intuitive scale. This includes fixed sizes, percentages, and viewport-relative units.

Here are the primary utilities for controlling element dimensions. They provide a robust foundation for most layout needs.

Utility GroupDescriptionCommon Examples
Width (w-*))Sets the width of an element.w-64, w-1/2, w-full, w-screen, w-auto
Min-Width (min-w-*))Sets the minimum width of an element.min-w-0, min-w-full, min-w-[200px] (arbitrary)
Max-Width (max-w-*))Sets the maximum width of an element, often used for readability.max-w-md, max-w-7xl, max-w-screen-lg
Height (h-*))Sets the height of an element.h-48, h-full, h-screen, h-auto
Min-Height (min-h-*))Sets the minimum height of an element.min-h-0, min-h-full, min-h-screen
Max-Height (max-h-*))Sets the maximum height of an element.max-h-48, max-h-full, max-h-screen
Size (size-*))A shorthand to set both width and height simultaneously.size-16, size-1/2, size-full

Let’s see how these sizing utilities work in practice. The following examples demonstrate common use cases for building modern UIs.

This example shows a container that is full-width on small screens but constrained to a maximum width on larger screens for better readability. This is a very common pattern for content sections.

<!--
For modern development, it's recommended to set up Tailwind CSS with a build tool like Vite or Next.js.
For simplicity in this demo, we use the Tailwind Play CDN.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Sizing Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-100 p-8 font-sans">
<h2 class="text-2xl font-bold mb-4 text-slate-800">Responsive Content Container</h2>
<div class="w-full max-w-4xl mx-auto bg-white p-6 rounded-lg shadow-md">
<p class="text-slate-600">
This div uses `w-full` to take up the full width of its parent, but `max-w-4xl` prevents it from becoming too wide on large screens. `mx-auto` is used to center it horizontally.
</p>
</div>
<h2 class="text-2xl font-bold mt-8 mb-4 text-slate-800">Min-Width for Buttons</h2>
<div class="flex space-x-4">
<button class="min-w-[120px] bg-blue-500 text-white font-semibold py-2 px-4 rounded-lg shadow-md hover:bg-blue-600 transition-colors">
Submit
</button>
<button class="min-w-[120px] bg-gray-300 text-slate-800 font-semibold py-2 px-4 rounded-lg shadow-md hover:bg-gray-400 transition-colors">
A much longer label
</button>
</div>
<p class="mt-2 text-sm text-slate-500">Using `min-w-[120px]` ensures both buttons have the same minimum width for a uniform look, even with different text lengths.</p>
</body>
</html>

The h-screen and min-h-screen utilities are perfect for creating layouts that fill the entire viewport, such as hero sections or application dashboards. The size-* utility is a convenient shorthand for setting both width and height.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Height & Size Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-100">
<!-- A full-screen hero section -->
<div class="min-h-screen bg-gradient-to-b from-sky-400 to-sky-600 flex flex-col items-center justify-center p-4 text-white">
<h1 class="text-5xl font-bold">Welcome!</h1>
<p class="mt-4 text-lg">This section uses `min-h-screen` to always fill the viewport's height.</p>
</div>
<!-- Using the size-* utility -->
<div class="p-8">
<h2 class="text-2xl font-bold mb-4 text-slate-800">Size Utility</h2>
<div class="flex items-center space-x-4">
<div class="size-24 bg-violet-500 rounded-lg flex items-center justify-center font-bold text-white shadow-lg">size-24</div>
<div class="size-32 bg-violet-500 rounded-full flex items-center justify-center font-bold text-white shadow-lg">size-32</div>
<p class="text-slate-600">The `size-*` utilities set width and height in one class.</p>
</div>
</div>
</body>
</html>
  • Mobile-First: Design for small screens first, then use responsive prefixes like md:w-1/2 to adapt the layout for larger screens.
  • Use max-w for Content: For text-heavy containers, use max-w-* (e.g., max-w-prose) to control line length and improve readability.
  • min-h-screen for Layouts: Prefer min-h-screen over h-screen for top-level layout containers. This prevents content from being cut off on small screens if it overflows the viewport height.
  • Arbitrary Values: When the default sizing scale isn’t enough, use arbitrary values for one-off sizing needs, like w-[300px] or h-[50vh].