Họ đang đo gì
Bạn có hiểu vì sao layout “lệch một chút” không, hay chỉ sửa bằng cách trừ bớt vài pixel.
Trả lời ngắn~30 giây
Mặc định là content-box: width chỉ tính vùng nội dung, còn padding và border cộng thêm vào bên ngoài — nên một hộp width: 300px; padding: 20px; border: 1px chiếm 342px. Với border-box, width là tổng chiều rộng cuối cùng và padding/border ăn vào bên trong. Cái sau khớp với cách người ta suy nghĩ về layout, nên hầu hết dự án đặt nó cho toàn bộ tài liệu.
Giải thích sâu
Chỗ khác biệt cắn đau nhất là khi trộn đơn vị: width: 50% cộng padding: 16px với content-box cho ra một phần tử rộng hơn nửa vùng cha, nên hai cái cạnh nhau xuống dòng. Với border-box thì hai cái vừa khít. Đây là lý do quy tắc *, *::before, *::after { box-sizing: border-box } trở thành dòng đầu tiên của gần như mọi file reset.
Cần nói thêm là border-box không tính margin — margin luôn nằm ngoài mọi cách tính. Và margin có một hành vi riêng dễ gây bất ngờ: margin theo chiều dọc của hai phần tử liền kề GỘP lại thành cái lớn hơn thay vì cộng dồn. Điều này không xảy ra trong flex hay grid container, và đó là một lý do rất thực tế khiến layout hiện đại ít gặp lỗi khoảng cách hơn.
Câu hỏi tiếp theo họ sẽ hỏi
?Khi nào flex, khi nào grid?
Flex cho một chiều — một hàng hoặc một cột, kích thước do nội dung quyết định. Grid cho hai chiều — khi bạn muốn khai báo trước cả hàng lẫn cột. Câu ngắn gọn: layout theo nội dung thì flex, layout theo bố cục thì grid.
Trả lời thế này là mất điểm
- Sửa lệch layout bằng cách trừ pixel thủ công thay vì sửa mô hình hộp.