Đặt width và height
width và height đặt kích thước của khung nội dung (content box) của phần tử. Mặc định, padding và viền được cộng thêm bên ngoài kích thước đó.
Hộp có kích thước 260 x 100 pixel: 240 x 80 cho nội dung cộng 10px padding mỗi phía. Với box-sizing: border-box, nó sẽ đúng 240 x 80; trang box model giải thích cả hai cách.
Các giá trị
| Giá trị | Ví dụ | Ý nghĩa |
|---|---|---|
auto | width: auto | Mặc định. Phần tử block lấp đầy chiều rộng khung chứa; chiều cao vừa với nội dung |
| Độ dài | 300px, 20rem | Kích thước cố định |
| Phần trăm | 50% | Của chiều rộng (với width) hoặc chiều cao (với height) của khối chứa |
| Đơn vị viewport | 100vh, 50vw, 100dvh | Của cửa sổ trình duyệt |
min-content | width: min-content | Hẹp nhất có thể, từ dài nhất quyết định |
max-content | width: max-content | Rộng bằng nội dung khi nằm trên một dòng |
fit-content | width: fit-content | Giống max-content, nhưng không bao giờ rộng hơn khung chứa |
Vì sao height: 100% không có tác dụng
height phần trăm cần một phần tử cha có chiều cao xác định để tính phần trăm. Khi chiều cao của phần tử cha là auto, vốn là trường hợp thông thường, height: 100% của phần tử con cũng hoạt động như auto.
Phần tử con đầu tiên chỉ cao bằng phần chữ của nó. Phần tử con thứ hai lấp đầy phần tử cha vì phần tử cha có chiều cao. Muốn cả chuỗi phần trăm trên trang hoạt động, mọi phần tử tổ tiên tới tận html và body đều cần có chiều cao, nên phần lớn bố cục dùng flexbox hoặc grid thay thế: phần tử con của chúng tự kéo giãn để lấp đầy mà không cần phần trăm nào.
min-height và max-width: kích thước linh hoạt
Kích thước cố định rất dễ vỡ: chiều cao cố định bị tràn khi chữ dài hơn dự kiến, còn chiều rộng cố định thì quá rộng cho điện thoại. Các thuộc tính min- và max- đặt giới hạn thay vì kích thước chính xác.
| Thuộc tính | Ý nghĩa |
|---|---|
min-width | Không bao giờ hẹp hơn giá trị này |
max-width | Không bao giờ rộng hơn giá trị này |
min-height | Không bao giờ thấp hơn giá trị này, nhưng có thể cao lên |
max-height | Không bao giờ cao hơn giá trị này (nội dung thừa sẽ bị tràn) |
Trên màn hình hẹp hơn 360px, như điện thoại, các card co lại theo, vì max-width chỉ là mức trần.
Khi cả kích thước lẫn giới hạn cùng áp dụng, giới hạn thắng: max-width thắng width, và min-width thắng max-width.
width: auto và width: 100%
Với phần tử block, để width ở auto gần như luôn là điều bạn muốn. auto đưa cả khung, gồm padding và viền, vừa vào khung chứa. 100% làm phần nội dung rộng bằng khung chứa rồi cộng thêm padding và viền lên trên:
width: 100% vẫn hữu ích cho các phần tử mặc định không phải block (một <input>, một <img>, một phần tử inline-block), tốt nhất là đi kèm box-sizing: border-box.
Kích thước theo nội dung: fit-content
Để một phần tử block chỉ rộng bằng phần chữ của nó mà không cần chuyển sang inline-block, hãy dùng fit-content:
fit-content cùng margin-inline: auto căn giữa một nhãn hoặc một khối trông như nút mà vẫn rộng đúng bằng phần chữ.
Khu vực cao toàn màn hình và đơn vị viewport
vh là 1% chiều cao viewport và vw là 1% chiều rộng. Trên điện thoại, thanh địa chỉ của trình duyệt to ra và thu nhỏ lại khi bạn cuộn, nên 100vh có thể cao hơn phần bạn nhìn thấy. Đơn vị động dvh bám theo vùng nhìn thấy, còn svh dùng chiều cao nhìn thấy nhỏ nhất:
.hero {
min-height: 100vh; /* fallback */
min-height: 100dvh; /* follows mobile toolbars */
}
Dùng min-height, không phải height, cho các khu vực toàn màn hình, để màn hình nhỏ có nhiều chữ vẫn có một khu vực cao lên được. Chiều cao cố định với nội dung không vừa sẽ bị tràn ra ngoài, và đó là việc của trang CSS overflow.
Lỗi thường gặp
height: 100%trong phần tử cha không có chiều cao. Nó hoạt động nhưauto. Hãy đặt chiều cao cho phần tử cha hoặc dùng flex hay grid.width: 100%cộng thêm padding. Phần tử bị tràn khỏi khung chứa. Để chiều rộng của block ởauto, hoặc dùngbox-sizing: border-box.- Chiều cao cố định cho khung chứa chữ. Dùng
min-heightđể chữ dài hơn hay font to hơn không bị tràn ra. widthtrên phần tử inline.<span>và<a>bỏ quawidthvàheight; hãy cho chúnginline-blockhoặcblock.width: 1200pxcho lớp bọc trang. Nó bị cuộn ngang trên mọi điện thoại. Hãy dùngmax-width: 1200px.
Câu hỏi thường gặp
Vì sao height: 100% không hoạt động?
Chiều cao phần trăm là phần trăm chiều cao của phần tử cha, và chỉ hoạt động khi chiều cao đó xác định. Nếu chiều cao của phần tử cha là auto (tính theo nội dung), phần trăm được coi như auto. Hãy đặt chiều cao cho phần tử cha, hoặc dùng flexbox hay grid, vốn kéo giãn phần tử con mà không cần phần trăm.
width: 100% và width: auto khác nhau thế nào?
Với phần tử block, auto lấp đầy khung chứa, tính cả padding và viền. width: 100% đặt chiều rộng phần nội dung bằng chiều rộng khung chứa, nên với box-sizing: content-box mặc định, chỉ cần có padding hay viền là phần tử bị tràn ra ngoài.
min-height trong CSS dùng để làm gì?
Nó đặt chiều cao nhỏ nhất mà phần tử được phép có, nhưng vẫn cho phần tử cao lên theo nội dung. min-height: 200px cho card trống cao 200px, còn card nhiều chữ hơn sẽ cao lên thay vì bị tràn, điều mà height cố định không cho phép.
width và max-width khác nhau thế nào?
width đặt một kích thước chính xác. max-width đặt giới hạn trên: phần tử có thể hẹp hơn, ví dụ trên điện thoại, nhưng không bao giờ rộng hơn. width: 100%; max-width: 600px; lấp đầy màn hình nhỏ và dừng ở 600px trên màn hình lớn.
Làm sao để phần tử cao bằng toàn màn hình?
Dùng min-height: 100vh (hoặc 100dvh để tính đến thanh công cụ của trình duyệt di động). Dùng min-height thay vì height để khu vực đó cao lên được nếu nội dung cao hơn màn hình.