考虑以下例子:
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
color: #C0C0C0;
background-color: #202020;
display: flex;
flex-direction: column;
align-items: center;
}
* {
box-sizing: border-box;
}
.col {
display: flex;
flex-direction: column;
}
.row {
display: flex;
flex-direction: row;
background-color: gray
}
.wrap {
flex-wrap: wrap;
}
.align-center {
align-items: center;
}
.justify-center {
justify-content: center;
}
.gap {
gap: 20px;
}
input {
background-color:#202020 ;
border: 1px solid #C0C0C0 ;
border-radius: 5px;
padding: 12px 20px;
margin: 8px 0;
box-sizing: border-box;
}
.inputContainer {
max-width: 300px;
width: 100%;
}
.inputContainer > * {
width: 100%;
}
<form class="col gap align-center" style="width: 90vw" action="">
<div class="row wrap gap justify-center">
<div class="col inputContainer">
<label>expands:</label>
<input />
</div>
<div class="col inputContainer">
<label>parent:</label>
<input />
</div>
</div>
<div class="row wrap justify-center">
<div class="col inputContainer">
<label>even if:</label>
<input />
</div>
<div class="col inputContainer">
<label>no gap set:</label>
<input />
</div>
</div>
<div class="row wrap gap justify-center">
<div class="col inputContainer">
<label>alone works:</label>
<input />
</div>
</div>
<div class="row wrap gap justify-center">
<div class="col inputContainer">
<label>also with:</label>
<input style='padding: 0' />
</div>
<div class="col inputContainer">
<label>no padding:</label>
<input style='padding: 0' />
</div>
</div>
</form>
灰色背景展示了每一行的尺寸。如果行内元素在x轴上有padding,即使box-sizing是border-box,它也会扩展父元素的宽度。如果该行只有一个子元素,那么就没有问题。如果子元素没有设置padding,也没有问题。但是如果子元素设置了padding,就会扩展父元素的宽度。为什么呢?