如何防止padding属性更改CSS中的宽度或高度?


227

我正在创建一个带有DIV的网站。一切正常,除了创建DIV时。我这样创建它们(示例):

newdiv {
    width: 200px;
    height: 60px;
    padding-left: 20px;
    text-align: left;
}

当我添加该padding-left属性时,DIV更改的宽度更改为220px,并且我希望它保持在200px。

假设我创建了另一个与完全相同的DIV名称,然后将其放在其中,但没有填充且具有。我得到同样的东西,其宽度将为220px。anotherdivnewdivnewdivnewdivanotherdivpadding-left: 20pxnewdiv

我该如何解决这个问题?


3
我很伤心地说,但我喜欢IE如何处理这个...更有道理,我...
Nicu的苏尔

Answers:


390

添加属性:

-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box;    /* Firefox, other Gecko */
box-sizing: border-box;         /* Opera/IE 8+ */

注意:此功能在版本8以下的Internet Explorer中无法使用


14
这是边框的绝佳解决方案,但是这对填充有何帮助?
加藤2012年

6
这是纯魔术!-它修复了我们都知道并讨厌的盒子模型!即使得它的工作直觉的方式表明,它应该-而不是规范-但据我所知并没有打破任何规格之一:d本文澄清很好... stackoverflow.com/questions/779434/...
technicalbloke

2
@technicalbloke您的链接仅回到此问题。
mhenry1384 2012年

11
是的,复制并粘贴公鸡。这是我要分享的链接... paulirish.com/2012/box-sizing-border-box-ftw
Technicalbloke,

1
你们中许多人应该在下面考虑width:自动技巧。跨浏览器的工作原理,更少的代码,等等
瑞安希林



11

如果您希望缩进div中的文本而不更改div的大小,请使用CSS text-indent而不是padding-left

.indent {
  text-indent: 1em;
}
.border {
  border-style: solid;
}
<div class="border">
  Non indented
</div>

<br>

<div class="border indent">
  Indented
</div>


1
这是我发现为固定宽度div工作的唯一解决方案。盒子大小并没有阻止填充物影响宽度,所以感谢一吨指出这个很棒的小东西。
Stevo


1

当我添加padding-left属性时,DIV的宽度更改为220px

是的,这完全符合标准。那应该是这样的。

假设我创建了另一个与newdiv完全相同的DIV,并将其放置在newdiv内,但newdiv没有填充,而anotherdiv具有padding-left:20px。我得到同样的东西,newdiv的宽度将为220px;

不,newdiv将保持200px宽。


2
Guffa,这根本不是标准应该起作用的方式。绝对不应该使用填充来影响要应用的元素的尺寸。以最大的敬意,您是否有可能将“填充”与“边距”混淆?
da5id

1
是的,填充肯定会影响元素的尺寸。我认为是您感到困惑...您如何建议页边空白会影响元素的尺寸?
Guffa

实际上,您知道我认为我们在某种程度上都是对的。我已经习惯了完全忘记标准的效果。我在这里找到了很好的解释quirksmode.org/css/box.html
da5id

所以,我向先生道歉。但是出于实际目的(毕竟这是我们正在谈论的内容),我的建议仍然不错,不是吗?
da5id

好吧,您说得对,只要有一个盒子模型错误,但这不适用于此问题... :)
Guffa

-1

只需将div的宽度更改为160px(如果您的填充为20px,则会为div的宽度增加40px),因此您需要从该宽度中减去40px,以使div看起来正常并且不会因其上的额外宽度而失真您的文字全弄乱了。


2
这与@rvarcher给出的答案相同。
8bitjunkie 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.