Flexbox布局心得

Posted by leesx on March 11, 2016

flexbox 心得


  1. flex-direction 决定主轴的方向,主轴的方向可以是水平的,也可以是垂直的 justify-content决定主轴上项目的排列方式。
  2. align-content 决定辅轴元素的排列方式,只有当里面元素出现折行的时候,才会起作用,并且会覆盖align-items的属性,不起作用。
  3. 在使用flex布局的时候,需要解决的移动端的兼容问题,配合autoprefixer自动添加前缀,来处理(可以解决flex多版本的兼容问题)。对里面的项目元素使用flex:1,平分空间。
flex:1 相当于
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 0;
理解为:1.如果一个div元素中只有一个子元素设置了flex:1;那么它将占有剩余空间的全部,相当于100%;
2.如果有div包含有三个元素,其中两个分别设置了 flex:1; flex:2; 那么就是这两个元素,就是平分剩余空间,一个是1/3;一个是2/3;
总结: 占有几分之几,主要看,子元素中,共有多少个元素设置了flex:{n};属性;如果仅有一个元素设置了 flex:1;那就是它占有剩余空间的100%;这时候设置flex:2,3,4....其实都是一样的。


flex: 0 0 250px; 相当于给元素设置了宽度。
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 250px;
    

给div元素设置display:flex;默认宽度是100%;但是高度为0;

  • 要想div自适应窗口高度,就需要设置高度100%(前提html,body 的高度必须设置为100%)或者设置height:100vh;vh就是div的高度相对视窗的高度的百分比,100vh就是100%的高度;同样还是有vw -> div的宽度相对视窗口的宽度,90vw就是90%; 100vw;就是100%

flexbox 极好的DEMO

在线学习预览网址

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		*{
			margin:0;
			padding:0;
			box-sizing: border-box;
		}
		html,body{
			height: 100%;
		}
		.main{
			display: flex;
			height: 100vh;
			background: #675959;
		}
		.left{
			flex:0 0 20vw;
			background: #ccc;
		}
		.right{
			flex:1;
			display: flex;
			flex-direction: column;
			background: #aaa;
		}
		.box{
			font-size: 60px;
			color: #fff;
			padding: 10px;
		}
		.r-header{
			display: flex;
			height: 20vh;
			background: #333;
			font-size: 16px;
		}
		.r-header h4{
			flex:1;
		}
		.r-header .login{
			flex:1;
		}
		.r-header .info{
			flex:1;
		}
		.r-main{
			flex:1;
			background: #444;
		}
		.r-footer{
			background: #555;
			height: 10vh;
		}
		.box9{
			display: flex;
			/*justify-content: space-between;*/
			flex-wrap: wrap;
			margin:1px 0 0 1px;
		}
		.box9 div{
			display: flex;
			justify-content: center;
			align-items: center;
			flex-direction: column;
			width: 33.3333%;
			/*height: 30vh;*/
			background: #999;
			border:1px solid #ccc;
			margin:-1px 0 0 -1px;
		}

	</style>
</head>
<body>
	<div class="main">
		<div class="left box">aside</div>
		<div class="right box">
			<header class="r-header box">
				<h4>LOGO</h4>
				<div class="info">Info</div>
				<div class="login"><a href="">login Out</a><a href="">login In</a></div>
			</header>
			<div class="r-main box">Main
				<div class="box9 box">
					<div>1<span>女装</span></div>
					<div>2<span>男装</span></div>
					<div>3<span>家居</span></div>
					<div>4<span>小家电</span></div>
					<div>5<span>彩票</span></div>
					<div>6<span>智能设备</span></div>
					<div>7<span>美食</span></div>
					<div>8<span>旅游</span></div>
					<div>9<span>美妆</span></div>
				</div>
			</div>
			<footer class="r-footer box">Footer</footer>
		</div>
	</div>
</body>
</html>