CSS3弹性盒模型布局
最近在项目中大量使用到了弹性盒模型布局,在特殊情况下,对于容器中的元素进行排列、对齐以及分配空白空间,都在很大程度上为我们节约了处理的时间。
一、什么是弹性盒模型
采用Flex布局元素,称为Flex容器(flex contaniner),简称"容器"。他的所有子元素自动成为容器成员,称为Flex项目(flex item),简称“项目” 任何一个容器都可以被指定为Flex布局。
-
display: flex | inline-flex 定义弹性伸缩盒容器类型。
flex 将被作为弹性伸缩盒显示。
inline-flex 将被作为内联块级弹性伸缩盒显示。 -
注意:元素设为flex布局以后,子元素的float、clear和vertical-align属性将会失效。
二、主轴和交叉轴
- 容器默认存在两根轴:水平的主轴和垂直的交叉轴。主轴的起始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的起始位置叫做cross start,结束位置叫做cross end。
- 项目默认沿着主轴排列,单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
三、浏览器兼容性
- 元素属性兼容性查询网站:https://caniuse.com
四、CSS3 弹性盒子结构分析
- 弹性盒模型由弹性容器(Flex container)和弹性子元素(Flex item)组成。
- 弹性盒模型通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
- 弹性盒模型内包含了一个或多个弹性子元素。
- 每个容器默认情况下单行显示弹性子元素。
例:弹性子元素在一行内显示,从左到右:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>flex布局</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<style>
.flex-box{
display: flex;
flex-direction: row;
flex-wrap: wrap;
width: 1200px;
height: 500px;
background-color: #2c3e50;
}
.flex-box > .flex-item {
width: 200px;
height: 180px;
margin: 10px;
background-color:#e74c3c;
}
</style>
</head>
<body>
<div class="flex-box">
<div class="flex-item"></div>
<div class="flex-item"></div>
<div class="flex-item"></div>
<div class="flex-item"></div>
</div>
</body>
</html>
五、CSS3 弹性盒子属性
属性 | 描述 |
---|---|
flex-direction | 指定弹性容器中子元素排列方式 |
flex-wrap | 定义弹性盒子的子元素超出父容器时是否换行 |
flex-flow | 属性是flex-direction属性 和 flex-wrap属性 的简写 |
align-items | 定义弹性盒子元素在主轴(纵轴)方向上的对齐方式 |
align-content | 定义弹性盒子元素多跟轴线上的对齐方式 |
justify-content | 定义弹性盒子元素在主轴(横轴)方向上的对齐方式 |
1. flex-direction 属性
排列盒子的方向。
注意:如果元素不是弹性盒对象的元素,则 flex-direction 属性不起作用。
.flex-box { flex-direction: row | row-reverse | column | column-reverse; }
属性值
值 | 简述 |
---|---|
row | 默认值,元素将水平显示,横向从左到右排列。 |
row-reverse | 与 row 相同,倒序排列。 |
column | 元素将垂直显示,纵向从上到下排列 。 |
column-reverse | 与 column 相同,倒序排列。 |
2. flex-wrap 属性
flex-wrap 属性定义flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。
值 | 简述 |
---|---|
nowrap | 默认值。规定元素不换行。 |
wrap | 规定元素超出换行。 |
wrap-reverse | 规定元素在必要的时候换行,倒序排列。 |
.flex-box { flex-wrap: nowrap | wrap | wrap-reverse; }
可以取三个值:
- nowrap (默认):不换行。
- wrap:换行,第一行在上方。
-wrap-reverse:换行,第一行在下方。
3. flex-flow 属性
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
.flex-box { flex-flow: <flex-direction> <flex-wrap> }
4. align-items属性
align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。
值 | 简述 |
---|---|
stretch | 默认值。项目被拉伸以适应容器。 |
stretch | 项目位于容器的中心。 |
stretch | 项目位于容器的开头。 |
stretch | 项目位于容器的结尾。 |
stretch | 项目位于容器的基线上。 |
5. justify-content属性
justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。
值 | 简述 |
---|---|
flex-start | 默认值。项目左对齐。 |
flex-end | 项目右对齐。 |
center | 项目居中对齐。 |
space-between | 项目两端对齐,项目间隔相等 |
space-around | 项目两侧间隔相等,项目距离 = 2倍项目边距距离 |
六、弹性盒子 - 项目属性
属性 | 简述 |
---|---|
order | 定义项目的排列顺序。 |
flex-grow | 项目放大比例,默认为0 。 |
flex-shrink | 项目缩小比例,默认为1 。 |
flex-basis | 用于设置或检索弹性盒伸缩基准值。 |
flex | 复合属性,定义弹性盒子的子元素如何分配空间。 |
align-self | 定义的flex子项单独在侧轴(纵轴)方向上的对齐方式。 |
1. order属性
.flex-box .flex-item { order: <integer>; }
<integer>:用整数值来定义排列顺序,数值小的排在前面。可以为负值,默认为0。
2. flex-grow属性
.flex-box .flex-item { flex-grow: <integer>; }
<integer>:一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。
3. flex-shrink属性
.flex-box .flex-item { flex-shrink: <integer>; }
<integer>:一个数字,规定项目将相对于其他灵活的项目进行收缩的量。默认值是 1。
4. flex-basis属性
.flex-box .flex-item { flex-basis: <integer> | auto; }
<integer>:一个长度单位或者一个百分比,规定元素的初始长度。
auto:默认值。长度等于元素的长度。如果该项目未指定长度,则长度将根据内容决定。
5. flex属性
.flex-box .flex-item { flex: flex-grow flex-shrink flex-basis | auto | initial | inherit; }
属性 | 简述 |
---|---|
flex-grow | 一个数字,规定项目将相对于其他元素进行扩展的量。 |
flex-shrink | 一个数字,规定项目将相对于其他元素进行收缩的量。 |
flex-basis | 项目的长度。合法值:“auto”、“inherit” 或一个后跟 “%”、“px”、“em” 或任何其他长度单位的数字。 |
auto | 与 1 1 auto 相同。 |
none | 与 0 0 auto 相同。 |
initial | 设置该属性为它的默认值,即为 0 1 auto。 |
inherit | 从父元素继承该属性。 |
6. align-self属性
.flex-box .flex-item {
align-self: auto | stretch | center | flex-start | flex-end | baseline | initial | inherit;
}
允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。(默认值为auto,表示继承父元素的align-items属性)。如果没有父元素,则等同于stretch。
属性 | 简述 |
---|---|
auto | 默认值。元素继承了它的父容器的 align-items 属性。如果没有父容器则为 “stretch”。 |
stretch | 元素被拉伸以适应容器。 |
center | 元素位于容器的中心。 |
flex-start | 元素位于容器的开头。 |
flex-end | 元素位于容器的结尾。 |
baseline | 元素位于容器的基线上。 |
initial | 设置该属性为它的默认值。 |
inherit | 从父元素继承该属性。 |
转载:https://blog.csdn.net/Myan_/article/details/101979441