Bộ trực quan hóa mô hình hộp CSS

Điều chỉnh margin, border, padding và kích thước nội dung và xem mô hình hộp CSS trực tiếp.

Kích thước

Padding (px)

Border (px)

Margin (px)

margin
border
padding
200 × 120

  

Cách sử dụng

  1. Nhập các giá trị mô hình hộp: xác định margin, border, padding và kích thước nội dung trong các trường hoặc thanh trượt tương tác.
  2. Khám phá hình ảnh hóa: sơ đồ cổ điển của các hộp lồng nhau được cập nhật theo thời gian thực, margin (cam), border (vàng), padding (xanh lá) và nội dung (xanh dương), tất cả đều được dán nhãn rõ ràng.
  3. Sao chép CSS: nhấp Sao chép CSS để có các thuộc tính mô hình hộp đầy đủ của phần tử được cấu hình.

Tại sao sử dụng trình hình dung mô hình hộp CSS?

Mô hình hộp CSS là một trong những khái niệm cơ bản nhất của bố cục web, và là một trong những nguồn lỗi phổ biến nhất, đặc biệt khi trộn các giá trị box-sizing, gộp margin và định kích thước border. Trình hình dung tương tác này làm cho mô hình hộp trở nên cụ thể và hữu hình: bạn điều chỉnh các giá trị và ngay lập tức thấy cách margin, border và padding xếp chồng xung quanh nội dung. Cần thiết để học, gỡ lỗi và dạy CSS.

Tính năng

Câu hỏi thường gặp

Sự khác biệt giữa content-box và border-box là gì?

Với content-box (mặc định), width và height chỉ áp dụng cho khu vực nội dung, padding và border thêm vào kích thước tổng thể của phần tử. Với border-box, width và height bao gồm padding và border, làm cho kích thước dễ dự đoán hơn. Hầu hết các CSS reset hiện đại áp dụng box-sizing: border-box cho tất cả các phần tử.

Gộp margin là gì?

Khi hai margin dọc chạm nhau (giữa các phần tử block liền kề hoặc giữa cha và con đầu/cuối), chúng gộp thành một margin duy nhất bằng với giá trị lớn nhất trong hai. Điều này không xảy ra với các con flex hoặc grid, hoặc với các phần tử có padding hoặc border.

Cách xóa khoảng trống thừa dưới các phần tử inline?

Các phần tử inline (như <img>) có một khoảng trống nhỏ bên dưới chúng do căn chỉnh đường cơ sở của line-height. Sửa nó bằng cách đặt display: block trên phần tử, hoặc vertical-align: bottom, hoặc font-size: 0 trên phần tử cha.

CSS box model thực sự định nghĩa điều gì

CSS box model là biểu diễn hình chữ nhật của mọi phần tử trên trang web. Mỗi phần tử có bốn hộp đồng tâm: hộp content (nơi văn bản, hình ảnh, phần tử con sống), hộp padding (khoảng cách giữa nội dung và border, bên trong ranh giới có thể nhìn thấy), hộp border (đường viền có thể nhìn thấy được vẽ xung quanh padding), và hộp margin (khoảng cách trong suốt bên ngoài border tách phần tử này khỏi các phần tử lân cận). Kích thước hiển thị tổng của một phần tử là content + padding + border; margin không nhìn thấy nhưng đẩy các phần tử khác ra xa.

Khái niệm quan trọng là box-sizing. Theo mặc định (box-sizing: content-box, giá trị đặc tả CSS 1), các thuộc tính widthheight chỉ áp dụng cho hộp content. Nếu bạn đặt width: 200px; padding: 20px; border: 2px solid, tổng chiều rộng được render là 200 + 40 + 4 = 244 pixel. Điều này không trực quan: một phần tử rộng 200px thực sự chiếm 244 pixel không gian ngang. Phương án thay thế box-sizing: border-box (thêm vào trong CSS 3) đảo ngược điều này: thuộc tính width là kích thước hiển thị tổng bao gồm padding và border, vì vậy khu vực content thu nhỏ để vừa. border-box là điều mà hầu hết các nhà phát triển mong đợi; nó trở thành tiêu chuẩn thực tế thông qua reset CSS năm 2012 của Paul Irish * { box-sizing: border-box }.

Hiểu box model là quan trọng vì các lỗi layout hầu như luôn truy về sự nhầm lẫn về giá trị nào áp dụng cho hộp nào. Tại sao phần tử của tôi rộng hơn tôi đặt? là bất ngờ của content-box. Tại sao margin của tôi không đẩy các anh chị em xuống? thường là sự sụp đổ của margin. Tại sao padding-top: 50% lại hành xử kỳ lạ? vì padding phần trăm được tính tương đối với chiều rộng của phụ huynh, không phải chiều cao. Mỗi nhà phát triển CSS đều gặp phải những nhầm lẫn này; trình hiển thị này làm cho chúng cụ thể bằng cách cho phép bạn điều chỉnh giá trị và xem hình học hộp kết quả theo thời gian thực.

Công cụ này hoạt động bên dưới như thế nào

Sơ đồ tương tác là một loạt các div màu lồng nhau tương ứng với mỗi hộp (margin màu cam, border màu vàng, padding màu xanh lá cây, content màu xanh dương). Khi bạn thay đổi các giá trị đầu vào, JavaScript cập nhật các thuộc tính style nội tuyến của các div sơ đồ để chúng phản ánh các giá trị bằng số và trực quan. Tỉ lệ được mở rộng để phù hợp với khu vực xem trước; giá trị pixel tuyệt đối sẽ đẩy sơ đồ ra khỏi màn hình cho các đầu vào điển hình.

Tính toán kích thước tổng phụ thuộc vào chế độ box-sizing. Đối với content-box: tổng chiều rộng = chiều rộng content + padding-left + padding-right + border-left + border-right. Đối với border-box: tổng chiều rộng = giá trị width (padding và border được trừ khỏi khu vực content). Công cụ tính toán cả hai chế độ đồng thời khi bạn chuyển đổi box-sizing, vì vậy bạn có thể so sánh trực tiếp.

Đầu ra CSS được tạo sử dụng các đầu vào của bạn làm các giá trị thuộc tính: box-sizing: border-box; width: 200px; padding: 10px 20px; border: 2px solid; margin: 1rem auto;. Sao chép trực tiếp vào stylesheet của bạn và áp dụng lớp khớp. Không có gì rời khỏi trình duyệt của bạn; mọi thứ chạy cục bộ trong JavaScript. Không phân tích, không backend, không tài khoản. Tải lại và trạng thái biến mất.

Lịch sử ngắn về CSS box model

Quy trình làm việc thực tế

Cạm bẫy phổ biến và ý nghĩa của chúng

Quyền riêng tư: mọi thứ chạy trong trình duyệt của bạn

Các công cụ học và hình dung CSS đến trong hai hương vị: các trang HTML đơn giản chạy JavaScript phía client (riêng tư, nhanh, không thiết lập) và các trình chỉnh sửa đám mây với các dự án được lưu (cộng tác nhưng với sự đánh đổi về quyền riêng tư). Công cụ này thuộc loại đầu tiên. Các giá trị bạn nhập, trạng thái chuyển đổi box-sizing của bạn, CSS được tạo của bạn: tất cả đều ở trong phiên trình duyệt của bạn. Tải lại trang và trạng thái biến mất trừ khi bạn sao chép CSS trước.

Cổ phần quyền riêng tư ở đây thấp vì các giá trị box model hiếm khi chứa thông tin nhạy cảm. Tuy nhiên, sự thiếu phân tích quan trọng: bạn có thể thử nghiệm tự do mà không có quá trình thử và sai của bạn được ghi lại. Đặc biệt hữu ích trong các bối cảnh lớp học hoặc đào tạo doanh nghiệp nơi việc học sinh hoặc thực tập sinh đăng ký tài khoản trên các nền tảng bên thứ ba là một điểm ma sát. Đây là một trang tĩnh duy nhất không có backend, có thể sử dụng trong bất kỳ trình duyệt nào, bao gồm các máy doanh nghiệp bị khóa.

Khi một công cụ khác là lựa chọn đúng

Các câu hỏi thường gặp khác

Tôi nên sử dụng * { box-sizing: border-box } phổ quát không?

Đối với hầu hết các dự án, có. Đề xuất năm 2012 của Paul Irish hiện là mặc định công nghiệp và phù hợp với cách hầu hết các nhà phát triển mong đợi width và height hoạt động. Các framework như Bootstrap, Tailwind, Bulma và Material UI ra mắt với border-box làm mặc định. Các dự án hiện đại bắt đầu vào năm 2026 nên đặt *, *::before, *::after { box-sizing: border-box; } ở đầu reset của họ, và hiếm khi cần phải nghĩ về box-sizing lần nữa. Các ghi đè cụ thể sang content-box có thể có cho các phần tử riêng lẻ nơi border-box sẽ làm hỏng mọi thứ.

Tại sao margin của tôi đẩy phụ huynh xuống thay vì đẩy các anh chị em?

Đây là sự sụp đổ của margin. Khi margin trên của một con gặp cạnh trên của phụ huynh mà không có padding/border ở giữa, margin của con thoát ra và áp dụng cho phụ huynh thay vào đó. Các sửa chữa: thêm padding-top: 1px vào phụ huynh (bất kỳ giá trị nào hoạt động), thêm border: 1px solid transparent, đặt phụ huynh thành một container flex hoặc grid (sự sụp đổ bị triệt tiêu trong các chế độ đó), hoặc sử dụng display: flow-root trên phụ huynh (một quy tắc hiện đại rõ ràng thiết lập bối cảnh định dạng block mới). Tất cả những điều này chặn margin khỏi việc sụp đổ qua.

Sự khác biệt giữa margin: auto và margin: 0 là gì?

margin: 0 nghĩa là không có margin; phần tử ngồi sát các phần tử lân cận. margin: auto nghĩa là trình duyệt tính toán margin để phân phối không gian ngang còn lại, thường được sử dụng để căn giữa một phần tử block: margin-left: auto; margin-right: auto; chia đều không gian còn lại. margin: auto auto auto auto (hoặc shorthand margin: auto) căn giữa cả ngang và dọc bên trong một container flex. Ngoài flex/grid, chỉ margin auto ngang hoạt động.

Outline khác border như thế nào?

Outline vẽ xung quanh một phần tử nhưng nằm ngoài box model: nó không thêm vào kích thước phần tử và không đẩy các phần tử lân cận đi. Border là một phần của box model và thêm vào kích thước được render. Outline thường được sử dụng cho các vòng tiêu điểm (outline :focus-visible) nơi bạn muốn một chỉ báo có thể nhìn thấy mà không dịch chuyển layout. Border được sử dụng khi đường nên là một phần của cấu trúc phần tử. Đừng xóa outline: none mà không cung cấp một chỉ báo tiêu điểm thay thế; làm như vậy phá vỡ khả năng tiếp cận bàn phím.

Tại sao sử dụng các thuộc tính logic như margin-inline-start?

Các thuộc tính logic (margin-block-start, padding-inline, v.v.) thích nghi với hướng viết của tài liệu. Trong tiếng Anh (trái-sang-phải), margin-inline-start giống như margin-left. Trong tiếng Ả Rập hoặc tiếng Do Thái (phải-sang-trái), nó tự động trở thành margin-right. Đối với các trang hỗ trợ nhiều ngôn ngữ, các thuộc tính logic làm cho quốc tế hóa CSS tự động. Đối với các trang chỉ tiếng Anh, chúng tương đương về hiệu ứng nhưng báo hiệu ý định rõ ràng hơn: margin này ở đầu dòng văn bản hơn là margin này ở phía bên trái.

Làm thế nào để tôi tạo một hộp với tỷ lệ khung hình cố định?

Cách hiện đại là thuộc tính CSS aspect-ratio: aspect-ratio: 16/9 trên một div làm cho chiều cao của nó tự động là 9/16 chiều rộng của nó. Được hỗ trợ trong tất cả các trình duyệt hiện đại (2021+). Kỹ thuật legacy sử dụng padding-top như một phần trăm: một div với padding-top: 56.25% tạo ra tỷ lệ 16:9 (9/16 = 56.25%). Thủ thuật padding-top vẫn hoạt động nhưng cú pháp thuộc tính sạch hơn. Sử dụng aspect-ratio cho mã mới; hack legacy vẫn còn trong Tailwind và các công cụ khác cần hỗ trợ trình duyệt rộng.

Công cụ liên quan

Trình tạo CSS đa cột Trình tạo lưới CSS Trình tạo CSS Flexbox Trình tạo CSS Border Radius