美文网首页
width: 100%与width: auto

width: 100%与width: auto

作者: 饥人谷_阿银 | 来源:发表于2018-09-26 22:08 被阅读0次

    [1] width:100% 并不包含margin-left margin-right的属性值,直接取其父容器的宽度加上含margin-left /margin-right的值。如果设置了margin那新的width值是容器的宽度加上margin的值。(细心观察)就会发现加了 margin相对应的边就会多出设置的空白。而且会多出横向滚动条因为宽度已经超出了屏幕的范围。(这条相对于父容器是body)。

    [2] width:auto包含margin-left/margin-right的属性值。其值包含margin-left /margin-right的值。width:auto总是占据整行!!!这其中margin的值已经包含其中了(也就是一整行)如果要设置margin的值那就用一整行然后减去margin的值就得到了现在的宽度了。减去的这个值就是相应边得空白。显著的特征是这个没有横向滚动条出现也就是宽度没有增加。

    [3] 在IE6下显示不正常,但是在IE8和IE9下显示正常,可能是IE8和IE9对width:100%的解析与IE6不同所致,但是两者对width:auto的解析是一致的。

    width:auto;会将元素撑开至整个父元素width,但是会减去子节点自己的margin,padding或者border的大小。
    width:100%;会强制将元素变成和父元素一样的宽,并且添加额外的空间到这个元素的width上。就是因为这个,会导致很多问题。

    使用width:100%永远都不是一个好主意。这个属性容易让人产生你正在定义一个元素可视大小,其实,你是在对这个元素的状态做了巨大的改变。

    块元素会填满其父元素的整个width,因为块元素默认的是width:auto;的。

    下面的例子里,黑色的边框(border)代表容器父元素。蓝色和绿色表示的是一个有着红色边框,边框宽为20个像素的子节点。(border:20px solid red;),不同点在于,蓝色的子节点是width:auto;,绿色的是width:100%;的。

    可以看到绿色的子节点伸出了父元素。这是因为绿色的子节点设置了width:100%;使得自己的width变得和父元素一样大小,但是这个width不包含子节点自己边框的大小。这样边框就到父元素外面了;
    对于padding和margin也是同样的作用。
    无论多的宽度是padding,margin或者border,width:auto;都不会将子节点撑破父元素。

    可以看出,width:100%是将盒模型中的content拉伸得和父元素一样,而width:auto;是将这个盒模型拉伸得和父元素一样。

    总之,
    width:100%:设定对象的宽度占父元素的100%(不论设定元素的margin值为多少)
    width:auto:是根据设定对象的实际大小而自适应宽度(考虑设定元素的margin值得大小)

    针对元素A
    1.A是容器,希望A把它的父容器充满,就是100%
    2.A是容器,希望A根据容纳的元素大小变换自己的大小,就用auto

    3.A不是容器,宽度不知,需要显示完全,用auto
    4.A不是容器,宽度不知,可能大于所在容器宽度,希望填满,用100%

    相关文章

      网友评论

          本文标题:width: 100%与width: auto

          本文链接:https://www.haomeiwen.com/subject/yptsoftx.html