css-width的值

前言

css中,元素 width默认的值是auto。在我们日常进行响应式布局的时候,可能要通过百分比进行设计。
本文主要记录一下width:auto 和 width: 100%的区别。

width: auto

  • 子元素(包括content+padding+border+margin)撑满整个父元素的content区域。
  • 子元素有margin、border、padding时,会减去子元素content区域相对应的width值
  • 父元素的content = 子元素(content + padding + border + margin )

    width: 100%

  • 强制将子元素的content区域 撑满 父元素的content区域
  • 子元素有margin、border、padding时,不改变子元素content区域的width,而是溢出父盒子,保持原有值
  • 父元素的content = 子元素的content

    代码示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
    margin: 0;padding: 0;
    }
    body {
    background: #dcdcdc;
    }
    .box {
    width: 400px;
    border: 3px solid red;
    padding: 0 50px;
    background: white;
    }
    .box1 {
    width: auto;
    height: 100px;
    background: pink;
    padding: 0 50px;
    margin: 0 50px;
    border-width: 0 50px;
    border-style: solid;
    border-color: green;
    }
    .box2 {
    width: 100%;
    height: 100px;
    background: gold;
    padding: 0 50px;
    margin: 0 50px;
    border-width: 0 50px;
    border-style: solid;
    border-color: green;
    }
    .box3 {
    width: 100px;height: 100px;background: orange;
    }
    .box4 {
    float: left;
    width: 50px;height: 50px;background: pink;
    }
    </style>
    </head>
    <body>
    <div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
    </div>
    </body>
    </html>

    总结

    子元素width属性设置百分比的时候,子元素盒子的content区域会根据父亲元素content的值进行比例扩大缩写。而采用默认是width: atuo;的时候,则会将子元素所有的盒子区域变成父亲元素的content区域大小。
    所以在设置子元素width: auto;的时候,父亲元素进行padding内压,会使得子元素看起来水平居中一样。
    同理,height: auto; 也可以实现垂直居中。