Giải thích chi tiết (tại sao các cột bằng nhau)
1) Cấu trúc tổng thể
-
Mỗi cột là một
.col-lg-6 .col-md-6(hai cột trên một hàng). -
Bên trong mỗi cột có một “card” thực chất là
<div class="featured-card ...">.
2) Các class mấu chốt để bằng chiều cao
-
d-flexở phần tử cột (<div class="col-lg-6 ... d-flex">):
Biến cột thành một flex container theo chiều ngang (mặc định). Nhờ vậy, phần tử con trực tiếp của cột (tức.featured-card) có thể “giãn” ra theo chiều cao của cột. -
flex-fillở.featured-card:
Khi cha (cột) làd-flex,flex-fillkhiến.featured-cardchiếm toàn bộ không gian còn lại theo cả chiều rộng/chiều cao do flex cung cấp.
Kết quả: tất cả card trong các cột sẽ cao bằng nhau, căn theo cột có nội dung cao nhất. -
d-flex flex-columnở.featured-card:
Chuyển card thành flex container theo trục dọc. Đây là tiền đề để dùngflex-grow-1cho phần nội dung, giúp:-
Nội dung có thể “co giãn” lấp đầy khoảng trống.
-
Kéo phần “Đọc thêm” xuống cuối card để các nút thẳng hàng.
-
-
flex-grow-1ở khối nội dung:
Phần nội dung sẽ giãn nở lấp đầy chiều cao còn lại bên trong card.
Nhờ thế, bất kể nội dung ngắn/dài khác nhau, block “Đọc thêm” luôn dạt xuống dưới cùng, tạo cảm giác cân đối & chuyên nghiệp.
3) Các class phụ trợ khác
-
.fs-14: Bootstrap không có sẵn cỡ chữ 14px (nhỏ nhấtfs-6~ 16px), nên mình thêm class tùy biến.fs-14 { font-size:14px }để link “Đọc thêm” đúng cỡ bạn dùng. -
.mb-24: Bootstrap spacing theo bậc (mb-3,mb-4…), không cómb-24pxnên mình thêm nhanh để giữ nguyên ý đồ của bạn (có thể thay bằngmb-3/mb-4tùy design). -
.blog-post-thumb img { width:100% }: Đảm bảo ảnh full bề ngang card, tránh “co cụm” gây lệch layout.
4) Khi nào cần chỉnh khác?
-
Nếu bạn không muốn đặt
d-flexở từng cột, một lựa chọn khác là đặtalign-items-stretchở.rowrồi đảm bảo phần tử bên trong cột cóh-100:Cả hai cách đều đúng; cách trong snippet của bạn (đặt
d-flexở cột +flex-fillở card) rất thực dụng và dễ hiểu.
Nhận xét
Đăng nhận xét