CSS 使用百分比和边距、填充或边框

Posted

技术标签:

【中文标题】CSS 使用百分比和边距、填充或边框【英文标题】:CSS using percentage and margin, padding or border 【发布时间】:2012-01-27 14:40:30 【问题描述】:

我有一个我不明白的问题。 如果我使用宽度百分比,我希望元素在其大小(百分比)内计算边框、边距或填充。 但实际上这些值被添加到它们的大小上,我认为这是错误的。 我的期望错了吗? 下面的示例显示了该问题。我希望“divs”“left”和“right”都在一行中。如果我删除“边框”,它会按预期工作。

<!DOCTYPE html>
<html>
<head>
<style>
.center 
  border: 1px solid black;
  width: 100%;
  overflow: auto;


.left 
  border: 1px solid black;
  width: 20%;
  float: left;


.right 
  border: 1px solid black;
  width: 80%;
  float: left;

</style>
</head>
<body>
<div class="center">
  <div class="left">left</div>
  <div class="right">right</div>
</div>
</body>
</html>

【问题讨论】:

【参考方案1】:

在超现代浏览器中,您可以使用 calc() 来解决此问题:calc(80% - 2px)。是的,这很正常。如果您将宽度设置为 100 像素,边框设置为 150 像素,那么如果添加了边框 wasnt 会发生什么情况?

【讨论】:

【参考方案2】:

您可以使用box-sizing 来解决此问题。见http://jsfiddle.net/Marwelln/YYkxK/

box-sizing:border-box

【讨论】:

不适用于 Firefox 27(截至 2014 年 3 月的当前版本)。列分为两行。【参考方案3】:

填充或边框总是会增加元素的大小,由内而外。

边距从不增加尺寸,而是在元素外增加空间。

百分比或设定值无关紧要。以上都是真的。

查看盒子模型可能会有所帮助 ---> HERE

【讨论】:

【参考方案4】:

当您使用百分比作为宽度(或高度)值时,这些是父块元素(包含块)的宽度(或高度)的百分比。

【讨论】:

【参考方案5】:

这完全正常。起初可能不是你所期望的,但 CSS 就是这样工作的。

即使没有百分比:

#width 
    width: 100px;
    padding: 0 20px;

这个#width div 将占据 140 像素。百分比也一样。

所以你可能需要内部 div 来实现你想要的。

<div class="left">
   <div class="inner">

   </div>
</div>
<div class="right">
   <div class="inner">
   </div>
</div>


.inner  padding: 10px; 
.right .inner  border-left: 1px solid #ccc; 

【讨论】:

以上是关于CSS 使用百分比和边距、填充或边框的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CSS 中的边距/填充百分比总是根据宽度计算?

css(字体,文本,边距,边框,阴影,背景,渐变,多重背景,列表)

具有填充和边距以及 100% 宽度的 HTML CSS 框? [复制]

从 Javascript 检测真正的边框、填充和边距

Android初学者填充和边距之间的区别[重复]

让两个 CSS 元素并排填充它们的容器,并带有边距