深入浅析CSS3中的Flex布局整理


Posted in HTML / CSS onApril 27, 2020

Flexbox布局模块旨在提供一个更有效的方式,在一个容器里面去布局分配空间。即使容器的大小是未知的,或者动态变化的。

Flex 布局背后的主要思想是让容器能够改变其项目的宽度 / 高度(和顺序) ,以最佳地填充可用空间(主要是适应各种显示设备和屏幕大小)。 Flex 容器扩展项以填充可用的空闲空间或缩小它们以防止溢出。

最重要的是,flexbox 布局与常规布局(基于垂直方向的块布局和基于水平方向的内联布局)相比,具有方向不可知性。 虽然这些对于页面来说工作得很好,但是它们缺乏灵活性来支持大型或复杂的应用程序(特别是在方向改变、调整大小、拉伸、缩小等方面)。

原理

由于 flexbox 是一个完整的模块,而不是一个单独的属性,它涉及到很多东西,包括它的整个属性集。 其中一些被设置在容器上(父元素,称为“ flex container”) ,而另一些被设置在子元素上(称为“ flex item”)。如果“常规”布局基于块流方向和内联流方向,那么 flex 布局基于“ flex-flow 方向”。 请看一下规范中的这个图,解释一下 flex 布局背后的主要思想。

深入浅析CSS3中的Flex布局整理

项目将按照主轴(main-axis,从main start到main end)或交叉轴(从cross start到cross end)进行布局。

main-axis:主轴线,伸缩容器的主轴线是伸缩项目布局的主轴线。 注意,它不一定是水平的; 它取决于 flex-direction 属性

main-start, main-end:从 main-start 开始,到 main-end,flex 项目被放置在容器中

main-size:主尺寸,一个伸缩项目的宽度或高度,以主尺寸为准,是该项目的主尺寸。 Flex 项的主尺寸属性是“ width”或“ height”,以主尺寸中的值为准

cross axis:交叉轴,与主轴垂直的轴称为交叉轴。它的方向取决于主轴的方向

cross-start | cross-end:弹性线充满了项目,并放置到容器从cross-start延续到cross-end。

cross-size:flex item的宽度或高度,以交叉尺寸中的哪一个为准,就是项目的cross size。 cross size属性是交叉尺寸中的“width”或“height”中的任何一个。

父级属性(flex container)

 

深入浅析CSS3中的Flex布局整理

 1. flex-direction

flex-direction决定了主轴方向即flex item排列方向,除了默认的row方向之外,还可以纵向、反向(row-reverse/column-reverse)排列flex item

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}

css:

.flex-container {
  display: flex;
  flex-direction: row;
}

效果:

深入浅析CSS3中的Flex布局整理 

2. flex-wrap

如果我们不想在窗口变窄的情况下压缩flex item,而是让超出边界的flex item换行显示那我们可以设置flex container的flex-wrap

.container{
  flex-wrap: nowrap | wrap | wrap-reverse;
}

css:

.flex-container {
  display: flex;
  flex-wrap: wrap;
}

效果:在页面不断变小的时候,就会换行

深入浅析CSS3中的Flex布局整理 

3. flex-flow

flex-direction和flex-wrap可以合并为一个属性flex-flow,比如: flex-flow: row-reverse wrap

4. justify content

这定义了沿主轴的对齐方式。 当一行中的所有 flex项都不灵活,或者灵活但已经达到其最大大小时,它有助于分配额外的剩余可用空间。 当项目溢出线的时候,它也对项目的排列有一定的控制作用。

.container {
  justify-content: 
flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right
}

深入浅析CSS3中的Flex布局整理

css:

.flex-container {
  display: flex;
  justify-content: center;
}

效果:

深入浅析CSS3中的Flex布局整理 

5. align-items

实现了flex方向的居中后,垂直于主轴方向的居中可以用align-items实现。

.container {
  align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end
}

深入浅析CSS3中的Flex布局整理

css:

.flex-container {
  display: flex;
  align-items: center;
}

效果:

深入浅析CSS3中的Flex布局整理 

6. align-content

多行的情况下,将在内部对齐一个 flex 容器的线,类似于调整内容对齐主轴中单个项的方式。 如果flex只有一行,就不会起作用。

.container {
  align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline
}

深入浅析CSS3中的Flex布局整理 

子类属性(flex item)

1. order

默认情况下,flex 项按源顺序排列。 但是,order 属性控制它们在 flex 容器中出现的顺序。

css:

.one {
  order: 3
}

.two {
  order: 1
}

.three {
  order: 2
}

效果:

深入浅析CSS3中的Flex布局整理 

2. flex-grow

在上面所有的例子中,三个flex item只占据了flex container小部分空间,如果想让flex item占满flex container我们需要给flex item设置flex-grow属性。顾名思义,grow意味着增长,用于控制flex item的尺寸的伸展。

css:

.one {
 flex-grow: 2;
}

.two {
  flex-grow: 8;
}

.three {
  flex-grow: 2;
}

效果:

深入浅析CSS3中的Flex布局整理 

划重点

  • flex-grow如果是负数则无效
  • 每个item划分多余的空间并不是按flex-grow的比例来划分,是每个item自身的width * 自身的flex-grow的结果的比例来划分!亲测!!!

3. flex-shrink

与flex-grow相对的是flex-shrink, flex-shrink用于控制子元素尺寸超过flex container后,对子元素的压缩。 划重点:

flex-shrink如果是负数则无效 4. flex-basis

这定义了在分配剩余空间之前元素的默认大小。

.flex-item {
  flex-basis: <length> | auto; /* default auto */
}

auto 关键字的意思是“查看自身的width 或 height 属性”。

5. flex

这是 flex-grow、 flex-shrink 和 flex-basis 组合的简称。 第二个和第三个参数(伸缩和伸缩基础)是可选的。建议使用此简写属性,而不是设置单个属性。

.flex-item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

6. align-self

这允许重写单个 flex 项的默认对齐方式(或 align-items 指定的对齐方式)。

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

css:

.flex-container {
  display: flex;
  align-items: center;
}

.one {
  align-self: flex-end;
}

效果:

深入浅析CSS3中的Flex布局整理

到此这篇关于深入浅析CSS3中的Flex布局整理的文章就介绍到这了,更多相关css flex 布局内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
纯CSS3实现绘制各种图形实现代码详细整理
Dec 26 HTML / CSS
css3打造一款漂亮的卡哇伊按钮
Mar 20 HTML / CSS
利用CSS3实现单选框动画特效示例代码
Sep 26 HTML / CSS
详解利用css3的var()实现运行时改变scss的变量值
Mar 02 HTML / CSS
html5 canvas实现跟随鼠标旋转的箭头
Mar 11 HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
Jan 05 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
Apr 22 HTML / CSS
浅谈h5自定义audio(问题及解决)
Aug 19 HTML / CSS
html5简介_动力节点Java学院整理
Jul 07 HTML / CSS
HTML5 3D旋转相册的实现示例
Dec 03 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
Aug 21 HTML / CSS
css样式important规则的正确使用方式
Jun 10 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
Apr 26 #HTML / CSS
CSS实现聊天气泡效果
Apr 26 #HTML / CSS
css3 实现元素弧线运动的示例代码
Apr 24 #HTML / CSS
css3中less实现文字长阴影(long shadow)
Apr 24 #HTML / CSS
CSS3 中filter(滤镜)属性使用详解
Apr 07 #HTML / CSS
css3媒体查询中device-width和width的区别详解
Mar 27 #HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
Mar 27 #HTML / CSS
You might like
php字符串截取问题
2006/11/28 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
js实现轮播图特效
2020/05/28 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
python如何提升爬虫效率
2020/09/27 Python
Python 可视化神器Plotly详解
2020/12/26 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
土木工程毕业生自荐信
2013/09/21 职场文书
心理学培训心得体会
2016/01/22 职场文书
总结Python变量的相关知识
2021/06/28 Python
Vue操作Storage本地化存储
2022/04/29 Vue.js
python热力图实现的完整实例
2022/06/25 Python