




当使用 `display: flex` 布局让输入框(``)自适应剩余空间、按钮固定尺寸时,输入框可能意外溢出父容器——根本原因常是 `` 的默认 `size` 属性(值为 20)导致浏览器为其分配过宽的初始尺寸,覆盖 `flex: 1` 的弹性行为。
在 Flex 布局中,flex: 1(等价于 flex-grow: 1; flex-shrink: 1; flex-basis: 0)本应使 占据 .row 中除按钮外的所有可用空间。但问题在于:原生 元素具有隐式的 HTML size 属性(默认值为 20),它会强制浏览器按“可显示约 20 个字符宽度”来计算其基础尺寸(flex-basis),

✅ 正确解法不是仅靠 CSS 调整 flex,而是从语义和渲染源头控制输入框的初始尺寸:
以下是修复后的完整代码示例:
.container {
margin: auto;
padding: 1rem;
width: 30%;
box-sizing: border-box;
}
.row {
width: 100%;
display: flex;
align-items: center;
gap: 0.5rem; /* 可选:增加按钮与输入框间距,提升可读性 */
}
.row input {
flex: 1;
min-width: 0; /* 推荐添加:防止某些浏览器下 input 忽略 flex-basis=0 时的最小内容宽限制 */
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
}
.row button {
width: 40px;
height: 40px;
border: none;
background: #007bff;
color: white;
border-radius: 4px;
cursor: pointer;
}⚠️ 注意事项:
总结:Flex 布局失效往往不源于 CSS 逻辑错误,而来自 HTML 元素的隐式行为。理解并显式覆盖 的 size 属性,是解决此类“输入框撑出父容器”问题的关键一步。