Tôi muốn chiều rộng và chiều cao của hộp bao gồm tất cả nội dung, phần đệm, chiều rộng đường viền và lề theo mặc định. Có cách nào để làm việc này không? Đặc biệt, tôi muốn có thể chỉ định một cái gì đó như width: 100%
bao gồm tất cả mọi thứ cho đến lề.
Bao gồm lề cho chiều rộng và chiều cao


Đây là một câu hỏi mơ hồ, nhưng tôi sẽ trả lời tốt nhất có thể.
Lề, theo định nghĩa, là khu vực xung quanh bên ngoài hộp của bạn; nghĩa là không có cách nào để bao gồm các lề bên trong div của bạn.
Nếu bạn muốn có thêm phần đệm ở bên trong hộp của mình, nhưng bạn không muốn hộp thay đổi kích thước, hãy sử dụng: box-sizing:content-box;
Hoặc nếu bạn muốn bao gồm phần đệm và đường viền, hãy sử dụng:box-sizing:border-box;
Một giải pháp khả thi giúp duy trì kích thước của các div của bạn và loại bỏ phần tràn sẽ trông giống như sau:
#parent{
box-sizing:border-box;
width:100%;
height:200px;
padding:2em;
}
#child{
box-sizing:border-box;
width:100%;
height:100%;
padding:1em;
}
<div id="parent">
<div id="child"></div>
</div>
Chỉ cần đặt div mà bạn muốn tạo lề vào bên trong một div khác có đệm. Do đó tạo ra các lề giả.

ví dụ nếu lề của bạn là 10px, bạn có thể sử dụng
width: calc(100% - 20px);
box-sizing: border-box;

Đặt CSS box-sizing
tài sản để border-box
làm width
và height
bao gồm các nội dung, biên giới, và padding. Điều này cho phép bạn thiết lập width: 100%
và vẫn thêm padding
hoặc border
. Nói cách khác, box-sizing: border-box
làm cho width
bao gồm tất cả mọi thứ giữa các cạnh bên trong của lề. Không có cách nào để bao gồm ký quỹ theo cách như vậy.
.example { box-sizing: border-box; width: 100%; padding: 10px }
Tài liệu tham khảo hữu ích

Có thể quấn một div khác xung quanh nó và chỉ định chiều rộng của div đó?
<div style="width: 100px; border: 1px solid blue;">
<div style="width: 100px; background:yellow; margin: 10px; border: 1px solid blue">
inner width 100px not including it's margin.
</div>
</div>
<div style="width: 100px; border: 1px solid blue">
<div style="background:yellow; margin: 10px; border: 1px solid blue">
inner width's 100px including it's margin.
</div>
</div>

Sử dụng display: flex;
cho thẻ mẹ.
Ví dụ:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
border: 1px solid black;
width: 100%;
overflow: auto;
box-sizing: border-box;
display: flex; /* it can put children in one line */
}
.left {
border: 1px solid black;
width: 20%;
float: left;
box-sizing: border-box
}
.right {
border: 1px solid black;
width: 80%;
margin: 0 10px;
float: left;
box-sizing: border-box;
}
</style>
</head>
<body>
<div class="center">
<div class="left">left</div>
<div class="right">right</div>
</div>
</body>
</html>

Có thể bạn quan tâm
