# Responsive Design
Building interfaces that adapt to any screen size is a core requirement for modern applications. Wind makes this process declarative using a mobile-first, utility-based approach.
- [Mobile-First Approach](#mobile-first-approach)
- [Breakpoint Reference](#breakpoint-reference)
- [Platform Prefixes](#platform-prefixes)
- [Combining Modifiers](#combining-modifiers)
- [Customizing Breakpoints](#customizing-breakpoints)
```dart
// Stacked on mobile (default), horizontal on medium screens and up
WDiv(
className: 'flex flex-col md:flex-row gap-4 p-4 bg-gray-100 md:bg-blue-50',
children: [
WDiv(className: 'w-full md:w-1/2 h-24 bg-blue-500'),
WDiv(className: 'w-full md:w-1/2 h-24 bg-red-500'),
],
)
```
## Mobile-First Approach
Wind follows a mobile-first philosophy. This means that utility classes without a prefix apply to all screen sizes by default. Responsive modifiers like `md:` or `lg:` only apply when the screen width meets or exceeds the specified breakpoint.
Consider this example:
```dart
// Mobile: blue background, Desktop: green background
WDiv(className: 'bg-blue-500 lg:bg-green-500')
```
In this case, the `bg-blue-500` class is the base style. The `lg:bg-green-500` class only activates when the screen width is at least 1024px, overriding the base background color.
## Breakpoint Reference
Wind includes five default breakpoints inspired by the standard Tailwind CSS scale.
| Prefix | Value | Description |
|:-------|:------|:------------|
| `sm` | 640px | Large phones / Small tablets |
| `md` | 768px | Tablets (Portrait) |
| `lg` | 1024px | Laptops / Tablets (Landscape) |
| `xl` | 1280px | Desktops |
| `2xl` | 1536px | Large Desktops |
> [!NOTE]
> These values represent the **minimum width** required for the modifier to take effect.
## Platform Prefixes
In addition to screen sizes, Wind supports platform-specific modifiers. These allow you to apply styles based on the operating system or environment.
| Prefix | Applies To |
|:-------|:-----------|
| `ios:` | iOS devices |
| `android:` | Android devices |
| `macos:` | macOS |
| `web:` | Web browsers |
| `mobile:` | Both iOS and Android |
| `windows:` | Windows |
| `linux:` | Linux |
Example usage:
```dart
WDiv(
className: 'p-4 ios:p-6 android:p-2 web:p-8',
child: WText('Platform-specific padding'),
)
```
## Combining Modifiers
You can chain multiple modifiers to create highly specific styling rules. For example, you might want a hover effect that only applies in dark mode on large screens.
```dart
WButton(
className: 'bg-blue-500 lg:dark:hover:bg-indigo-600',
child: WText('Submit'),
)
```
> [!WARNING]
> Modifier order is strict. Breakpoint modifiers must always come first in the chain (e.g., `lg:dark:hover:`).
## Customizing Breakpoints
If the default breakpoints do not match your project requirements, you can define custom screens in `WindThemeData`.
```dart
WindTheme(
data: WindThemeData(
screens: {
'tablet': 600,
'laptop': 900,
'desktop': 1200,
},
),
child: MyApp(),
)
```
Once defined, these custom keys can be used as prefixes: `tablet:p-4`, `laptop:flex-row`, etc.
## Related Documentation
- [Utility-First Fundamentals](./utility-first.md)
- [Theming](./theming.md)
- [Dark Mode](./dark-mode.md)
- [State Management](./state-management.md)