CSS Layout
3 cách dựng layout chính: Flexbox, Grid, Position.
Flexbox — 1 chiều
Phù hợp cho navbar, list item, card row, center content.
css.row { display: flex; align-items: center; /* trục chéo */ justify-content: space-between; /* trục chính */ gap: 1rem; flex-wrap: wrap; } .item-grow { flex: 1; } /* chiếm phần còn lại */ .item-fixed { flex: 0 0 200px; } /* cố định 200px */
Grid — 2 chiều
Phù hợp cho dashboard, gallery, page layout phức tạp.
css/* Auto responsive grid — không cần media query */ .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1rem; } /* Holy grail */ .app { display: grid; grid-template: "header header" auto "side main" 1fr "footer footer" auto / 240px 1fr; min-height: 100dvh; } .header { grid-area: header; } .side { grid-area: side; } .main { grid-area: main; } .footer { grid-area: footer; }
Position
css/* Tooltip / dropdown */ .parent { position: relative; } .tooltip { position: absolute; inset-inline-start: 0; top: calc(100% + 4px); } /* Sticky header */ .header { position: sticky; top: 0; z-index: 10; } /* Modal overlay */ .overlay { position: fixed; inset: 0; background: rgba(0,0,0,.5); }
Khi nào dùng cái nào?
Flex → 1 trục, content-driven (navbar, button group, list)
Grid → 2 trục, layout-driven (dashboard, gallery, full-page)
Position → element nổi trên flow (modal, tooltip, badge, sticky)