css中弹性布局(也叫flex布局)
Flexbox是最新版本的CSS3中引入的一种强大且兼容性好的布局方法,可以很容易的处理好页面上的元素布局,并且创建可以自动缩小和放大页面的动态用户界面。
由于总是记不住每个属性表示的意思,也因为刚实习的原因,用的地方不多不够熟练,在此梳理一遍加深记忆。
- 弹性盒子由弹性容器(也就是父元素 flex container)和弹性子元素(flex item)组成。
- 将一个元素定义为弹性容器,设置
display:flex;或者display:inline-flex;(webkit内核的浏览器必须加上-webkit)
- 我们先定义一个弹性容器和三个子盒子,呈现的样式如下:
.container {
display: flex;
width: 400px;
height: 250px;
background-color: pink;
}
.item {
width: 100px;
height: 100px;
margin: 10px;
background-color:red;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
容器默认有两根轴:水平的和垂直的,水平的叫主轴,垂直的叫交叉轴
容器的属性主要有6个
- flex-direction:决定主轴的排列方向(子元素的排列方向)
在父元素中设置属性
:flex-direction:row | row-reverse | column | column-reverse;
1.flex-direction:row;默认属性,从左往右水平方向布局
2.flex-direction:row-reverse;:从右往左水平方向布局
3.flex-direction:column;从上往下垂直方向布局
flex-direction:column-reverse;:从下往上垂直方向布局
- flex-wrap:决定子元素是否换行
在父元素中设置属性:
flex-wrap:nowrap | wrap | wrap-reverse;
flex-wrap:nowrap;默认不换行,所有元素都在一行显示。(如果所有子元素所在的宽度超过了父元素容器,也会在一行显示,但是子元素的大小变了)
flex-wrap: wrap:换行,超过的子元素在第二行按顺序显示
flex-wrap:wrap-reverse;换行,第一行在下面顺序显示
- flex-flow:上面两个元素的简写,默认值是row nowrap(从左到右水平布局并且在一行显示)
- justify-content:决定子元素在水平方向上的对齐方式。
父元素可以设置:
justify-content: flex-start | flex-end | center | sapce-between | space-around;
justify-content: flex-start:默认值,以左边为对齐方式
justify-content: flex-end;:以右边为对齐方式
justify-content:center;:居中显示,但是不能决定垂直方向
4.justify-content:space-between;:两端对齐,项目之间的间隔都相等
justify-content:space-around;:每个项目两侧的间隔相等。所以,项目之间的间隔比边框的间隔大一倍。
- align-item:定义子元素在垂直轴上的对齐方式
父元素可以设置:
align-items: flex-start | flex-end | center | baseline |stretch;
align-items: flex-start;:以垂直方向的上沿对齐
align-items: flex-end;:以垂直方向的下沿对齐
align-items: center;:垂直方向居中对齐
align-items: baseline:子元素第一行文字的基线对齐
align-items: stretch;:如果子元素没有设置高度或者设为auto,将占满整个容器的高度。默认值
- align-content:定义了多根轴线的对齐方式,如果只有一根轴线这个属性就不起作用
父元素可以设置:
align-content: flex-start | flex-end | center | space-between | sapce-around | stretch;:该属性应用的比较少,暂时先不记录
子元素的属性6个
- order:定义子元素的排列顺序。数值越小,排列越靠前,默认为0
- flex-grow:定义子元素的放大比例,默认为0,如果存在剩余空间也不放大。 没有放大的效果:
放大3倍的效果:
- flex-shrink:缩小元素比例,默认为1,如果空间不足,该项目将缩小。
- flex-basis:定义了在分配多余空间之前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间,他的默认值为auto,项目的本来大小。
- flex: 是flex-grow flex-shrink flex-basis的简写,默认值为 0 1 auto
我们通常在项目中使用的是:flex : 1;----->表示的是均匀分配每个子元素(实则展开为:flex: 1 1 0)
- align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch. 该属性可能取6个值,除了auto,其他都与align-items属性完全一致.