Makepad Layout
PassedThis skill provides comprehensive documentation for the Makepad UI framework's layout system. It helps developers understand and write layout code using Makepad's turtle-based layout model, including sizing (Fit/Fill/Fixed), flow directions (Down/Right/Overlay), alignment, spacing, and common layout patterns like sidebars and headers.
Skill Content
4,393 charactersMakepad Layout Skill
Version: makepad-widgets (dev branch) | Last Updated: 2026-01-19
Check for updates: https://crates.io/crates/makepad-widgets
You are an expert at Makepad layout system. Help users by:
- Writing code: Generate layout code following the patterns below
- Answering questions: Explain layout concepts, sizing, flow directions
Documentation
Refer to the local files for detailed documentation:
./references/layout-system.md- Complete layout reference./references/core-types.md- Walk, Align, Margin, Padding types
IMPORTANT: Documentation Completeness Check
Before answering questions, Claude MUST:
- Read the relevant reference file(s) listed above
- If file read fails or file is empty:
- Inform user: "本地文档不完整,建议运行
/sync-crate-skills makepad --force更新文档" - Still answer based on SKILL.md patterns + built-in knowledge
- Inform user: "本地文档不完整,建议运行
- If reference file exists, incorporate its content into the answer
Key Patterns
1. Basic Layout Container
<View> {
width: Fill
height: Fill
flow: Down
padding: 16.0
spacing: 8.0
<Label> { text: "Item 1" }
<Label> { text: "Item 2" }
}
2. Centering Content
<View> {
width: Fill
height: Fill
align: { x: 0.5, y: 0.5 }
<Label> { text: "Centered" }
}
3. Horizontal Row Layout
<View> {
width: Fill
height: Fit
flow: Right
spacing: 10.0
align: { y: 0.5 } // Vertically center items
<Button> { text: "Left" }
<View> { width: Fill } // Spacer
<Button> { text: "Right" }
}
4. Fixed + Flexible Layout
<View> {
width: Fill
height: Fill
flow: Down
// Fixed header
<View> {
width: Fill
height: 60.0
}
// Flexible content
<View> {
width: Fill
height: Fill // Takes remaining space
}
}
Layout Properties Reference
| Property | Type | Description |
|----------|------|-------------|
| width | Size | Width of element |
| height | Size | Height of element |
| padding | Padding | Inner spacing |
| margin | Margin | Outer spacing |
| flow | Flow | Child layout direction |
| spacing | f64 | Gap between children |
| align | Align | Child alignment |
| clip_x | bool | Clip horizontal overflow |
| clip_y | bool | Clip vertical overflow |
Size Values
| Value | Description |
|-------|-------------|
| Fit | Size to fit content |
| Fill | Fill available space |
| 100.0 | Fixed size in pixels |
| Fixed(100.0) | Explicit fixed size |
Flow Directions
| Value | Description |
|-------|-------------|
| Down | Top to bottom (column) |
| Right | Left to right (row) |
| Overlay | Stack on top |
Align Values
| Value | Position |
|-------|----------|
| { x: 0.0, y: 0.0 } | Top-left |
| { x: 0.5, y: 0.0 } | Top-center |
| { x: 1.0, y: 0.0 } | Top-right |
| { x: 0.0, y: 0.5 } | Middle-left |
| { x: 0.5, y: 0.5 } | Center |
| { x: 1.0, y: 0.5 } | Middle-right |
| { x: 0.0, y: 1.0 } | Bottom-left |
| { x: 0.5, y: 1.0 } | Bottom-center |
| { x: 1.0, y: 1.0 } | Bottom-right |
Box Model
+---------------------------+
| margin |
| +---------------------+ |
| | padding | |
| | +---------------+ | |
| | | content | | |
| | +---------------+ | |
| +---------------------+ |
+---------------------------+
When Writing Code
- Use
Fillfor flexible containers,Fitfor content-sized elements - Set
flow: Downfor vertical,flow: Rightfor horizontal - Use empty
<View> { width: Fill }as spacer in row layouts - Always set explicit dimensions on fixed-size elements
- Use
alignto position children within container
When Answering Questions
- Makepad uses a "turtle" layout model - elements laid out sequentially
Filltakes all available space,Fitshrinks to content- Unlike CSS flexbox, there's no flex-grow/shrink - use Fill/Fit
- Alignment applies to children, not the element itself