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-fill
khiến.featured-card
chiế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-1
cho 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-24px
nên mình thêm nhanh để giữ nguyên ý đồ của bạn (có thể thay bằngmb-3
/mb-4
tù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
ở.row
rồ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