Padding là gì
Padding là khoảng trống bên trong phần tử, giữa nội dung và viền của nó. Nó mang nền của phần tử, nên đây là thuộc tính giúp một nút, một thẻ hay một nhãn có chỗ để "thở".
Vùng màu xanh dương là nội dung. Dải xanh lá bao quanh là 24px padding ở mọi cạnh, và viền nằm bên ngoài dải đó.
Viết tắt padding: 1, 2, 3 hoặc 4 giá trị
padding đặt cả bốn cạnh trong một khai báo. Số lượng giá trị quyết định cạnh nào nhận giá trị nào, đi theo chiều kim đồng hồ từ cạnh trên:
| Khai báo | Trên | Phải | Dưới | Trái |
|---|---|---|---|---|
padding: 10px; | 10 | 10 | 10 | 10 |
padding: 10px 20px; | 10 | 20 | 10 | 20 |
padding: 10px 20px 30px; | 10 | 20 | 30 | 20 |
padding: 10px 20px 30px 40px; | 10 | 20 | 30 | 40 |
Hai giá trị nghĩa là "dọc, ngang". Ba giá trị nghĩa là "trên, ngang, dưới". Bốn giá trị đi vòng theo kim đồng hồ: trên, phải, dưới, trái (mẹo nhớ quen thuộc trong tiếng Anh là TRouBLe, ghép từ Top, Right, Bottom, Left).
Gõ bất kỳ cách viết tắt nào bên dưới. Hộp sẽ vẽ lại và trình duyệt báo mỗi cạnh nhận được bao nhiêu:
Hãy thử 8px, 8px 24px, 0 0 40px và 1em 5%. Giá trị không hợp lệ, như -10px, bị bỏ qua và hộp giữ padding hợp lệ gần nhất.
Từng cạnh một
Mỗi cạnh có thuộc tính riêng, rõ ràng hơn cách viết tắt bốn giá trị khi bạn chỉ muốn đổi một cạnh:
.card {
padding-top: 16px;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
}
Viết tắt rồi chỉnh một cạnh là cách làm phổ biến: đặt tất cả trước, sau đó điều chỉnh một cạnh.
.card {
padding: 16px;
padding-bottom: 32px; /* only the bottom changes */
}
Thứ tự ở đây rất quan trọng: một khai báo viết tắt padding đặt sau padding-bottom sẽ đưa cạnh dưới về lại 16px.
Padding logic: padding-inline và padding-block
padding-left và padding-right là thuộc tính vật lý: chúng giữ nguyên một phía trong mọi ngôn ngữ. Các thuộc tính logic thì đi theo hướng viết, và đó là điều bạn cần trên một trang cũng được hiển thị từ phải sang trái:
| Thuộc tính logic | Trong tiếng Anh (trái sang phải) | Trong tiếng Ả Rập (phải sang trái) |
|---|---|---|
padding-inline-start | trái | phải |
padding-inline-end | phải | trái |
padding-inline | trái và phải | phải và trái |
padding-block | trên và dưới | trên và dưới |
Padding làm hộp to ra (trừ khi dùng border-box)
Theo mặc định, width chỉ là chiều rộng của nội dung, và padding được cộng thêm vào. Một hộp width: 200px với padding: 20px sẽ rộng 240px:
box-sizing: border-box giữ hộp ở 200px và lấy padding từ bên trong. Trang box model trình bày đầy đủ cách tính.
Padding phần trăm
Padding phần trăm được tính theo chiều rộng của phần tử cha, ở cả bốn cạnh, kể cả trên và dưới:
Đó là nguồn gốc của mẹo "padding-top: 56.25%" ngày xưa để tạo khung video 16:9. Ngày nay aspect-ratio: 16 / 9 làm việc đó trực tiếp.
Padding cho nút và liên kết
Padding là cách đúng để làm liên kết hay nút lớn hơn, vì padding là một phần của phần tử, và do đó là một phần của vùng bạn bấm hoặc chạm vào. Margin thì thêm khoảng trống nhưng không làm vùng bấm lớn hơn.
.btn {
display: inline-block; /* lets vertical padding take space in the line */
padding: 10px 18px; /* a comfortable touch target */
}
Các giá trị padding nhận
| Giá trị | Ví dụ | Ghi chú |
|---|---|---|
| Độ dài | 12px, 1rem, 0.5em | em thay đổi theo cỡ chữ của phần tử |
| Phần trăm | 5% | Tính theo chiều rộng của khối chứa |
0 | padding: 0 | Không cần đơn vị |
| Âm | -10px | Không hợp lệ, bị bỏ qua |
auto | auto | Không hợp lệ với padding (dùng được với margin) |
Lỗi thường gặp
- Sai thứ tự trong cách viết tắt bốn giá trị. Thứ tự là trên, phải, dưới, trái, theo chiều kim đồng hồ.
- Hộp to ra khi thêm padding. Hãy đặt
box-sizing: border-box. - Dùng padding để tách hai phần tử. Khoảng cách giữa các phần tử là margin; padding là khoảng trống bên trong một phần tử. Xem margin và padding.
- Padding dọc trên liên kết inline đè lên các dòng khác. Hãy chuyển nó thành
inline-block. - Padding âm hoặc
padding: auto. Cả hai đều không hợp lệ và bị bỏ qua mà không báo gì.
Câu hỏi thường gặp
Padding trong CSS là gì?
Padding là khoảng trống giữa nội dung và viền của phần tử. Nó là một phần của phần tử, nên nó hiện màu nền của phần tử và làm vùng bấm của liên kết hay nút lớn hơn.
Các giá trị trong cách viết tắt padding theo thứ tự nào?
Theo chiều kim đồng hồ, bắt đầu từ cạnh trên: padding: top right bottom left;. Với ba giá trị là trên, trái và phải, dưới; với hai giá trị là trên và dưới, rồi trái và phải; với một giá trị là cả bốn cạnh.
Padding có làm phần tử to ra không?
Với mặc định box-sizing: content-box thì có: padding được cộng vào width và height. Với box-sizing: border-box, padding được lấy từ bên trong chiều rộng, nên phần tử giữ đúng kích thước bạn đặt.
Padding phần trăm được tính theo gì?
Theo chiều rộng của khối chứa, cho cả bốn cạnh. padding-top: 50% là một nửa chiều rộng của phần tử cha chứ không phải chiều cao, và đó là lý do các mẹo giữ tỷ lệ khung hình ngày xưa dùng padding dọc.
Padding có thể âm không?
Không. Giá trị padding âm không hợp lệ và khai báo bị bỏ qua. Để kéo nội dung ra ngoài, hãy dùng margin âm.
Làm sao thêm padding trong HTML?
Bằng CSS, trong stylesheet hoặc thuộc tính style: <div style="padding: 16px;">. HTML không có thuộc tính padding cho các phần tử thông thường; thuộc tính cellpadding cũ trên bảng đã lỗi thời và được thay bằng padding trên td và th.