Menu

Tailwind CSS Space Between

Spacing plays a vital role in creating visually structured and accessible web layouts. The space-* utilities in Tailwind CSS allow you to manage horizontal and vertical gaps between sibling elements effortlessly.

In this guide, we'll explore how to use the space-* utilities effectively, understand their constraints, apply them based on states or breakpoints, and even customize them for specific projects.

ClassPropertiesExample
space-x-0margin-left: 0px;<div className="space-x-0"></div>
space-y-0margin-top: 0px;<div className="space-y-0"></div>
space-x-0.5margin-left: 0.125rem; <div className="space-x-0.5"></div>
space-y-0.5margin-top: 0.125rem; <div className="space-y-0.5"></div>
space-x-1margin-left: 0.25rem; <div className="space-x-1"></div>
space-y-1margin-top: 0.25rem; <div className="space-y-1"></div>
space-x-1.5margin-left: 0.375rem; <div className="space-x-1.5"></div>
space-y-1.5margin-top: 0.375rem; <div className="space-y-1.5"></div>
space-x-2margin-left: 0.5rem; <div className="space-x-2"></div>
space-y-2margin-top: 0.5rem; <div className="space-y-2"></div>
space-x-2.5margin-left: 0.625rem; <div className="space-x-2.5"></div>
space-y-2.5margin-top: 0.625rem; <div className="space-y-2.5"></div>
space-x-3margin-left: 0.75rem; <div className="space-x-3"></div>
space-y-3margin-top: 0.75rem; <div className="space-y-3"></div>
space-x-3.5margin-left: 0.875rem; <div className="space-x-3.5"></div>
space-y-3.5margin-top: 0.875rem; <div className="space-y-3.5"></div>
space-x-4margin-left: 1rem; <div className="space-x-4"></div>
space-y-4margin-top: 1rem; <div className="space-y-4"></div>
space-x-5margin-left: 1.25rem; <div className="space-x-5"></div>
space-y-5margin-top: 1.25rem; <div className="space-y-5"></div>
space-x-6margin-left: 1.5rem; <div className="space-x-6"></div>
space-y-6margin-top: 1.5rem; <div className="space-y-6"></div>
space-x-7margin-left: 1.75rem; <div className="space-x-7"></div>
space-y-7margin-top: 1.75rem; <div className="space-y-7"></div>
space-x-8margin-left: 2rem; <div className="space-x-8"></div>
space-y-8margin-top: 2rem; <div className="space-y-8"></div>
space-x-9margin-left: 2.25rem; <div className="space-x-9"></div>
space-y-9margin-top: 2.25rem; <div className="space-y-9"></div>
space-x-10margin-left: 2.5rem; <div className="space-x-10"></div>
space-y-10margin-top: 2.5rem; <div className="space-y-10"></div>
space-x-11margin-left: 2.75rem; <div className="space-x-11"></div>
space-y-11margin-top: 2.75rem; <div className="space-y-11"></div>
space-x-12margin-left: 3rem; <div className="space-x-12"></div>
space-y-12margin-top: 3rem; <div className="space-y-12"></div>
space-x-14margin-left: 3.5rem; <div className="space-x-14"></div>
space-y-14margin-top: 3.5rem; <div className="space-y-14"></div>
space-x-16margin-left: 4rem; <div className="space-x-16"></div>
space-y-16margin-top: 4rem; <div className="space-y-16"></div>
space-x-20margin-left: 5rem; <div className="space-x-20"></div>
space-y-20margin-top: 5rem; <div className="space-y-20"></div>
space-x-24margin-left: 6rem; <div className="space-x-24"></div>
space-y-24margin-top: 6rem; <div className="space-y-24"></div>
space-x-28margin-left: 7rem; <div className="space-x-28"></div>
space-y-28margin-top: 7rem; <div className="space-y-28"></div>
space-x-32margin-left: 8rem; <div className="space-x-32"></div>
space-y-32margin-top: 8rem; <div className="space-y-32"></div>
space-x-36margin-left: 9rem; <div className="space-x-36"></div>
space-y-36margin-top: 9rem; <div className="space-y-36"></div>
space-x-40margin-left: 10rem; <div className="space-x-40"></div>
space-y-40margin-top: 10rem; <div className="space-y-40"></div>
space-x-44margin-left: 11rem; <div className="space-x-44"></div>
space-y-44margin-top: 11rem; <div className="space-y-44"></div>
space-x-48margin-left: 12rem; <div className="space-x-48"></div>
space-y-48margin-top: 12rem; <div className="space-y-48"></div>
space-x-52margin-left: 13rem; <div className="space-x-52"></div>
space-y-52margin-top: 13rem; <div className="space-y-52"></div>
space-x-56margin-left: 14rem; <div className="space-x-56"></div>
space-y-56margin-top: 14rem; <div className="space-y-56"></div>
space-x-60margin-left: 15rem; <div className="space-x-60"></div>
space-y-60margin-top: 15rem; <div className="space-y-60"></div>
space-x-64margin-left: 16rem; <div className="space-x-64"></div>
space-y-64margin-top: 16rem; <div className="space-y-64"></div>
space-x-72margin-left: 18rem; <div className="space-x-72"></div>
space-y-72margin-top: 18rem; <div className="space-y-72"></div>
space-x-80margin-left: 20rem; <div className="space-x-80"></div>
space-y-80margin-top: 20rem; <div className="space-y-80"></div>
space-x-96margin-left: 24rem; <div className="space-x-96"></div>
space-y-96margin-top: 24rem; <div className="space-y-96"></div>
space-x-pxmargin-left: 1px;<div className="space-x-px"></div>
space-y-pxmargin-top: 1px;<div className="space-y-px"></div>
space-y-reverse--tw-space-y-reverse: 1;<div className="space-y-reverse"></div>
space-x-reverse--tw-space-x-reverse: 1;<div className="space-x-reverse"></div>

Overview of space

Horizontal Spacing

To add horizontal spacing between sibling elements, use the space-x-* class.

This is a live editor. Play around with it!
export default function SpaceHorizontal() {
  return (
    <div className="flex space-x-4 bg-gray-50 h-screen w-screen">
      {/* Applying horizontal spacing of 1rem (4) */}
      <div className="w-20 h-20 bg-yellow-200"/>
      <div className="w-20 h-20 bg-orange-200"/>
      <div className="w-20 h-20 bg-red-200"/>
    </div>
  );
}

Vertical Spacing

To add vertical spacing between sibling elements, use the space-y-* class.

This is a live editor. Play around with it!
export default function SpaceVertical() {
  return (
    <div className="space-y-4 bg-gray-50 h-screen w-screen">
      {/* Applying vertical spacing of 1rem (4) */}
      <div className="w-20 h-20 bg-yellow-200"/>
      <div className="w-20 h-20 bg-orange-200"/>
      <div className="w-20 h-20 bg-red-200"/>
    </div>
  );
}

Reverse Order

When using flex-row-reverse or flex-col-reverse to show elements in the reverse order, you can use the space-x-reverse or space-y-reverse utilities to add the space as per the order.

This is a live editor. Play around with it!
export default function ReversedSpace() {
  return (
    <div className="flex flex-row-reverse space-x-4 space-x-reverse bg-gray-50 h-screen w-screen">
      <div className="w-20 h-20 bg-yellow-200"/>
      <div className="w-20 h-20 bg-orange-200"/>
      <div className="w-20 h-20 bg-red-200"/>
    </div>
  );
}

Negative Spacing

Negative values can also be applied to invert the spacing between sibling elements. Add - before a space utility to use its negative value.

This is a live editor. Play around with it!
export default function NegativeSpace() {
  return (
    <div className="flex -space-x-4 bg-gray-50 h-screen w-screen">
      <div className="w-20 h-20 bg-yellow-200"/>
      <div className="w-20 h-20 bg-orange-200"/>
      <div className="w-20 h-20 bg-red-200"/>
    </div>
  );
}

Limitations of Space

When working with space-* utilities, it’s essential to understand that they cannot be used in conjunction with Tailwind’s divide-* utilities. Both of these serve similar purposes, but conflicts arise due to differences in implementation at the CSS level.

The limitation stems from the fact that space-* applies margins directly, while divide-* elements apply a border between components. For unique styling requirements, consider using one of these utilities based on the design requirements.

States and Responsiveness

Hover and Focus States

Tailwind allows you to conditionally apply the space on certain states like hover and focus. Use Tailwind's state modifiers like- hover, focus, etc. to apply the utility only when these states are active, e.g., hover:space-x-4.

This is a live editor. Play around with it!
export default function HoverStateSpace() {
  return (
    <>
      <p className="underline m-10 mx-20 text-center">Hover on the below container</p>
      <div className="flex hover:space-x-4 bg-blue-50 h-40 items-center justify-center">
        <div className="w-20 h-20 bg-yellow-200"/>
        <div className="w-20 h-20 bg-orange-200"/>
        <div className="w-20 h-20 bg-red-200"/>
      </div>
    </>
  );
}

Breakpoint Modifiers

Tailwind CSS provides breakpoint modifiers to conditionally apply the space only when the screen hits the defined breakpoint. Use Tailwind's breakpoint modifiers like- sm, md, etc., to apply the utility only on these breakpoints and above, e.g., md:space-x-4.

This is a live editor. Play around with it!
export default function ResponsiveSpace() {
  return (
    <>
      <p className="underline m-10 mx-20 text-center">Spacing will change after <code>md</code> breakpoint</p>
      <div className="flex md:space-x-4 bg-blue-50 h-40 items-center justify-center">
        <div className="w-20 h-20 bg-yellow-200"/>
        <div className="w-20 h-20 bg-orange-200"/>
        <div className="w-20 h-20 bg-red-200"/>
      </div>
    </>
  );
}

Custom Space Between

Extending the Theme

Tailwind lets you customize the theme file to create new utilities beyond the default ones. Inside your tailwind.config.js, modify the spacing property under the theme.extend configuration.

This is a live editor. Play around with it!
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

export default function CustomSpacing() {
  return (
    <>
      <p className="underline m-10 mx-20 text-center">Custom spacing value</p>
      <div className="flex space-x-large bg-blue-50 h-40 items-center justify-center">
        <div className="w-20 h-20 bg-yellow-200"/>
        <div className="w-20 h-20 bg-orange-200"/>
        <div className="w-20 h-20 bg-red-200"/>
      </div>
    </>
  );
}

Using Arbitrary Values

Tailwind also lets you define arbitrary values directly in your classes for one-off use cases. Just use the square bracket syntax [value] wherever you need it, e.g., space-x-[15px].

This is a live editor. Play around with it!
export default function ArbitrarySpacing() {
  return (
    <>
      <p className="underline m-10 mx-20 text-center">Arbitrary spacing value</p>
      <div className="flex space-x-[15px] bg-blue-50 h-40 items-center justify-center">
        <div className="w-20 h-20 bg-yellow-200"/>
        <div className="w-20 h-20 bg-orange-200"/>
        <div className="w-20 h-20 bg-red-200"/>
      </div>
    </>
  );
}

Real World Examples

A responsive product gallery grid with dynamic spacing between items. Ideal for showcasing featured products with consistent spacing.

This is a live editor. Play around with it!
export default function ProductGallery() {
  const products = [
    {
      id: 1,
      name: "Leather Weekender Bag",
      price: "$249.99",
      src: "https://images.unsplash.com/photo-1553062407-98eeb64c6a62",
      alt: "Brown leather travel bag"
    },
    {
      id: 2,
      name: "Minimalist Watch",
      price: "$199.99",
      src: "https://images.unsplash.com/photo-1524592094714-0f0654e20314",
      alt: "Silver analog watch"
    },
    {
      id: 3,
      name: "Wireless Earbuds",
      price: "$159.99",
      src: "https://images.unsplash.com/photo-1572569511254-d8f925fe2cbb",
      alt: "White wireless earbuds"
    },
    {
      id: 4,
      name: "Leather Wallet",
      price: "$79.99",
      src: "https://images.unsplash.com/photo-1627123424574-724758594e93",
      alt: "Black leather wallet"
    },
    {
      id: 5,
      name: "Sunglasses",
      price: "$129.99",
      src: "https://images.unsplash.com/photo-1572635196237-14b3f281503f",
      alt: "Designer sunglasses"
    },
    {
      id: 6,
      name: "Canvas Backpack",
      price: "$89.99",
      src: "https://images.unsplash.com/photo-1553062407-98eeb64c6a62",
      alt: "Gray canvas backpack"
    }
  ];

  return (
    <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-6 gap-y-8 p-6">
      {products.map((product) => (
        <div key={product.id} className="space-y-4">
          <img 
            src={product.src}
            alt={product.alt}
            className="w-full h-64 object-cover rounded-lg"
          />
          <div className="space-y-2">
            <h3 className="text-lg font-semibold">{product.name}</h3>
            <p className="text-gray-600">{product.price}</p>
          </div>
        </div>
      ))}
    </div>
  );
}

Vertical Timeline with Spaced Events

A vertical timeline component showing events with consistent spacing between elements.

This is a live editor. Play around with it!
export default function Timeline() {
  const events = [
    {
      id: 1,
      date: "June 2023",
      title: "Company Launch",
      description: "Successfully launched our product to market",
      icon: "https://images.unsplash.com/photo-1533750349088-cd871a92f312",
    },
    {
      id: 2,
      date: "July 2023",
      title: "First Million Users",
      description: "Reached our first million active users",
      icon: "https://images.unsplash.com/photo-1460925895917-afdab827c52f",
    },
    {
      id: 3,
      date: "August 2023",
      title: "Series A Funding",
      description: "Secured $10M in Series A funding",
      icon: "https://images.unsplash.com/photo-1526304640581-d334cdbbf45e",
    },
    {
      id: 4,
      date: "September 2023",
      title: "International Expansion",
      description: "Expanded operations to Europe",
      icon: "https://images.unsplash.com/photo-1519098901909-b1553a1190af",
    },
    {
      id: 5,
      date: "October 2023",
      title: "New Office Opening",
      description: "Opened headquarters in San Francisco",
      icon: "https://images.unsplash.com/photo-1497366216548-37526070297c",
    },
    {
      id: 6,
      date: "November 2023",
      title: "Product Award",
      description: "Won Best Innovation Award 2023",
      icon: "https://images.unsplash.com/photo-1567427017947-545c5f8d16ad",
    }
  ];

  return (
    <div className="max-w-2xl mx-auto p-6">
      <div className="space-y-8">
        {events.map((event) => (
          <div key={event.id} className="flex space-x-4">
            <div className="flex-shrink-0 w-12 h-12">
              <img
                src={event.icon}
                alt=""
                className="w-full h-full rounded-full"
              />
            </div>
            <div className="space-y-2">
              <p className="text-sm text-gray-500">{event.date}</p>
              <h3 className="text-lg font-semibold">{event.title}</h3>
              <p className="text-gray-600">{event.description}</p>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

Team Member Cards with Bio

A grid of team member cards with consistent spacing between elements.

This is a live editor. Play around with it!
export default function TeamGrid() {
  const team = [
    {
      id: 1,
      name: "Sarah Johnson",
      role: "CEO",
      bio: "10+ years of startup experience",
      src: "https://images.unsplash.com/photo-1494790108377-be9c29b29330",
      alt: "Sarah Johnson headshot"
    },
    {
      id: 2,
      name: "Michael Chen",
      role: "CTO",
      bio: "Former Google engineer",
      src: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e",
      alt: "Michael Chen headshot"
    },
    {
      id: 3,
      name: "Emma Williams",
      role: "Design Director",
      bio: "Award-winning designer",
      src: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80",
      alt: "Emma Williams headshot"
    },
    {
      id: 4,
      name: "James Wilson",
      role: "Head of Marketing",
      bio: "Digital marketing expert",
      src: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e",
      alt: "James Wilson headshot"
    },
    {
      id: 5,
      name: "Lisa Rodriguez",
      role: "Product Manager",
      bio: "Former Amazon PM",
      src: "https://images.unsplash.com/photo-1534528741775-53994a69daeb",
      alt: "Lisa Rodriguez headshot"
    },
    {
      id: 6,
      name: "David Kim",
      role: "Lead Developer",
      bio: "Full-stack specialist",
      src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d",
      alt: "David Kim headshot"
    }
  ];

  return (
    <div className="bg-gray-50 p-8">
      <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
        {team.map((member) => (
          <div key={member.id} className="bg-white rounded-lg shadow-md p-6 space-y-4">
            <img
              src={member.src}
              alt={member.alt}
              className="w-32 h-32 rounded-full mx-auto"
            />
            <div className="text-center space-y-2">
              <h3 className="text-xl font-semibold">{member.name}</h3>
              <p className="text-blue-600 font-medium">{member.role}</p>
              <p className="text-gray-600">{member.bio}</p>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

Feature List with Icons

A list of features with consistent spacing and icon alignment.

This is a live editor. Play around with it!
export default function FeatureList() {
  const features = [
    {
      id: 1,
      title: "Cloud Storage",
      description: "Secure cloud storage with automatic backup",
      icon: "https://images.unsplash.com/photo-1590859808308-3d2d9c515b1a",
    },
    {
      id: 2,
      title: "Real-time Collaboration",
      description: "Work together with your team in real-time",
      icon: "https://images.unsplash.com/photo-1522071820081-009f0129c71c",
    },
    {
      id: 3,
      title: "Advanced Analytics",
      description: "Detailed insights and reporting tools",
      icon: "https://images.unsplash.com/photo-1551288049-bebda4e38f71",
    },
    {
      id: 4,
      title: "24/7 Support",
      description: "Round-the-clock customer support",
      icon: "https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d",
    },
    {
      id: 5,
      title: "Mobile Access",
      description: "Access your work from any device",
      icon: "https://images.unsplash.com/photo-1512941937669-90a1b58e7e9c",
    },
    {
      id: 6,
      title: "API Integration",
      description: "Easy integration with popular tools",
      icon: "https://images.unsplash.com/photo-1451187580459-43490279c0fa",
    }
  ];

  return (
    <div className="max-w-4xl mx-auto p-8">
      <div className="grid grid-cols-1 md:grid-cols-2 gap-8">
        {features.map((feature) => (
          <div key={feature.id} className="flex items-start space-x-4">
            <div className="flex-shrink-0">
              <img
                src={feature.icon}
                alt=""
                className="w-12 h-12 rounded-lg"
              />
            </div>
            <div className="space-y-2">
              <h3 className="text-lg font-semibold">{feature.title}</h3>
              <p className="text-gray-600">{feature.description}</p>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

Pricing Comparison Table

A pricing table with consistent spacing between elements and features.

This is a live editor. Play around with it!
export default function PricingTable() {
  const plans = [
    {
      id: 1,
      name: "Basic",
      price: "$9.99",
      features: [
        "1 User",
        "10GB Storage",
        "Basic Support",
        "Email Integration",
        "2 Projects",
        "Basic Analytics"
      ]
    },
    {
      id: 2,
      name: "Pro",
      price: "$24.99",
      features: [
        "5 Users",
        "50GB Storage",
        "Priority Support",
        "API Access",
        "10 Projects",
        "Advanced Analytics"
      ]
    },
    {
      id: 3,
      name: "Enterprise",
      price: "$49.99",
      features: [
        "Unlimited Users",
        "1TB Storage",
        "24/7 Support",
        "Custom Integration",
        "Unlimited Projects",
        "Custom Analytics"
      ]
    }
  ];

  return (
    <div className="p-8 bg-gray-50">
      <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
        {plans.map((plan) => (
          <div key={plan.id} className="bg-white rounded-lg shadow-lg p-6">
            <div className="space-y-6">
              <div className="text-center space-y-2">
                <h3 className="text-2xl font-bold">{plan.name}</h3>
                <p className="text-4xl font-bold text-blue-600">{plan.price}</p>
                <p className="text-gray-500">per month</p>
              </div>
              <div className="space-y-4">
                {plan.features.map((feature, index) => (
                  <div key={index} className="flex items-center space-x-3">
                    <svg className="w-5 h-5 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                      <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M5 13l4 4L19 7" />
                    </svg>
                    <span>{feature}</span>
                  </div>
                ))}
              </div>
              <button className="w-full py-2 px-4 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors">
                Choose Plan
              </button>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

Customization Examples

Responsive Card Grid with Custom Spacing

This example demonstrates a responsive grid of cards with custom spacing values defined in the theme configuration.

This is a live editor. Play around with it!
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

// App.js
export default function ResponsiveCardGrid() {
  const cards = [
    {
      title: "Mountain Retreat",
      image: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4",
      description: "Peaceful mountain getaway with panoramic views"
    },
    {
      title: "Beach Villa",
      image: "https://images.unsplash.com/photo-1520250497591-112f2f40a3f4",
      description: "Luxurious beachfront property with private access"
    },
    {
      title: "Forest Cabin",
      image: "https://images.unsplash.com/photo-1449158743715-0a90ebb6d2d8",
      description: "Cozy woodland retreat surrounded by nature"
    }
  ];

  return (
    <div className="px-card-outer py-card-outer">
      <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-card-gap">
        {cards.map((card, index) => (
          <div key={index} className="bg-white rounded-lg shadow-lg p-card-inner">
            <img
              src={card.image}
              alt={card.title}
              className="w-full h-48 object-cover rounded-t-lg"
            />
            <h3 className="text-xl font-bold mt-card-inner">{card.title}</h3>
            <p className="mt-2">{card.description}</p>
          </div>
        ))}
      </div>
    </div>
  );
}

Dashboard Layout with Custom Spacing

This example shows a dashboard layout with custom spacing for sections and components.

This is a live editor. Play around with it!
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

// App.js
export default function DashboardLayout() {
  return (
    <div className="min-h-screen bg-gray-100">
      <div className="p-content-padding">
        <header className="mb-dashboard-section">
          <h1 className="text-3xl font-bold">Analytics Dashboard</h1>
        </header>
        
        <div className="grid grid-cols-1 lg:grid-cols-3 gap-widget-gap mb-dashboard-section">
          <div className="bg-white p-6 rounded-xl shadow">
            <h2 className="text-lg font-semibold mb-4">Daily Visitors</h2>
            <p className="text-4xl font-bold">2,451</p>
          </div>
          
          <div className="bg-white p-6 rounded-xl shadow">
            <h2 className="text-lg font-semibold mb-4">Active Users</h2>
            <p className="text-4xl font-bold">873</p>
          </div>
          
          <div className="bg-white p-6 rounded-xl shadow">
            <h2 className="text-lg font-semibold mb-4">Conversion Rate</h2>
            <p className="text-4xl font-bold">12.3%</p>
          </div>
        </div>

        <div className="bg-white p-6 rounded-xl shadow">
          <h2 className="text-xl font-bold mb-dashboard-section">Recent Activity</h2>
          <div className="space-y-widget-gap">
            {[1, 2, 3].map((item) => (
              <div key={item} className="flex items-center border-b pb-4">
                <img
                  src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e"
                  alt="User"
                  className="w-10 h-10 rounded-full mr-4"
                />
                <div>
                  <p className="font-semibold">User Activity {item}</p>
                  <p className="text-gray-500">2 hours ago</p>
                </div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </div>
  );
}

Blog Post Layout with Custom Spacing

This example showcases a blog post layout with custom spacing for content elements.

This is a live editor. Play around with it!
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

// App.js
export default function BlogPost() {
  return (
    <article className="max-w-4xl mx-auto px-6 py-article-spacing">
      <header className="mb-section-spacing">
        <h1 className="text-4xl font-bold mb-6">
          The Future of Web Development
        </h1>
        <div className="flex items-center space-x-4">
          <img
            src="https://images.unsplash.com/photo-1494790108377-be9c29b29330"
            alt="Author"
            className="w-12 h-12 rounded-full"
          />
          <div>
            <p className="font-semibold">Sarah Johnson</p>
            <p className="text-gray-600">Posted on May 15, 2023</p>
          </div>
        </div>
      </header>

      <img
        src="https://images.unsplash.com/photo-1498050108023-c5249f4df085"
        alt="Featured"
        className="w-full h-96 object-cover rounded-xl mb-section-spacing"
      />

      <div className="prose space-y-content-gap">
        <p className="text-lg leading-relaxed">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod
          tempor incididunt ut labore et dolore magna aliqua.
        </p>

        <blockquote className="border-l-4 border-blue-500 pl-6 italic">
          The web development landscape is constantly evolving, bringing new
          challenges and opportunities for developers.
        </blockquote>

        <h2 className="text-2xl font-bold mt-section-spacing">
          The Rise of Modern Frameworks
        </h2>

        <p className="text-lg leading-relaxed">
          Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
          nisi ut aliquip ex ea commodo consequat.
        </p>
      </div>
    </article>
  );
}

Best Practices

Maintain Design Consistency

When using space-*, it is crucial to establish a spacing scale that aligns with the overall design system.

Define a global spacing strategy to prevent misalignment and visual clutter. For example, if buttons, cards, and headings follow a specific spacing pattern, they should be consistently applied across all sections to avoid an inconsistent look.

Another technique for maintaining uniformity is creating reusable components with predefined spacing values. By encapsulating spacing within reusable components, you can ensure that spacing decisions remain consistent across different parts of the project.

Balance with Other Layout Properties

When using space-* within a flex container, pair it with justify-* utilities to help maintain the intended structure while avoiding excessive spacing.

Additionally, spacing should be adjusted based on content hierarchy. Primary elements such as headings and sections often require more spacing than secondary elements like buttons or captions. Use higher space values for major sections and lower space for smaller elements to ensure a logical structure while keeping the interface visually appealing.

Accessibility Considerations

Enhance Readability and Navigability

Proper spacing significantly impacts readability and content flow. Using space-* to provide sufficient separation between lines of text, buttons, or form fields ensures users can process information without feeling overwhelmed. When spacing is too tight, content becomes difficult to scan, whereas excessive spacing disrupts the natural reading rhythm.

Navigation menus also benefit from well-structured spacing. Applying space-y-4 to vertical menus or space-x-6 to horizontal ones improves clarity, making it easier for users to distinguish between options. When working with dense UI layouts, moderate spacing helps prevent cognitive overload while maintaining a logical structure.

Focus on High Contrast

Spacing plays a role in enhancing contrast, particularly when dealing with background and foreground elements. Proper separation between text blocks and interactive elements ensures they remain distinguishable, improving accessibility for visually impaired users. For example, using space-y-5 between form inputs prevents crowding, allowing each field to stand out clearly.

High contrast is especially important for interactive elements such as buttons or links. Sufficient spacing ensures they do not visually merge, reducing the risk of misclicks. When paired with appropriate text colors and backgrounds, well-implemented spacing improves usability for users with low vision or color blindness.