HomeCSS Tailwind
Chapter 2
02 β Tailwind CSS Fundamentals
Setup
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init// tailwind.config.js
module.exports = {
content: [
"./src/**/*.{html,js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}/* src/input.css */
@tailwind base;
@tailwind components;
@tailwind utilities;Core Philosophy
Utility-first: Build with small, composable classes.
<!-- Instead of -->
<button class="btn-primary">Click</button>
<!-- Use -->
<button class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
Click
</button>Spacing Scale
0 β 0
0.5 β 0.125rem (2px)
1 β 0.25rem (4px)
1.5 β 0.375rem (6px)
2 β 0.5rem (8px)
2.5 β 0.625rem (10px)
3 β 0.75rem (12px)
4 β 1rem (16px)
5 β 1.25rem (20px)
6 β 1.5rem (24px)
8 β 2rem (32px)
10 β 2.5rem (40px)
12 β 3rem (48px)
16 β 4rem (64px)
20 β 5rem (80px)
24 β 6rem (96px)
32 β 8rem (128px)Usage: m-4 (margin: 1rem), p-2 (padding: 0.5rem), gap-6
Colors
bg-blue-500 text-blue-500 border-blue-500
bg-slate-900 text-slate-900 border-slate-900
bg-white text-white border-white
bg-black text-black border-blackShades: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950
<div class="bg-slate-100 text-slate-900 border border-slate-300">
Content
</div>Flexbox
<!-- Direction -->
<div class="flex flex-row"> <!-- row (default) -->
<div class="flex flex-col"> <!-- column -->
<!-- Justify Content -->
<div class="flex justify-start"> <!-- flex-start (default) -->
<div class="flex justify-center"> <!-- center -->
<div class="flex justify-end"> <!-- flex-end -->
<div class="flex justify-between"> <!-- space-between -->
<div class="flex justify-around"> <!-- space-around -->
<!-- Align Items -->
<div class="flex items-start"> <!-- flex-start -->
<div class="flex items-center"> <!-- center -->
<div class="flex items-end"> <!-- flex-end -->
<div class="flex items-baseline"> <!-- baseline -->
<div class="flex items-stretch"> <!-- stretch (default) -->
<!-- Gap -->
<div class="flex gap-4"> <!-- 1rem gap -->
<div class="flex gap-x-4 gap-y-2"> <!-- horizontal/vertical -->
<!-- Wrap -->
<div class="flex flex-wrap"> <!-- Allow wrapping -->Grid
<!-- Basic Grid -->
<div class="grid grid-cols-3 gap-4">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
<!-- Responsive Grid -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<div>Item</div>
</div>
<!-- Span Columns/Rows -->
<div class="col-span-2"> <!-- Span 2 columns -->
<div class="row-span-3"> <!-- Span 3 rows -->
<!-- Grid Template -->
<div class="grid grid-cols-[100px_1fr_200px] gap-4">
<!-- Custom column sizes -->
</div>Typography
<!-- Font Size -->
<p class="text-xs">Extra small</p> <!-- 0.75rem -->
<p class="text-sm">Small</p> <!-- 0.875rem -->
<p class="text-base">Base</p> <!-- 1rem -->
<p class="text-lg">Large</p> <!-- 1.125rem -->
<p class="text-xl">Extra large</p> <!-- 1.25rem -->
<p class="text-2xl">2xl</p> <!-- 1.5rem -->
<p class="text-3xl">3xl</p> <!-- 1.875rem -->
<p class="text-4xl">4xl</p> <!-- 2.25rem -->
<!-- Font Weight -->
<p class="font-thin">Thin</p> <!-- 100 -->
<p class="font-light">Light</p> <!-- 300 -->
<p class="font-normal">Normal</p> <!-- 400 -->
<p class="font-medium">Medium</p> <!-- 500 -->
<p class="font-semibold">Semibold</p> <!-- 600 -->
<p class="font-bold">Bold</p> <!-- 700 -->
<!-- Text Alignment -->
<p class="text-left">Left</p>
<p class="text-center">Center</p>
<p class="text-right">Right</p>
<!-- Text Color -->
<p class="text-blue-500">Blue text</p>
<p class="text-slate-900">Dark text</p>
<!-- Line Height -->
<p class="leading-tight">Tight</p> <!-- 1.25 -->
<p class="leading-normal">Normal</p> <!-- 1.5 -->
<p class="leading-relaxed">Relaxed</p> <!-- 1.625 -->Sizing
<!-- Width -->
<div class="w-8">2rem</div> <!-- 2rem -->
<div class="w-1/2">50%</div> <!-- 50% -->
<div class="w-full">100%</div> <!-- 100% -->
<div class="w-screen">100vw</div> <!-- Viewport width -->
<div class="w-auto">Auto</div> <!-- Auto -->
<div class="w-max">Max</div> <!-- Max-content -->
<div class="w-min">Min</div> <!-- Min-content -->
<!-- Height -->
<div class="h-8">2rem</div>
<div class="h-full">100%</div>
<div class="h-screen">100vh</div>
<!-- Min/Max -->
<div class="min-w-0">Min width 0</div>
<div class="max-w-md">Max width 28rem</div>
<div class="max-w-screen-lg">Max width 64rem</div>
<div class="max-w-full">Max width 100%</div>Borders
<!-- Border Width -->
<div class="border-2">2px border</div>
<div class="border-t-4">Top border only</div>
<!-- Border Color -->
<div class="border-blue-500">Blue border</div>
<!-- Border Radius -->
<div class="rounded">0.25rem</div> <!-- Small -->
<div class="rounded-md">0.375rem</div> <!-- Medium -->
<div class="rounded-lg">0.5rem</div> <!-- Large -->
<div class="rounded-xl">0.75rem</div> <!-- Extra large -->
<div class="rounded-full">9999px</div> <!-- Pill/Circle -->
<div class="rounded-t-lg">Top corners only</div>
<!-- Border Style -->
<div class="border-dashed">Dashed</div>
<div class="border-dotted">Dotted</div>Backgrounds
<!-- Background Color -->
<div class="bg-blue-500">Blue</div>
<div class="bg-slate-900">Dark</div>
<!-- Opacity -->
<div class="bg-blue-500/50">50% opacity</div>
<!-- Gradient -->
<div class="bg-gradient-to-r from-blue-500 to-purple-600">
Gradient
</div>Display & Visibility
<!-- Display -->
<div class="block">Block</div>
<div class="inline">Inline</div>
<div class="inline-block">Inline-block</div>
<div class="flex">Flex</div>
<div class="grid">Grid</div>
<div class="hidden">Hidden</div>
<!-- Responsive Display -->
<div class="hidden md:block">Hidden on mobile, block on desktop</div>
<!-- Visibility -->
<div class="visible">Visible</div>
<div class="invisible">Invisible (still takes space)</div>
<!-- Opacity -->
<div class="opacity-50">50% opacity</div>
<div class="opacity-0">Invisible</div>Position
<div class="relative">
<div class="absolute top-0 left-0">Top-left corner</div>
<div class="absolute bottom-0 right-0">Bottom-right corner</div>
<div class="absolute inset-0">Cover entire parent</div>
</div>
<div class="fixed top-0 left-0 w-full">Fixed header</div>
<div class="sticky top-0">Sticks when scrolling</div>Z-Index
<div class="z-0">Default</div>
<div class="z-10">Above default</div>
<div class="z-50">Modal</div>
<div class="z-auto">Auto</div>Key Takeaways
- Utility-first: Compose small classes instead of writing custom CSS
- Responsive prefixes:
sm:,md:,lg:,xl:,2xl:for breakpoints - Hover/focus states:
hover:bg-blue-600,focus:ring-2 - Spacing scale: 0.25rem increments (m-4 = 1rem margin)
- Colors: Use shades (50-950) for consistent design system
- Flex/Grid: Built-in utilities for modern layouts
- Customization: Extend in
tailwind.config.js