D
Widget TreeIntermediate30 XP3 min read

How does Flutter's box model compare to CSS box model?

TL;DR: Flutter doesn't have a traditional CSS box model. Padding is an explicit widget. 'Margin' is achieved with Padding on a parent or Container margin. There's no box-sizing property — all sizing is through constraints.

Full Answer

Web developers moving to Flutter often look for CSS box-model equivalents. Flutter's layout is fundamentally different — everything is widgets and constraints.

AspectCSSFlutter
Paddingpadding property on elementPadding widget wrapping child
Marginmargin propertyPadding on parent, or Container(margin:)
Borderborder propertyContainer(decoration: BoxDecoration(border:))
Width/Heightwidth/height CSS propertiesSizedBox, Container, ConstrainedBox
Box sizingbox-sizing: border-box/content-boxNot applicable — all via constraints
🎯

Container is a convenience widget that combines Padding, ColoredBox, DecoratedBox, SizedBox, ConstrainedBox, and Transform in one. Prefer using the individual widgets for clarity and performance.

Code Examples

dartCSS box-model equivalent in Flutter
Output
A 200px wide white box with 16px inner padding, 8px outer margin, and 1px black border

Common Mistakes

  • Using Container for every wrapper — prefer Padding, ColoredBox, or SizedBox for single-purpose styling
  • Expecting margin to collapse like in CSS — Flutter margins don't collapse

Interview Tip

💡

This shows cross-platform awareness. Mentioning that Container is a multi-purpose convenience widget shows you understand its internals.

#box-model#CSS#padding#margin#constraints