CSS Box Model
Summary
- Mọi thứ trong CSS đều được hiển thị dưới dạng box.
- Có 2 cách để control size của box: extrinsic sizing (control dựa vào thuộc tính width/heigh của box) vs intrinsic sizing (control dựa vào size của content bên trong)
- Order: Content box ⇒ Padding ⇒ Border ⇒ Margin
- Key properties:
box-sizing, display, position, grid/flex layout
Box Model
Notes
Everything CSS display is a box!
Mọi thứ trong CSS đều được hiển thị dưới dạng box. Add border
to see.
Content & Sizing
Các boxes (đại diện element) sẽ có behavior khác nhau, tùy thuộc vào display
value, set dimensions, và content mà nó chứa bên trong (ví dụ text dài quá out khỏi khung).
Để control thì có 2 cách phổ biến:
- extrinsic sizing: Sizing elements dựa vào external factors như space của parent container.
- Sử dụng các properties như:
width
,height
,max-width
,max-height
- Sử dụng các properties như:
- intrinsic sizing: Sizing elements dựa vào element’s own content. Content to nhỏ thế nào thì resize như thế.
- Sử dụng cacs properties như:
min-content
,max-content
,fit-content
- Thuộc tính này flexible hơn 👍
- Sử dụng cacs properties như:
Nếu content dài quá, có thể cân nhắc sử dụng overflow
The areas of the box model
Nếu 1 gói hàng được đóng gói shopee:
-
Hộp carton bên ngoài là border .
-
Khoảng trống rỗng (không khí) bên trong là padding.
-
Hàng được gửi là content.
-
Khoảng cách giữa gói hàng này và các gói hàng khác là margin.
-
content box là nơi content sẽ được hiển thị. Content có thể control size of its parent.
-
padding box: Phần đệm giữa border box bên ngoài và content. Nếu có
overflow: auto
hoặcoverflow: scroll
thì scrollbar sẽ xuất hiện ở đây. -
border box: Bao bên ngoài padding
-
margin box: space around your box ⇒ Các properties như
outline
vàbox-shadow
sẽ xuất hiện ở vị trí này, không ảnh hưởng tới size của box chính.
Control the box model
- Trình duyệt dựa vào user agent style sheet để defines HTML doc sẽ hiển thị ntn.
display
default value:div
- default làdisplay: block
li
- default value làlist-item
span
- default value làinline
box-sizing: content-box
thì thuộc tính như width, height sẽ apply trực tiếp vào content-box luôn.