width:100%与width:auto区别
一、 width属性介绍
width
属性用于设置元素的宽度。width
默认设置内容区域的宽度,但如果box-sizing
属性被设置为border-box
,就转而设置边框区域的宽度。
二、 话不多说,直接上代码看效果
xml
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
div {
color: #fff;
font-size: 2rem;
text-align: center;
}
.parent {
width: 600px;
height: 600px;
background-color: blue;
border: 10px solid black;
padding: 20px;
}
.child {
background-color: red;
border: 10px solid grey;
margin: 20px;
height: 100px;
}
.auto{
width: auto;
}
.hundred-percent{
width: 100%;
}
</style>
<body>
<div class="parent">
parent
<div class="child auto">child1: width:auto</div>
<div class="child hundred-percent">child2: width:100%</div>
</div>
</body>
</html>
三、 分析比较
-
我们给parent 设置了
padding:20px
内边距,给两个child 都设置了margin:10px
的外边距。child1 的width 属性是auto
,child2 的width 属性是100%
。 -
很明显地看到两个child的不同表现,child1的宽度是可以适应的,不会溢出其父元素。
-
<math xmlns="http://www.w3.org/1998/Math/MathML"> c h i l d 1 最终的宽度值 : 540 p x = 600 p x ( 父元素宽度 ) − 20 p x ( 父元素 p a d d i n g ) − 20 p x ( c h i l d 1 m a r g i n ) − 10 p x ( 父元素 b o r d e r ) − 10 p x ( c h i l d 1 b o r d e r ) child1最终的宽度值: 540px = 600px(父元素宽度) - 20px(父元素padding) - 20px (child1 margin) - 10px(父元素border) - 10px (child1border) </math>child1最终的宽度值:540px=600px(父元素宽度)−20px(父元素padding)−20px(child1margin)−10px(父元素border)−10px(child1border)
-
而child2的宽度则是和父元素一样大最终溢出了其父元素。
-
<math xmlns="http://www.w3.org/1998/Math/MathML"> c h i l d 2 最终的宽度值 : 600 p x = 600 p x ( 父元素宽度 ) child2最终的宽度值: 600px = 600px(父元素宽度) </math>child2最终的宽度值:600px=600px(父元素宽度)
四、 结论
width:100%
: 是子元素的 content 撑满父元素的content,如果子元素还有 padding、border等属性,或者是在父元素上设置了边距和填充,都有可能会造成子元素区域溢出显示;
width:auto
: 是子元素的 content+padding+border+margin 等撑满父元素的 content 区域。
> 所以,在开发中尽量还是选择```width:auto```,因为当从边距、填充或边框添加额外空间时,它将尽可能努力保持元素与其父容器的宽度相同。而```宽度:100%```将使元素与父容器一样宽。额外的间距将添加到元素的大小,而不考虑父元素。这通常会导致问题。