Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Mọi phần tử trên trang web đều là một chiếc hộp hình chữ nhật. Hiểu cách trình duyệt tính kích thước chiếc hộp đó giải quyết được rất nhiều câu hỏi kiểu "sao phần tử này rộng hơn tôi đặt?" hay "sao có khoảng trống lạ ở đây?".
Từ trong ra ngoài, một phần tử gồm:
Cách dễ nhớ: padding là "khoảng thở" bên trong hộp, margin là khoảng cách giữa các hộp.
Các thuộc tính này nhận một đến bốn giá trị:
.card {
padding: 16px; /* cả bốn phía */
padding: 8px 16px; /* trên-dưới, trái-phải */
padding: 8px 12px 16px 4px; /* trên, phải, dưới, trái */
border: 1px solid #ccc;
margin: 0 auto; /* căn giữa ngang nếu có width */
}Nhớ thứ tự bốn giá trị là trên, phải, dưới, trái, tức theo chiều kim đồng hồ bắt đầu từ phía trên.
Mặc định, width chỉ tính vùng content. Nghĩa là nếu bạn đặt width: 300px rồi thêm padding: 20px và border: 2px, tổng chiều rộng thật là 300 + 40 + 4 = 344 pixel. Chuyện này làm bố cục nhiều cột hay bị tràn.
Giải pháp là box-sizing: border-box, khi đó width bao gồm cả padding và border, và nội dung tự co lại. Hầu hết dự án đều đặt quy tắc này cho mọi phần tử:
*,
*::before,
*::after {
box-sizing: border-box;
}Với dòng này, width: 300px nghĩa là cái hộp chiếm đúng 300 pixel, và việc tính toán bố cục trở nên trực quan hơn nhiều.
Margin theo chiều dọc của hai khối liền nhau có thể gộp thành một, lấy giá trị lớn hơn thay vì cộng dồn. Ví dụ đoạn văn trên có margin-bottom: 20px và đoạn dưới có margin-top: 30px, khoảng cách thật là 30 pixel chứ không phải 50.
Điều này có thể gây bất ngờ, nhất là khi margin của con "chui" ra ngoài cha. Margin collapse không xảy ra với flex hoặc grid item, nên nhiều người chọn các cách bố cục này, hoặc dùng thuộc tính gap để tránh rắc rối.
Nếu bạn đặt width cho một span mà không thấy tác dụng, nguyên nhân thường nằm ở đây.
Trong trình duyệt, nhấp phải vào phần tử rồi chọn Inspect. Ở tab Computed (hoặc phần Layout) bạn sẽ thấy sơ đồ box model với từng con số của margin, border, padding và content. Di chuột lên phần tử, vùng margin hiện màu cam, padding màu xanh lá. Đây là cách nhanh nhất để biết khoảng trống kỳ lạ xuất phát từ đâu.
Hãy áp dụng những gì vừa học vào một thẻ thông tin đơn giản:
.card {
box-sizing: border-box;
width: 320px;
padding: 20px;
margin: 16px auto;
border: 1px solid #e2e8f0;
border-radius: 12px;
}
.card h3 {
margin: 0 0 8px;
}
.card p {
margin: 0;
}Nhờ border-box, thẻ này luôn rộng đúng 320 pixel bất kể padding hay border. Việc đặt margin: 0 cho tiêu đề và đoạn văn bên trong giúp bạn kiểm soát khoảng cách bằng padding của thẻ cha, thay vì phụ thuộc vào margin mặc định của trình duyệt vốn khác nhau giữa các thẻ.
Ngoài ra, bạn nên làm quen với đơn vị tương đối như rem và % cho padding và margin để giao diện co giãn tốt theo cỡ chữ và kích thước màn hình, thay vì chỉ dùng pixel cố định.
Hãy nhớ ba điều: các lớp content, padding, border, margin; luôn dùng box-sizing: border-box; và biết rằng margin dọc có thể gộp lại. Chỉ cần vững ba ý này, bạn đã tránh được phần lớn lỗi bố cục của người mới.
Để luyện tập box model qua các bài thực hành xây giao diện thật, bạn có thể tham khảo khóa học web trên codebem.com.
Nguyễn Đình Cường
0 comment