1. 程式人生 > >flex與佈局(基本網格佈局、百分比佈局、一側固定一側自適應、聖盃佈局)

flex與佈局(基本網格佈局、百分比佈局、一側固定一側自適應、聖盃佈局)

1、基本網格佈局

分情況討論:

(1)如果所有的專案有相同的結構

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>flex-shrink壓縮</title>
		<style>
			.container{
				padding-top:20px;
				display: flex;
				width: 500px;/*當容器container的寬度200<專案item的寬度150*2  */
				height: 400px;
				background-color:#fff;
				 border: 2px solid #ddd;
			}
			.item{
				height: 30px;
				flex-grow: 1;
				flex-basis: 50%;
} .item1{ background-color: #ccc; } .item2{ background-color: #999; } </style> </head> <body> <pre> 希望兩個專案的寬度是相同的,評分整個容器的寬度。 </pre> <div class="container"> <div class="item item1">1</div> <div class="item item2">2</div> <div class="item item2">2</div> </div> </body> </html>
在上述案例程式碼中,由於item1,item2的flex-grow均為預設值,所以三個均平分。

2、百分比佈局

作用:希望多個專案的寬度的比例是固定的。

若為3個:item1、item2、item3

item1——flex:1 1 auto;

item2——flex:2 1 auto;

item3——flex:3 1 auto;

該佈局主要是以改變flex-grow的值,作為瓜分容器container寬度的標準。

例項程式碼如下所示(僅修改上述style部分程式碼):

.item{
				height: 30px;
			}
			.item1{
				background-color: #ccc;
				flex-grow:1;
} .item2{ background-color: #999; flex-grow:2; } .item3{ background-color: #eee; flex-grow:3; }

3、一側固定、一側自適應

該佈局採用的是上述講的專案屬性flex,一個設定為“固定的畫素”,一個設定為自適應auto。

.item{
				height: 30px;
				/*flex-grow: 1;
				flex-basis: 50%;*/
			}
			.item1{
				background-color: #ccc;
				flex:0 1 100px;
			}
			.item2{
				background-color: #999;
				flex:1 1 auto;
			}
			.item3{
				background-color: #ccc;
				flex:0 1 200px;
			}

4、導航兩端對齊

A.正常情況,即沒有使用flex彈性佈局時,佈局方式主要通過“margin:auto”來實現。

(1)“Auto”計算過程,即實現原理:

對於塊狀元素而言,要獨佔一行(再不給width情況下,它會充滿一整行);

如果給該元素設定了width,但在水平方向上,還有剩餘的空間(它的寬度比外部容器的寬度小),這個空     間就會被用來計算。

(2)當一側固定一側自適應時,auto就是整個剩餘空間,另一側是固定值

(3)當兩側都是auto時,即會平均分配剩餘空間。

思考:為什麼不能垂直方向居中呢?

對於元素而言,如果不設定佈局,即在垂直方向上,它不會鋪滿整個列,因此,垂直方向上,沒有多餘的列      賦予該元素。

例1:普通案例如下,即使用的是display:block,只能實現水平方向上的居中——

<style>
			.container{
				width: 500px;height: 400px;
				border: 2px solid #ddd;
display:block;
			}
			.item{
				width: 50px;height: 50px;
				background:#ccc;
				margin:0 auto;
				/*只能實現水平居中*/
			}
		</style>
<div class="container">
			<div class="item">
				居中
			</div>
		</div>


例2:使用flex進行彈性佈局時,

採用margin:auto,既可以實現四個方向上的正中間。

   (1)即在container中,使用display:flex 代替 display:block;

   (2)在item中,使用“margin:auto;”,即實現了四個方向居中

5、媒體查詢

當頁面的寬度<=600px時,樣式會產生效果,

(1)把主軸方向從預設的水平改為垂直方向;

(2)把專案在主軸方向排列位置關係,將“jusity-content:space-around”改為“jusity-content:flex-start

.container{
				padding-top: 20px;
				display: flex;
				width: 500px;height: 400px;
				background-color: #fff;
				border: 2px solid #ddd;
				justify-content: space-around;  /*容器兩端對齊*/
			}
			
			/*媒體查詢*/
			@media(max-width:600px){
				.container{
					flex-direction: column;  /*水平變垂直*/
					justify-content: flex-start;
				}
			}

6、聖盃佈局
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>flex-shrink壓縮</title>
		<style>
			body{
				display: flex;
				flex-flow: column nowrap;
			}
			body >*{
				text-align: center;
				color:#fff;
				font-size: 30px;
			}
			header,footer{
				background: #333;
				height: 50px;
			}
			section{
				display: flex;
				
			}
			nav{
				width: 100px;
				background: #aaa;
				flex:0 1 100px;
			}
			.main{
				width: 500px;
				background: #ccc;
				flex: 1 1 auto;
			}
			.sliderbar{
				width: 150px;
				background: #eee;
				flex:0 1 150px;
				order:-1;   /*注意:用於調整次序*/
			}
		</style>
	</head>
	<body>
		<header>
			頭部
		</header>
		<section>
			<nav>導航</nav>
			<div class="main">主體部分
			<p>item1</p>
			<p>item1</p>
			<p>item1</p>
			<p>item1</p>
			</div>
			<div class="sliderbar">側邊欄</div>
		</section>
		<footer>
			尾部
		</footer>
	</body>
</html>

7、圖文混排

(1)搭建結構

(2)設定樣式