CSS:填充与高度

CSS: Padding vs. Height

在使用 CSS 设置样式时,我注意到填充 属性 可以轻松实现与高度 属性 相同的效果...但是填充 属性 使我的文字保持美观和居中,而高度 属性 迫使我添加其他 CSS 规则/调整行高。

是否 "wrong" 或违反常用的 CSS 标准来放弃高度 属性 并使用填充代替元素的高度?

这会带来什么影响?

是的,用padding来控制元素高度是错误的

height 控制元素的实际高度(基本上是从 border-bottomborder-top 的距离),而 padding 控制内容和边框之间的距离。

高度和内边距都固有地控制元素的高度。我不同意使用填充是错误的,而是取决于具体的用例。

当您需要固定容器尺寸时使用高度。

  • PRO: 当您不希望容器垂直拉伸时很有用。
  • CON: 当您更改字体大小、边距、填充等属性时变得脆弱。
    • 增加尺寸会导致内容隐藏或溢出。
    • 例如,更改字体大小会导致级联更改(您还必须更改 margins/padding 或 sibling/child 元素的大小属性。

不需要固定容器高度,但又想加白的时候使用paddingspace.

  • PRO:更容易更改字体大小、边距、填充,并向容器添加可能会增加容器垂直尺寸的额外内容。
  • CON: 添加content/increasing尺寸属性会导致容器垂直拉伸,这在某些场景下是不可取的。
    • 不适用于垂直space受限或需要控制的场景。

将最小高度和最大高度用于混合方法。

  • PRO:强制固定高度,但允许内容动态增长,直到达到最小或最大。
  • CON:您仍然遇到 "cascade" 大小属性更新问题,一旦达到最小值或最大值就添加内容。

您可以使用 box-sizing 属性:

By default, the width and height of an element is calculated like this:

  • Width + Padding + Border = Actual width of an element
  • Height + Padding + Border = Actual height of an element

这意味着:元素的边框和填充被添加到元素的指定 width/height。

使用 box-sizing 属性 将允许您将元素填充和边框作为其总高度和宽度的一部分。

当您设置 box-sizing: border-box; 时,元素的内边距和边框将作为其总宽度和高度的一部分包含在内。

.div1 {
    width: 300px;
    height: 100px;
    border: 1px solid blue;
}

.div2 {
    width: 300px;
    height: 100px;    
    padding: 50px;
    border: 1px solid red;
}
<div class="div1">This div is smaller (width is 300px and height is 100px).</div>
<br>
<div class="div2">This div is bigger (width is also 300px and height is 100px).</div>


.div1 {
    width: 300px;
    height: 100px;
    border: 1px solid blue;
    box-sizing: border-box;
}

.div2 {
    width: 300px;
    height: 100px;    
    padding: 50px;
    border: 1px solid red;
    box-sizing: border-box;
}
<div class="div1">Both divs are the same size now!</div>
<br>
<div class="div2">Hooray!</div>