Hướng dẫn box-sizing border-box css - kích thước hộp css đường viền hộp
Lời tựaBài viết này là phần 2 của series về box model của mình. Bạn có thể theo dõi tất cả các phần tại đây: Show Phần 1: CSS Box Model - Cơ bản dành cho người mới bắt đầu Phần 2: CSS Box Model và box-sizing: border-box là gì vậy? Phần 3: CSS Box Model - Các cách hiển thị element với thuộc tính display Các bạn theo dõi các bài blog cá nhân của mình tại đây nhé: https://phucluong.com/ Lý do mình chọn viết về CSS Box ModelTrong thế giới của CSS hay web layout nói chung, có rất nhiều thứ cơ bản mà một lập trình viên giao diện cần nắm vững. Nhưng mình chọn Box Model để giới thiệu đầu tiên vì nó rất cơ bản nhưng lại vô cùng quan trọng trong việc layout. Mình từng thấy các bạn junior khác chỉ layout kiểu đối phó (thử sai), viết css theo bản năng hoặc kinh nghiệm cá nhân, miễn sao kết quả giống design hoặc chạy được là được. Việc này có rất nhiều tác hại:
Trong các bài tiếp theo, mình sẽ viết về những chủ đề cơ bản và cũng rất quan trọng khác của CSS như Inheritance, Cascade, Specificity, BFC, Flexbox, Grid… Bài viết này dành cho ai?Bạn hãy tưởng tượng mình đang tham gia một buổi phỏng vấn và được hỏi câu “Box model trong CSS là gì?”. Nếu bạn cảm giác không tự tin trả lời câu hỏi này, hoặc chỉ trả lời kiểu cụt ngủn “nó nói về padding, margin, border của mấy cái element trên trang web”, thì bài viết này là dành cho bạn. Mình mặc định bạn đã có chút kiến thức cơ bản về CSS nên sẽ không giải thích chi tiết những phần ngoài phạm vi bài viết. CSS Box Model là gì?Có một điều bạn luôn phải nhớ là bất kì element nào trên trang web đều là một khối hình chữ nhật, kể cả các hình tròn, hình oval, hay các đoạn text dài ngắn khác nhau: Vậy để giúp browser biết được một element rộng/cao bao nhiêu để render cho chính xác và đúng ý của developer, box model là thứ mà browser dựa vào để tính toán. Nói lý thuyết hơn, box model trong CSS chỉ đơn giản là một tập các quy tắc và công thức cộng trừ để giúp browser xác định được chiều rộng, cao (và một số thứ khác) của một element. Các thành phần của Box ModelNhư mình chia sẻ ở trên, bất kì element nào cũng là một khối hình chữ nhật, và nó bao gồm 4 thành phần: content, padding, border, và margin (tốt nhất là không nên Việt hóa những từ này 😃 ). Mỗi thành phần đều có một đường biên bên ngoài tương ứng: content edge, padding edge, border edge, margin edge.
Là một developer, bạn có thể dễ dàng xem được các thuộc tính này của các element rất trực quan thông qua DevTools của browser. Công thức tính đơn giản mặc định:
Các thuộc tính css tương ứng:
Có thể bạn để ý mình không liệt kê 6 trong công thức. Mặc dù 6 là một phần của box model và đi kèm với element, nhưng nó không được tính vào chiều rộng/cao của element.Có bạn từng hỏi mình 6 và padding khác nhau thế nào. Mình sẽ có một bài viết phân biệt chi tiết sau, nhưng nói đơn giản thì 6 là vùng ở bên ngoài border, còn padding là vùng bên trong border, và khi nào dùng 6/padding cũng là một điều căn bản mà các bạn developer cần nắm vững (bạn có thể google để biết thêm về sự khác nhau giữa chúng).Tất cả chỉ là quá khứ, hãy cùng quay về hiện tại:Vấn đề từng gây khó chịu 1:Khi layout một trang web, chắc chắn sẽ có những lúc bạn tăng giảm Ví dụ cho dễ hiểu: Element (chiều rộng) = 200px (content) + 40px (padding) = 240px Khi bạn tăng Khi bạn thay đổi padding, nó sẽ làm thay đổi layout như hình bên dưới: Giải pháp hiện tạiBox model được nâng cấp (rất lâu rồi) với thuộc tính 6, 2 value chính là: 7 và 8
Và khi 6 ra đời, “rất hiếm” developer nào (quan điểm cá nhân) muốn quay lại quá khứ và sử dụng 6 với value là 7 nữa trừ những trường hợp đặc biệt của project (Cho mình biết nếu bạn có trường hợp nào cần dùng 7 nhé)Công thức tính theo |