flex和box、flexbox高度自适应常见坑

感情迁移 提交于 2020-03-02 00:39:11

display:box; 是老语法,display:flex;是新语法。flexbox是只有ie10才有的语法,ie11可以用flex。

box支持的浏览器更多,flex旧版本浏览器不支持。

综合写法

display:-moz-box; 
display:-webkit-box; 
display:-ms-flexbox;
display:-webkit-flex;
display:flex;

仅仅只有5条,注意:没有box也没有-moz-flex和-o-flex

 

说一下高度自适应

如图上下两部分,上面部分适应内容的高度,下面部分填充剩余部分。

当下面内容不够时,在下面部分出现滚动条

html部分

<div id="all">
	<div id="header">
		<p>123</p>
		<p>123</p>
	</div>
	<div id="main">
		<p>123</p>
		<p>123</p>
		<p>123</p>
		<p>123</p>
		<p>123</p>
		<p>123</p>
	</div>
</div>

CSS部分

*{margin:0;padding:0;}
html,body{height:100%;}
#all{
	width:100%;/*第4个坑*/
	height:100%;
	
	display:-moz-box; 
	display:-webkit-box; 
	display:-ms-flexbox;
	/*display:-webkit-flex;*//*第1个坑*/
	display:flex;
	
	-moz-box-orient:vertical;
	-webkit-box-orient:vertical;
	-ms-flex-direction:column;
	flex-direction:column;
	
	overflow:hidden;/*第2个坑*/
	background:#000;
}
#header{
	overflow:auto;/*用于固定高度的情况*/
	flex-shrink:0;/*第3个坑*/
	
	background:#fcc;
}
#main{
	overflow:auto;

	display:-moz-box;/*第5个坑*/
	-moz-box-orient:vertical;/*第5个坑*/
	
	-moz-box-flex:1;
	-webkit-box-flex:1;
	-ms-flex:1;
	flex-grow:1;
	
	background:#ccf;
}

1.实际上-webkit-flex的高度适应有问题,不如不要,然后降级成-webkit-box

2.-webkit-box内部内容超出出现滚动条时,实际占用的体积没有被截取,导致出现2重滚动条,外层加上overflow:hidden可以解决。

3.注意头部份有flex-shrink

flex-shrink属性指定了flex元素的收缩规则,0表示不可收缩,默认值:1。

但是在flex-grow(box-flex)未设置时,大部分浏览器都不可收缩,部分浏览器会收缩。所以要设置为0才能保证兼容。

4.-moz-box不像block,宽度不会占满,所以要width:100%

5.在-moz-box中,子元素也要-moz-box才能自适应。为了看起来像普通的block所以加上-moz-box-orient:vertical。

6.在-moz-box中,内部只能继续box布局,无法使用position:absolute,position:absolute定位会相对于文档。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!