Cách căn giữa phần tử
- Việc đặt một phần tử vào chính giữa bên trong phần tử cha từ lâu đã là một vấn đề khá khó xử lý.
- Khi CSS phát triển, nhiều giải pháp khác nhau đã xuất hiện, và hiện nay có rất nhiều lựa chọn.
- Hướng dẫn này giúp hiểu các đánh đổi giữa nhiều cách tiếp cận khác nhau, đồng thời cung cấp chiến lược để xử lý việc căn giữa trong mọi tình huống.
Căn giữa bằng margin tự động
- Khi muốn đặt phần tử vào giữa theo chiều ngang, có thể dùng margin với giá trị
auto.
- Cần giới hạn chiều rộng của phần tử, và
fit-content sẽ điều chỉnh kích thước phần tử theo nội dung.
- Dùng thuộc tính
margin-inline sẽ cho phép đặt đồng thời margin-left và margin-right thành auto.
Căn giữa bằng Flexbox
- Flexbox cung cấp nhiều mức độ kiểm soát khi phân bổ một nhóm item dọc theo trục chính.
- Có thể căn giữa một phần tử đơn lẻ theo cả chiều ngang lẫn chiều dọc, và việc căn giữa vẫn được giữ nguyên ngay cả khi phần tử con không vừa với container.
- Có thể dùng thuộc tính
flex-direction để điều khiển hướng xếp chồng của nhiều phần tử con.
Căn giữa trong viewport
- Có những trường hợp cần đặt phần tử vào chính giữa viewport thay vì bên trong container cha.
- Có thể dùng
position: fixed và inset: 0px để cố định phần tử vào viewport, sau đó dùng margin: auto để căn giữa theo cả chiều ngang và chiều dọc.
Căn giữa phần tử có kích thước chưa biết
- Khi không biết rõ kích thước của phần tử, có thể dùng
fit-content để thu nhỏ phần tử theo nội dung.
Căn giữa bằng CSS Grid
- Cách ngắn gọn nhất để căn giữa phần tử theo cả chiều ngang và chiều dọc bằng CSS Grid là dùng thuộc tính
place-content: center.
Điểm khác biệt với Flexbox
- CSS Grid dùng một thuật toán layout khác, và đôi khi sự phức tạp bổ sung này có thể trở thành vấn đề.
- Flexbox tính toán phần trăm dựa trên phần tử cha, trong khi CSS Grid tính theo ô lưới.
Căn giữa một chồng phần tử
- Có thể dùng CSS Grid để gán nhiều phần tử vào cùng một ô, khiến chúng xếp chồng từ sau ra trước.
Căn giữa văn bản
- Văn bản được CSS xử lý theo cách riêng, và có thể dùng thuộc tính
text-align để đặt văn bản vào giữa.
Tương lai của việc căn giữa
- Thuộc tính
align-content cũng đang được triển khai cho Flow layout, giúp kiểm soát việc căn chỉnh nội dung theo hướng block.
Vượt ra ngoài các mẫu có sẵn
- Nếu hiểu sâu về CSS, bạn có thể dùng trực giác để giải quyết vấn đề thay vì chỉ dựa vào việc ghi nhớ.
Quyết định nên dùng cách nào
- Nếu muốn căn giữa một phần tử đơn lẻ theo chiều ngang, có thể dùng chiến lược margin tự động trong Flow layout.
- Nếu muốn căn giữa UI nổi như modal hoặc banner, có thể dùng Positioned layout kết hợp với margin tự động.
- Nếu muốn căn giữa một chồng phần tử, có thể dùng CSS Grid.
- Nếu muốn căn giữa văn bản, có thể dùng
text-align, và nó cũng có thể kết hợp với các cách khác.
- Trong hầu hết các tình huống còn lại, có thể dùng Flexbox. Đây là cách linh hoạt nhất, cho phép căn giữa một hoặc nhiều phần tử con theo chiều ngang/dọc.
Ý kiến của GN⁺
- Điều quan trọng nhất trong bài viết này là giúp người đọc hiểu rõ các cách căn giữa khác nhau trong CSS.
- Nhờ sự phát triển của CSS, những tác vụ căn giữa từng phức tạp trước đây nay đã trở nên đơn giản hơn rất nhiều, điều này rất hữu ích với các nhà phát triển web.
- Hiểu và tận dụng các công nghệ CSS hiện đại như Flexbox và CSS Grid đã trở thành kỹ năng thiết yếu trong thiết kế web và xây dựng layout.
3 bình luận
Nghĩ lại thì tự dưng mình cũng thấy khó chịu vì ngay cả bài viết trên GeekNews cũng không được căn giữa, hic haha
Tôi hay dùng
place-items: center;, nhưng hóa ra còn nhiều cách khác nữa.Ý kiến trên Hacker News
Tóm tắt bình luận thứ nhất:
<table>, nhưng trong CSS điều này lại tạo cảm giác khó khăn hơn.Tóm tắt bình luận thứ hai:
Tóm tắt bình luận thứ ba:
displayvàpositionlà nền tảng để học về positioning.Tóm tắt bình luận thứ tư:
Tóm tắt bình luận thứ năm:
Tóm tắt bình luận thứ sáu:
Tóm tắt bình luận thứ bảy:
Tóm tắt bình luận thứ tám:
Tóm tắt bình luận thứ chín:
position: absolute,left: 50%,transform: translateX(-50%).Tóm tắt bình luận thứ mười: