CSS

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)

csslayout.io — Pattern gallery