# WSpacer
The `WSpacer` is a lightweight widget designed specifically for adding consistent gaps between elements. Unlike `WDiv`, which supports a full range of decorations and layout properties, `WSpacer` renders as a simple `SizedBox`, making it highly efficient for layouts where you only need spacing.
- [Basic Usage](#basic-usage)
- [Constructor](#constructor)
- [Props](#props)
- [Responsive Spacing](#responsive-spacing)
- [Why WSpacer?](#why-wspacer)
- [All Supported Classes](#all-supported-classes)
- [Customizing Theme](#customizing-theme)
- [Related Documentation](#related-documentation)
```dart
WDiv(
className: 'flex flex-col',
children: [
WText('Label', className: 'font-bold'),
WSpacer(className: 'h-2'), // 8px vertical gap
WInput(placeholder: 'Enter text...'),
],
)
```
## Basic Usage
The `WSpacer` widget extracts width and height values from your utility classes and applies them to a `SizedBox`. It supports the standard Wind spacing scale (based on a 4px unit by default).
### Vertical Spacing
Use the `h-{n}` classes to add vertical gaps in columns:
```dart
WSpacer(className: 'h-4') // 16px height
```
### Horizontal Spacing
Use the `w-{n}` classes to add horizontal gaps in rows:
```dart
WSpacer(className: 'w-2') // 8px width
```
## Constructor
```dart
const WSpacer({
Key? key,
String? className,
})
```
## Props
| Prop | Type | Default | Description |
|:-----|:-----|:--------|:------------|
| `className` | `String?` | `null` | Wind utility classes for sizing (h-*, w-*). |
> [!NOTE]
> Non-sizing classes (like `bg-red-500` or `p-4`) are parsed but ignored by `WSpacer` as it renders a `SizedBox` which does not support decoration or padding.
## Responsive Spacing
You can adjust spacing based on screen size using responsive prefixes. This is particularly useful for increasing margins on tablet or desktop layouts.
```dart
WSpacer(className: 'h-4 md:h-8')
```
## Why WSpacer?
While you could use `WDiv` with padding or margin, `WSpacer` is preferred for explicit gaps for several reasons:
1. **Performance:** It bypasses complex composition and renders as a single `SizedBox`.
2. **Semantics:** It clearly communicates "this widget exists only for spacing" to other developers.
3. **Convenience:** It replaces the verbose `SizedBox(height: 16)` with the more maintainable `WSpacer(className: 'h-4')`.
## All Supported Classes
| Category | Classes | Description |
|:---------|:--------|:------------|
| Sizing | `h-{n}`, `w-{n}` | Standard scale (h-1, h-2, etc.) |
| Arbitrary | `h-[15px]`, `w-[2px]` | Custom pixel values |
| Responsive | `md:h-*`, `lg:w-*` | Breakpoint-specific spacing |
## Customizing Theme
The pixel values for `h-{n}` and `w-{n}` are derived from the `baseSpacingUnit` in your theme.
```dart
WindThemeData(
baseSpacingUnit: 4.0, // Default: h-1 = 4px
)
```
## Related Documentation
- [WDiv](./w-div.md)
- [Sizing Utilities](../layout/sizing.md)
- [Spacing Utilities](../layout/spacing.md)
- [Responsive Design](../core-concepts/responsive-design.md)