为什么要学习flex布局?传统布局和flex布局区别
简述:
传统布局优点:兼容性强,基本上所有浏览器都适应
传统布局缺点:布局繁琐,在移动端不能很好的布局
flex布局优点:操作方便,布局极为简单,在移动端应用广泛
flex布局缺点:PC端支持性较差。IE11部分支持和低版本不支持
flex布局优势:行内元素也可以使用flex布局,用flex布局后,不区分行内元素(inline)和块级元素(block),且使用flex布局后,flex布局的元素会自适应页面(随着页面大小改变而改变)
使用flex进行布局后,父级称为flex容器,简称容器,父级的所有子元素自动成为容器成员,称为flex项目,简称项目
flex布局原理:通过给父盒子添加flex属性来控制子盒子的位置和排序方式
flex布局父项常用属性
flex-direction:设置主轴的方向
justify-content:设置主轴上的子元素排列方式
flex-wrap:设置子元素是否换行
align-content:设置侧轴上的子元素的排列方式(多行)
align-items:设置侧轴上的子元素排列方式(单行)
flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap
(1) flex-direction设置主轴方向
row;(默认值)从左往右
row-reverse;从右往左
column;从上到下
column-reverse;从下到上
flex-direction代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>flex-direction</title>
<style>
*{
margin: 0;
padding: 0;
}
#box{
/* 设置为flex布局 */
display: flex;
/* 设置主轴方向 */
flex-direction:row-reverse;
width: 700px;
height: 240px;
border:1px solid red;
}
#box>span{
width: 120px;
height: 100px;
margin-left: 20px;
margin-right: 20px;
background-color: aqua;
}
</style>
</head>
<body>
<span id="box">
<span>1</span>
<span>2</span>
<span>3</span>
</span>
</body>
</html>
注:如果设置主轴为x轴那默认侧轴为y轴
(2)justify-content设置主轴元素上排序方式
1.flex-start;(默认)从左往右
2.flex-end;从右往左
3.center;居中
4.space-around;平分剩余空间(平分后剩余)
5.space-between;先贴两边再平分剩余空间
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>flex-direction</title>
<style>
*{
margin: 0;
padding: 0;
}
#box{
/* 设置为flex布局 */
display: flex;
/* 设置主轴方向 */
flex-direction:row;
/* 设置主轴排序方式 */
justify-content:space-between;
width: 700px;
height: 240px;
border:1px solid red;
}
#box>span{
width: 120px;
height: 100px;
margin-left: 20px;
margin-right: 20px;
background-color: aqua;
}
</style>
</head>
<body>
<span id="box">
<span>1</span>
<span>2</span>
<span>3</span>
</span>
</body>
</html>
注:设置主轴方向和设置排序方式是不一样的
主轴排序从右到左:flex-direction:row-reverse
排序方式从右到左justify-contnet:flex-end
(3)flex-wrap;默认情况下,项目都是排在一条线上(又称“轴线”)上,flex-wrap属性定义,flex布局中默认是不换行的,如果超出,则每个项目缩减宽度
1.nowrap;(默认)不换行
2.wrap;换行
(4)align-items;设置侧轴排列方式在子项为单项(不换行)时使用
1.flex-start;(默认)从上到下
2.flex-end;从下到上
3.center;垂直居中
6.stretch;拉伸
注:使用stretch;进行拉伸操作子项不需要设置高
(5)align-content;设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的
1.flex-start;(默认)从上到下
2.flex-end;从下到上
3.centerl居中
4.space-around;子项在侧轴平分剩余空间
5.space-between;子项在侧轴先分布在两头,在平分剩余空间
6.stretch;设置子项元素高度平分父元素高度
注:使用stretch;进行拉伸操作子项不需要设置高
(6)flex-flow;属性是flex-direction和flex-wrap属性的复合属性
row wrap;从左到右,换行
flex布局子项常用属性
(1)align-self:控制子项自己在侧轴上的排列方式,该属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
1.flex-start;默认值,从上到下
2.flex-end;从下到上
3.center;挤在一起居中(垂直居中)
4.stretch;拉伸。注:stretch在子项宽高有值的情况下不会拉伸
(2)order;该属性定义项目排列顺序,数值越小越靠前,默认是0;注意和z-index不一样
order:-1;
注意z-index是层次,order是排列顺序
注:文章 如有雷同,纯属巧合