Flex
是Flexible Box
的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为Flex
布局: .box{display:flex;}
行内元素也可以使用Flex布局: .box{display:inline-flex;}
Webkit
内核的浏览器,必须加上-webkit
前缀: .box{display:-webkit-flex;/* Safari */display:flex;}
注意,设为Flex
布局以后,子元素的float、clear
和vertical-align
属性将失效。
上中下布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>flex 布局</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
header{
height:200px;
background:#C4DFEB;
}
footer{
height:200px;
background:pink;
}
.container{
display:flex;
display: -webkit-flex;
flex-direction:column;
height:100vh;
}
main{
flex-grow:1;
}
</style>
</head>
<body>
<div class="container">
<header>header</header>
<main>main</main>
<footer>footer</footer>
</div>
</body>
</html>
(1)flex-direction:column;使整体布局从上到下排列
(2)flex-grow:1;使main元素填充剩余空间。
左中右三列布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flex 布局</title>
<style>
*{
padding:0;
margin:0;
}
body,html{
width: 100%;
height: 100vh;
min-width: 800px;
}
.container{
width: 100%;
height: 100vh;
display:flex;
display: -webkit-flex; /* Safari */
flex-direction: row;
}
.container>.left,.right{
width: 200px;
height: 100vh;
background-color: #ccc;
}
.container>.item{
flex:1;
height:100%;
background: #abcdef;
}
</style>
</head>
<body>
<div class="container">
<div class="left">left</div>
<main class="item">main</main>
<div class="right">right</div>
</div>
</body>
</html>
flex-direction:row;使整体布局从左到右排列
圣杯布局
圣杯布局格式要求:
页面从上到下为头部、中部、脚部;头部、脚部定高,不可伸缩;中部高度自适应。
中部三列式布局:左右两列定宽,不可伸缩;中间内容区自适应。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flex 布局</title>
<style>
*{
padding:0;
margin:0;
}
body,html{
height: 100vh;
display:flex;
/* 改变主轴的排列方式 */
flex-direction: column;/*布局从上向下*/
min-width: 800px;
}
header,footer{
display: flex;
display: -webkit-flex; /* Safari */
background: #ccc;
width: 100%;
height: 100px;
justify-content: center;/*水平居中*/
align-items: center;/*垂直居中*/
}
.container{
/*
flex:1指的是:中部区域自由伸缩
*/
flex:1;
display: flex;
}
.container>.left{
flex:0 0 150px;/* 左右两列固定宽 */
}
.container .content{
flex: 10;
background: pink;
}
.container>.right{
flex:0 0 150px;/* 左右两列固定宽 */
}
</style>
</head>
<body>
<header> <p>Header</p> </header>
<div class="container">
<div class="left"></div>
<main class="content"></main>
<div class="right"></div>
</div>
<footer> <p>Footer</p> </footer>
</body>
</html>