Trình tạo Flexbox CSS

Tạo CSS
Tiếp theo

Flexbox là lựa chọn hàng đầu cho layout một chiều: hàng card, navbar, hero căn giữa, form. Mô hình container-và-item mạnh mẽ, nhưng các thuộc tính của nó tương tác theo những cách khó thấy. Trình tạo này loại bỏ sự phỏng đoán khi cấu hình container: chọn flex-direction, justify-content, align-items, flex-wrapgap, bạn nhận được một quy tắc CSS gọn gàng để sao chép thẳng vào stylesheet.

Cách tạo CSS

  1. 1

    Chọn hướng

    Chọn row, column hoặc các biến thể đảo ngược. Thao tác này đặt flex-direction, trục mà các item chạy dọc theo.

  2. 2

    Đặt justify-content

    Chọn cách item phân bố dọc theo trục chính: đầu, giữa, space-between, space-around hoặc cuối.

  3. 3

    Đặt align-items

    Chọn cách item căn chỉnh trên trục phụ: stretch, đầu, giữa hoặc cuối.

  4. 4

    Đặt gap và wrap

    Thêm khoảng cách giữa các item theo pixel và quyết định xem item có xuống dòng mới hay không.

  5. 5

    Sao chép CSS

    Trình tạo xuất ra quy tắc container với đầy đủ thuộc tính, sẵn sàng dán vào stylesheet của bạn.

Thuộc tính của container

Thuộc tính Giá trị Hiệu ứng
flex-direction row / column / row-reverse / column-reverse Trục chính
flex-wrap nowrap / wrap / wrap-reverse Item có wrap hay không
justify-content flex-start / center / flex-end / space-between / space-around / space-evenly Phân bố trục chính
align-items flex-start / center / flex-end / baseline / stretch Căn trục phụ cho mỗi dòng
align-content cùng giá trị + space-between / space-around Khi wrap, phân bố trục phụ của các dòng
gap (row-gap, column-gap) độ dài Khoảng cách giữa các item

Thuộc tính của item

Thuộc tính Giá trị Hiệu ứng
flex-grow 0+ (không đơn vị) Phần không gian thừa được hấp thụ
flex-shrink 0+ (không đơn vị) Phần khi tràn để co lại
flex-basis độ dài hoặc auto Kích thước khởi điểm trước khi grow/shrink
flex shorthand (1 1 auto, v.v.) Cả ba cùng lúc
align-self auto / flex-start / center / flex-end / baseline / stretch Ghi đè align-items cho một item
order số nguyên Sắp xếp lại thị giác không đổi DOM

Mẹo flex: 1

flex: 1 là shorthand cho flex: 1 1 0%. Nó làm cho item:

  • Grow để lấp đầy không gian (grow: 1)
  • Shrink nếu cần (shrink: 1)
  • Bắt đầu từ kích thước không (basis: 0%)

Cho các cột bằng nhau, flex: 1 trên mỗi item cho chia đều hoàn hảo. Cho sidebar không được co dưới content, dùng flex: 0 0 240px (không grow, không shrink, basis 240px).

Các mẫu phổ biến

Hero căn giữa

.hero {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

Navbar với logo trái, link phải

.nav {
  display: flex;
  align-items: center;
  gap: 2rem;
}
.nav-links {
  margin-left: auto;  /* đẩy sang phải */
  display: flex;
  gap: 1rem;
}

Hàng card responsive

.card-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}
.card {
  flex: 1 1 260px;  /* grow/shrink, tối thiểu 260px trước khi wrap */
}

Trường form có nút (input linh hoạt, nút cố định)

.field {
  display: flex;
  gap: 0.5rem;
}
.field input {
  flex: 1;
}
.field button {
  flex: 0 0 auto;
}

Flexbox so với Grid

  • Flexbox: một chiều (row HOẶC column). Tốt nhất khi kích thước item theo nội dung hoặc khi bạn phân bố không gian theo một dòng đơn.
  • Grid: hai chiều (rows VÀ columns với track rõ ràng). Tốt nhất khi layout có cấu trúc hàng và cột đồng thời.

Cho navbar hoặc một chồng card: Flexbox. Cho lưới product-card với nhiều hàng card căn chỉnh: CSS Grid. Nhiều trang thực dùng cả hai, layout trang bằng Grid với Flexbox bên trong component.

Các bẫy phổ biến

  • Item không lấp đầy container: mặc định align-items: stretch chỉ áp dụng nếu item không có chiều cao cố định. Với chiều cao rõ ràng, chúng giữ nguyên kích thước đó.
  • gap không hoạt động: kiểm tra hỗ trợ trình duyệt. Flex gap đến muộn; Safari <14.1 không hỗ trợ. Giờ phổ quát từ 2024+.
  • Con của flex column bị thu lại: flex column mặc định có align-items: stretch, kéo item đến chiều rộng container. Nếu một con đặt width, nó tách ra.
  • order chỉ là thị giác: screen reader và điều hướng bàn phím theo thứ tự DOM. Đừng dùng order để làm nội dung có nghĩa; dùng nó chỉ cho hoàn thiện thị giác.

Câu hỏi thường gặp

Grid cho layout trang hai chiều (hàng và cột cùng nhau). Flexbox cho phân bố một chiều (navbar, hàng nút, chồng). Bên trong một ô Grid, dùng Flexbox cho layout nội bộ. Hầu hết UI phức tạp dùng cả hai.

Vì mặc định flex-shrink là 1 nhưng mặc định min-widthauto, bằng chiều rộng nội dung. Đặt min-width: 0 (hoặc min-inline-size: 0) trên item để cho phép co dưới kích thước nội tại.

display: flex; justify-content: center; align-items: center; trên container. Phủ phần lớn các trường hợp “căn giữa cái này” chỉ với hai dòng.

Có, trên mọi trình duyệt hiện đại. Safari đến muộn (thêm ở 14.1, tháng 4/2021); hôm nay mọi trình duyệt chính hỗ trợ. Thay khoảng cách dựa trên margin bằng gap bất cứ khi nào có thể, đơn giản hơn nhiều.

Công cụ liên quan