欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Flexbox 灵活方框模型详解

最编程 2024-04-29 14:00:07
...

导读

  • Flexbox的来历
  • 基础概念(重点)
  • 弹性容器属性(重点)
  • 弹性项目属性(重点)
  • 应用场景
弹性盒模型

Flexbox的来历

2017年10月,W3C推荐使用Flexbox模块写布局。在此之前,我们的布局模型有三种:流动布局、浮动布局、定位布局。
以上三种布局中,父元素对子元素几乎没有什么掌控力,父子元素之间的关系不够紧密。随着移动互联网时代的到来,传统布局在多种显示设备和尺寸上显得不够灵活,我们需要一种更高效的布局方式,来处理元素的布局以及元素之间的空间的分配。“弹性盒模型”应用而生。

核心思想
弹性盒模型的核心思想是赋予父元素一种超能力,让父元素对子元素拥有掌控力:

  • 控制子元素的尺寸
  • 控制子元素的位置
  • 控制子元素的排序
  • 控制子元素之间的空白

基础概念

flexbox.png

弹性盒模型 - 弹性盒模型它指是一套css属性规则,而不是一个css属性。具体来讲,分为两组属性: 弹性容器属性 和 弹性项目属性
弹性容器 - 被设置了display:flex的元素成为弹性容器。弹性容器对子元素拥有掌控力。
弹性项目 - 弹性容器内的子元素被称为弹性项目。弹性项目受到父元素的控制。
主轴 - 弹性项目的主要排列方向。
垂直轴 - 垂直于主轴的轴, 垂直轴是弹性项目的次要排列方向。
主轴起点 - 弹性项目沿主轴排列的起始点。
主轴终点 - 弹性项目沿主轴排列的终点。
垂直轴起点 - 弹性项目沿垂直轴排列的起始点。
垂直轴终点 - 弹性项目沿垂直轴排列的终点。

弹性盒模型属性

父元素属性

1. display

display:flex 创建弹性容器

定义
Display属性用于定义弹性容器。

语法

.container{
  display:flex | inline-flex;
}
  • flex : 定义块级弹性容器
  • inline-flex: 定义行内弹性容器

2. flex-direction

flex-direction 设置主轴方向

定义
flex-direction用于创建主轴,弹性项目主要沿主轴方向排列。

语法

.container{
  flex-direction: row | row-reverse | column | column-reverse
}
  • row: 默认值。把主轴设为水平轴,弹性项目从左向右水平排列。
  • row-reverse:把主轴设为水平轴。弹性项目从右向左水平排列。
  • column:把主轴设为纵轴。弹性项目从上向下垂直排列。
  • column-reverse:把主轴设为纵轴,弹性项目从下向上垂直排列。

3. flex-wrap

flex-wrap 设置弹性项目换行方式

定义
flex-wrap用于定义弹性项目是否换行及换行方式。

语法

.container{
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap: 默认值。不换行。所有弹性项目显示在一行内。
  • wrap: 换行。弹性项目向垂直轴终点方向换行。
  • wrap-reverse: 换行。弹性项目向垂直轴起点方向换行。

4. justify-content

justify-content 定义主轴排列方式

定义
justify-content用于定义弹性项目沿主轴的排列方式。

语法

.container{
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly
}
  • flex-start: 默认值。弹性项目向主轴起点堆积。
  • flex-end:弹性项目向主轴终点堆积。
  • center : 弹性项目向主轴中心堆积。
  • space-between:空白均匀分布在任意两个弹性项目之间。(第一个弹性项目在主轴起点,最后一个弹性项目在主轴终点)
  • space-around:空白均匀分布在每个弹性项目两侧。
  • space-evenly: 空白平均分布在任意两个弹性项目之间。(包括首尾弹性项目)

5. align-items

align-items 定义垂直轴的行内排列方式

定义
align-items 用于定义弹性项目沿垂直轴的行内排列方式。

语法

.container{
  align-items: flex-start | flex-end | center | stretch | baseline
}
  • stretch : 默认值,拉伸弹性项目的高度,填充弹性容器的高。
  • flex-start: 让弹性项目在当前行内向垂直轴起点堆积。
  • flex-end: 让弹性项目在当前行内向垂直轴终点堆积。
  • center:让弹性项目在当前行内向垂直轴中点堆积。
  • baseline: 让弹性项目在当前行内向对齐到基线。

6. align-content

align-content 定义垂直轴的排列方式

定义
align-content用于定义弹性项目沿垂直轴的排列方式。

语法

.container{
  align-content: normal | flex-start | flex-end | center | stretch | space-between | space-around |space-evenly;
}

  • normal: 弹性项目被堆积在它们的默认位置,就好像没有设置 align-content 值一样。
  • flex-start: 默认值。弹性项目向垂直轴起点堆积。
  • flex-end:弹性项目向垂直轴终点堆积。
  • center : 弹性项目向垂直轴中心堆积。
  • space-between:空白均匀分布在任意两个弹性项目之间。(第一个弹性项目在垂直轴起点,最后一个弹性项目在垂直轴终点)
  • space-around:空白均匀分布在每个弹性项目两侧。
  • space-evenly: 空白平均分布在任意两个弹性项目之间。(包括首尾弹性项目)

注意:该属性只对多行弹性容器生效,即flex-wrap 设置为 wrap 或 wrap-reverse。单行弹性容器无效,即 flex-wrap 设置为no-wrap。

7. gap属性

gap 设置弹性项目之间的空白

定义
gap属性用控制弹性项目之间的空白大小。

语法

.container{
  gap:  10px;/*单行:控制水平间距*/
  gap:  10px;/*单行:控制水平和垂直间距*/
  gap: 10px 20px; /* 水平间距 垂直间距*/
}

注意:1. 该属性仅控制非边缘弹性项目。(不控制第一个和最后一个弹性项目) 2.只有当该空白变得足够小时,间距才会生效。

子元素属性

1. order属性

2. flex-grow属性

3. flex-shrink属性

4. flex-basis属性

5. align-item属性

6. flex属性

简写形式 完整形式
默认值 flex : 0 1 auto;
flex : 1 flex : 1 1 0%;
flex: auto flex : 1 1 auto;
flex : none flex: 0 0 auto;
flex : 0% flex : 1 1 0%;
flex : 2 3 flex : 2 3 0%;
flex : 2 3px flex : 2 1 3px;