CSS Box Sizing


CSS Box Sizing

CSS box-sizing 属性允许我们在元素的总宽度和高度中包括内边距(填充)和边框。


假如不指定 CSS box-sizing 属性

默认情况下,元素的宽度和高度是这样计算的:

  • width + padding + border = 元素的实际宽度
  • height + padding + border = 元素的实际高度

这意味着:当您设置元素的宽度/高度时,该元素通常看起来比您设置的更大(因为元素的边框和内边距已被添加到元素的指定宽度/高度中)。

下图展示了两个有相同指定宽度和高度的 <div> 元素:

这个 div 较小(宽度为 300px,高度为 100px)。
这个 div 更大(宽度也为 300px,高度为 100px)。

上面的两个 <div> 元素在最终结果中呈现出不同的尺寸(因为 div2 指定了内边距):

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .div1 {
  6. width: 300px;
  7. height: 100px;
  8. border: 1px solid blue;
  9. }
  10. .div2 {
  11. width: 300px;
  12. height: 100px;
  13. padding: 50px;
  14. border: 1px solid red;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <div class="div1">这个 div 更小(宽度为 300 像素,高度为 100 像素)。</div>
  20. <br>
  21. <div class="div2">这个 div 更大(宽度也是 300 像素,高度也是 100 像素)。</div>
  22. </body>
  23. </html>

box-sizing 属性解决了这个问题。


如果使用 CSS box-sizing 属性

box-sizing 属性允许我们在元素的总宽度和高度中包括内边距和边框。

如果在元素上设置了 box-sizing: border-box;,则宽度和高度会包括内边距和边框:

现在两个 div 的大小相同!
Hooray!

该例与上例相同,两个 <div> 元素都设置了 box-sizing: border-box;

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .div1 {
  6. width: 300px;
  7. height: 100px;
  8. border: 1px solid blue;
  9. box-sizing: border-box;
  10. }
  11. .div2 {
  12. width: 300px;
  13. height: 100px;
  14. padding: 50px;
  15. border: 1px solid red;
  16. box-sizing: border-box;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div class="div1">现在,两个 div 的尺寸是一样的!</div>
  22. <br>
  23. <div class="div2">Hello!</div>
  24. </body>
  25. </html>

由于使用 box-sizing: border-box; 的效果如此之好,许多开发人员希望页面上的所有元素都能够以这种方式工作。

下面的代码能够确保以这种更直观的方式调整所有元素的大小。许多浏览器已经在对许多表单元素使用 box-sizing: border-box;(但并非全部 - 这就是为什么 input 和 textarea 在 width: 100%; 时看起来不同)。

将其应用于所有元素是安全且明智的:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. body {
  6. margin: 0;
  7. }
  8. * {
  9. box-sizing: border-box;
  10. }
  11. input, textarea {
  12. width: 100%;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <form action="/example/html/action_page.ashx">
  18. 姓氏:<br>
  19. <input type="text" name="firstname" value="Mickey"><br>
  20. 名字:<br>
  21. <input type="text" name="lastname" value="Mouse"><br>
  22. 评论:<br>
  23. <textarea name="message" rows="5" cols="30">
  24. </textarea>
  25. <br><br>
  26. <input type="submit" value="提交">
  27. </form>
  28. <p><b>提示:</b>请尝试从 style 元素中删除 box-sizing 属性,然后看看会发生什么。请注意,input、textarea 和提交按钮的宽度将超出屏幕范围。</p>
  29. </body>
  30. </html>

CSS Box Sizing 属性

属性描述
box-sizing定义元素宽度和高度的计算方式:它们是否应包含内边距(padding)和边框。

分类导航