各位大佬,在使用flex box 布局的时候,这样写。为什么只有水平居中而不能竖直居中?
给form元素加上flex以后
html
<div id="app">
<form id="form" action="">
<lebel><input type="text" /></lebel>
<lebel><input type="text" /></lebel>
<button id="btn" type="submit">submit</button>
</form>
</div>
css
#app {
display: flex;
justify-content: center;
height: 100%;
}
#form {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
效果图
你敢不敢把你<br>
标签给去掉。。。,样式中这么写,如下:
#app {
display: flex;
justify-content: center;
height: 100%;
}
#form {
display: flex;
flex-flow;column nowrap;//改变排列方向
justify-content: center;
align-items: center;
}
3 回答5.1k 阅读✓ 已解决
5 回答2k 阅读
2 回答1.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.2k 阅读
2 回答974 阅读✓ 已解决
研究了一下这个问题。我详细说下吧,给各位同学讲讲:
首先,我们在HTML中搞几个dom,结构如下:
然后我们使用flex布局来搞一下,按照网上的教程,基本都是这么个套路:
其中justify-content和align-items这两个属性是flex的关键属性,它俩掌管页面上X/Y轴的对齐方式(文档中叫做main-axis和cross-axis)具体大家可以搜索查看。
理论上来说,当我们完成这样的DOM结构和CSS样式表以后,我们的两个input就应该在打开的页面当中实现水平以及垂直居中。
但实际上,我们的页面中的实际显示是俩input框会贴在页面的顶部并水平居中,只是水平居中,并没有垂直居中。
在我看了大家的回答和自己的研究之后,这个问题的关键点在于:
这个DOM结构成了body的子节点,但是在DOM文档结构中,我们的body 并没有指定的height和width,所以整个文档流默认了这个DOM节点成了整个容器。因此,在这个页面里,id="app"的节点就是整个容器了。
所以,在我看来flex布局的方式,需要给容器指定一个固定的高度,或者给最外层的容器指定一个高度。
另外,如果有同学还是没明白的,建议可以看看MDN上关于DOM节点的文档,看完就会明白啦~~