这是一个错误还是什么?
.page__header {
background: lightgreen;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-content: stretch;
align-items: stretch;
}
.page__header h1 {
flex: 1 0;
}
.page__header button {
order: 5;
}
.page__header div {
align-self: left;
order: 2;
position: relative;
}
.page__header div input {
min-width: 260px;
padding: 0 1em;
height: 100%;
text-transform: uppercase;
}

<div class='page__header'>
<h1>title</h1>
<div>
<input>
</div>
<button>some button</button>
</div>
&#13;
Chrome一如既往地拒绝合作。
有没有人知道如何强制输入来获取 flex 项容器的完全高度?
在Firefox上它遵循100%
高度。
答案 0 :(得分:2)
有谁知道如何强制输入获取其弹性项容器的整个高度?
以下是三个选项:
通过删除input
父级来使div
成为弹性项目。
<div class='page__header'>
<h1>title</h1>
<input>
<button>some button</button>
</div>
注意:
div
包裹时,input
不是灵活项目。它是flex项的子项,因此它忽略了flex属性。input
是.page__header
弹性容器的子级,默认的弹性属性(如align-items: stretch
)就会适用。将div
包裹input
一个弹性容器,将input
转换为弹性项目。
HTML回原版:
<div class='page__header'>
<h1>title</h1>
<div>
<input>
</div>
<button>some button</button>
</div>
CSS调整:
.page__header div {
/* align-self: left; */
order: 2;
position: relative;
display: flex; /* NEW */
}
.page__header div input {
min-width: 260px;
padding: 0 1em;
/* height: 100%; REMOVE */
text-transform: uppercase;
}
注意:
div
弹性项目加倍作为(嵌套)弹性容器,默认弹性属性(如align-items: stretch
)将应用于input
。height: 100%
已被删除,因为它会覆盖flex align-*
属性。使用百分比高度。
height: 100%
不适合您的原因是因为您没有为所有父元素指定高度,因为required by the spec使用百分比高度时。 (它在Firefox中运行的事实表明Chrome更贴近规范。)
如果你要使用百分比高度,并且元素没有绝对定位,那么你需要指定每个父元素的高度,包括body
和根元素({{ 1}})。
将此添加到您的CSS:
html
注意:
答案 1 :(得分:0)
您可以尝试将其取消流程:
input {
position: absolute;
right: 0;
}
.page__header {
background: lightgreen;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-content: stretch;
align-items: stretch;
}
.page__header h1 {
flex: 1 0;
}
.page__header div {
align-self: left;
order: 4;
position: relative;
}
.page__header div input {
min-width: 260px;
padding: 0 1em;
height: 100%;
text-transform: uppercase;
position: absolute;
right: 0;
}
&#13;
<div class='page__header'>
<h1>title</h1>
<div>
<input>
</div>
</div>
&#13;
但这可能会破坏你的布局。