Skip to content

Tailwind CSS - Place Items

Welcome to the modern guide for place-items in Tailwind CSS. This utility is a powerful shorthand for simultaneously controlling how items are aligned along both the block and inline axes within a Grid or Flexbox layout. It combines the functionality of align-items and justify-items into a single, convenient class.

Prerequisites: Setting Up a Modern Tailwind Environment

Section titled “Prerequisites: Setting Up a Modern Tailwind Environment”

While you can use the Tailwind Play CDN for quick demos, real-world projects benefit from a proper build process. This allows for customization, optimization, and better performance. Here’s a minimal setup:

  1. Initialize your project: Make sure you have Node.js installed. Run npm init -y in a new folder.
  2. Install Tailwind CSS: Run npm install -D tailwindcss postcss autoprefixer.
  3. Create config files: Run npx tailwindcss init -p. This will create tailwind.config.js and postcss.config.js.
  4. Configure template paths: Open tailwind.config.js and tell Tailwind where to find your class names:
tailwind.config.js
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
}
  1. Create your CSS entrypoint: Create a file like ./src/input.css and add Tailwind’s directives:
src/input.css
@tailwind base;
@tailwind components;
@tailwind utilities;
  1. Start the build process: Run the Tailwind CLI to scan your files and generate the output CSS. For development, use the --watch flag: npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
  2. Link in your HTML: Create a ./src/index.html file and link to the generated stylesheet:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/dist/output.css" rel="stylesheet">
<title>Tailwind Place Items</title>
</head>
<body>
<!-- Your content here -->
</body>
</html>

The place-items utility is a shorthand for the CSS properties align-items and justify-items. It’s primarily used in Grid layouts to control the alignment of grid items within their grid cells. While it has an effect in Flexbox, place-content is often more useful for aligning flex items.

ClassCSS PropertiesDescription
place-items-startplace-items: start;Aligns items to the top-left corner of their cell.
place-items-endplace-items: end;Aligns items to the bottom-right corner of their cell.
place-items-centerplace-items: center;Centers items horizontally and vertically within their cell.
place-items-baselineplace-items: baseline;Aligns items based on their text baseline.
place-items-stretchplace-items: stretch;Stretches items to fill the entire cell (this is the default).

Practical Example: Building a Responsive Card Grid

Section titled “Practical Example: Building a Responsive Card Grid”

Let’s see place-items in action. In this example, we’ll create a grid of cards. We want each card’s content to be perfectly centered. The place-items-center utility is perfect for this.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/dist/output.css" rel="stylesheet">
<title>Responsive Card Grid</title>
</head>
<body class="bg-slate-100 p-4 sm:p-8">
<main>
<h1 class="text-3xl font-bold text-slate-800 mb-6 text-center">Our Services</h1>
<!-- The grid container -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<!-- Card 1: Centered Item -->
<div class="h-48 bg-white rounded-lg shadow-md grid place-items-center">
<div class="p-4 bg-sky-500 text-white font-semibold rounded-md">
Centered Item
</div>
</div>
<!-- Card 2: Start-aligned Item -->
<div class="h-48 bg-white rounded-lg shadow-md grid place-items-start">
<div class="p-4 bg-emerald-500 text-white font-semibold rounded-md">
Start-aligned
</div>
</div>
<!-- Card 3: End-aligned Item -->
<div class="h-48 bg-white rounded-lg shadow-md grid place-items-end">
<div class="p-4 bg-rose-500 text-white font-semibold rounded-md">
End-aligned
</div>
</div>
</div>
</main>
<section class="mt-12">
<h2 class="text-2xl font-bold text-slate-700 mb-4 text-center">Common Pitfalls & Debugging</h2>
<div class="max-w-2xl mx-auto bg-white p-6 rounded-lg shadow">
<h3 class="font-semibold text-lg text-amber-700">Mistake: Forgetting the Container Type</h3>
<p class="text-slate-600 mt-2">The `place-items-*` utilities will have **no effect** if the container element does not have `display: grid`. Always ensure your container is a grid container first, like `<div class="grid place-items-center">...</div>`.</p>
<h3 class="font-semibold text-lg text-amber-700 mt-4">Tip: `place-items` vs. `place-content`</h3>
<p class="text-slate-600 mt-2">Use `place-items` to align items **inside** their individual grid cells. Use `place-content` to align the **entire grid of items** within the grid container itself when there's extra space.</p>
</div>
</section>
</body>
</html>