# Spacing
Utilities for controlling the padding and margin of elements.
- [Basic Usage](#basic-usage)
- [Quick Reference](#quick-reference)
- [Variants](#variants)
- [Responsive Design](#responsive-design)
- [Dark Mode](#dark-mode)
- [Arbitrary Values](#arbitrary-values)
- [Customizing Theme](#customizing-theme)
- [Related Documentation](#related-documentation)
```dart
// Adds 16px padding inside, 16px margin outside
WDiv(className: 'p-4 m-4 bg-white')
```
## Basic Usage
Control the spacing of an element using the `p-{size}` (padding) and `m-{size}` (margin) utilities.
### Padding
Padding adds space **inside** the element's boundary.
```dart
// Add padding to all sides
WDiv(className: 'p-6 bg-blue-100', child: WText('Padding'))
```
### Margin
Margin adds space **outside** the element's boundary.
```dart
// Add margin to all sides
WDiv(className: 'm-4 bg-red-100', child: WText('Margin'))
```
## Quick Reference
The default spacing scale is based on a **4px** unit (`baseSpacingUnit: 4.0`).
| Class | Value (Default) | Description |
|:------|:----------------|:------------|
| `p-0` / `m-0` | 0px | No spacing |
| `p-1` / `m-1` | 4px | Tiny spacing |
| `p-2` / `m-2` | 8px | Small spacing |
| `p-4` / `m-4` | 16px | Normal spacing |
| `p-8` / `m-8` | 32px | Large spacing |
| `p-16` / `m-16` | 64px | Extra large spacing |
| `px-{n}` / `mx-{n}` | - | Horizontal (Left + Right) |
| `py-{n}` / `my-{n}` | - | Vertical (Top + Bottom) |
| `pt-{n}` / `mt-{n}` | - | Top only |
| `pr-{n}` / `mr-{n}` | - | Right only |
| `pb-{n}` / `mb-{n}` | - | Bottom only |
| `pl-{n}` / `ml-{n}` | - | Left only |
## Variants
### Directional Spacing
Target specific sides or axes using direction prefixes.
```dart
// Horizontal padding (Left + Right)
WDiv(className: 'px-4 bg-green-100')
// Vertical margin (Top + Bottom)
WDiv(className: 'my-6 bg-yellow-100')
// Top padding only
WDiv(className: 'pt-8 bg-purple-100')
```
### Horizontal Centering
Use `mx-auto` to center a container horizontally. This sets the left and right margins to align the element within its parent.
> [!NOTE]
> `mx-auto` only works when the element has a defined width less than its parent. Explicit `mx-{value}` classes (like `mx-0`) will override `mx-auto`.
```dart
WDiv(
className: 'mx-auto w-32 bg-blue-500',
child: WText('Centered'),
)
```
## Responsive Design
Apply different spacing at different breakpoints using the standard `sm:`, `md:`, `lg:`, `xl:`, and `2xl:` prefixes.
```dart
// p-4 on mobile, p-8 on medium screens, p-12 on large screens
WDiv(className: 'p-4 md:p-8 lg:p-12')
```
## Dark Mode
Use the `dark:` prefix to apply different spacing in dark mode.
```dart
WDiv(className: 'p-4 dark:p-6')
```
## Arbitrary Values
If the built-in scale doesn't meet your needs, use bracket notation to apply exact pixel values.
> [!WARNING]
> Wind parsers for padding and margin currently support **pixels** (`[10px]`, `[10]`) but do NOT support percentages (`[10%]`).
```dart
// Exact 13px padding
WDiv(className: 'p-[13px]')
// Exact 50px top margin
WDiv(className: 'mt-[50px]')
```
## Customizing Theme
To extend or override the default spacing scale, modify the `WindThemeData` in your app root.
The `baseSpacingUnit` controls the multiplier for all spacing utilities (`p-`, `m-`, `gap-`, `w-`, `h-`).
```dart
WindThemeData(
baseSpacingUnit: 8.0, // Sets 'p-1' to 8px, 'p-4' to 32px
)
```
## Related Documentation
- [Sizing](./sizing.md)
- [Flexbox](./flexbox.md) (Gap utilities)
- [Grid](./grid.md) (Gap utilities)