flex布局教程(来源:阮一峰)

2023-11-03

flex布局非常适合移动端项目。(跟安卓端的线性布局很像。可参考)

flex布局是通过给父元素添加flex属性。来控制子元素的位置和排序方式。

一、Flex 布局是什么?

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为 Flex 布局。

.box{
  display: flex;
}

行内元素也可以使用 Flex 布局。

.box{
  display: inline-flex;
}

Webkit 内核的浏览器,必须加上-webkit前缀。

.box{
  display: -webkit-flex; /* Safari */
  display: flex;
}

注意设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效

二、基本概念

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

(总结:flex布局方向可设置为水平或者垂直布局。)

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

(总结:flex布局方向可设置为水平或者垂直布局。

如果设置为水平方向,则水平方向是主轴,垂直方向为交叉轴。 

如果设置排序方向垂直排序,则垂直方向为主轴,水平方向为交叉轴。)

flex方向

主轴

交叉轴

row

row(左->右)

column(上->下)

column

column(上->下)

row(左->右)

row-reverse

row(右->左)

column(上->下)

column-reverse

column(下->上)

row(左->右)

三、容器的属性(即父元素可用的属性)

以下6个属性设置在容器上。

flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content

3.1 flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)。

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

它可能有4个值。

row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。

3.2 flex-wrap属性

默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

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

它可能取三个值。

(1)nowrap(默认):不换行。

(2)wrap:换行,第一行在上方。

(3)wrap-reverse:换行,第一行在下方。

3.3 flex-flow

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

3.4 justify-content属性

justify-content属性定义了项目在主轴上的对齐方式。

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}

它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。

flex-start(默认值):左对齐
flex-end:右对齐
center: 居中
space-between:两端对齐,项目之间的间隔都相等。
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

3.5 align-items属性

align-items属性定义项目在交叉轴上如何对齐。

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。

flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline: 项目的第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

3.6 align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

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

该属性可能取6个值。

flex-start:与交叉轴的起点对齐。
flex-end:与交叉轴的终点对齐。
center:与交叉轴的中点对齐。
space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。

四、项目的属性(即子元素的属性)

以下6个属性设置在项目上。

order
flex-grow
flex-shrink
flex-basis
flex
align-self

4.1 order属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

.item {
  order: <integer>;
}

4.2 flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

.item {
  flex-grow: <number>; /* default 0 */
}

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

4.3 flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
  flex-shrink: <number>; /* default 1 */
}

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

负值对该属性无效。

4.4 flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

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

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

4.5 flex属性

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

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

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

4.6 align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

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

该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flex布局教程(来源:阮一峰) 的相关文章

  • CSS3 转换会立即发生吗?

    我有一个名为 artwork需要动画化 artwork webkit transition all 20s ease in transition all 20s ease in width 75 display block margin 0
  • JavaScript 跨浏览器单击 HTML DOM 元素

    是否有可用的普通 JavaScript 跨浏览器函数能够触发 HTML DOM 元素 包括 div 等非表单元素 上的单击事件 大多数走这条路的人要么最终开发自己的事件管理系统 这并不难 但很烦人 要么在可用的功能范围内工作 如果所有浏览器
  • 如何使用 jQuery 在弹出窗口中预览输入类型=“文件”中选定的图像? [复制]

    这个问题在这里已经有答案了 在我的代码中 我允许用户上传图像 现在我想在同一个弹出窗口中将所选图像显示为预览 我怎样才能使用 jQuery 做到这一点 以下是我在弹出窗口中使用的输入类型 HTML 代码
  • CSS:多属性选择器

    我想设置 电子邮件 和 密码 类型的表单输入样式 但不设置其他任何样式 我正在想象类似以下的事情 input type email type password 然而 属性选择器的工作方式似乎将其解释为 输入 其中类型同时是 电子邮件 and
  • Firefox 忽略背景大小的 css

    尝试使用背景大小 CSS 规则缩小图像 但 Firefox 3 5 似乎会忽略该规则 CSS privatejoker background aqua url styles images home privatejoker png no r
  • 输入和文本字段中的背景颜色

    我想更改表单文本和输入字段中的颜色背景 但是当我这样做时 它也会影响提交按钮 是否可以通过其他不影响按钮的方式来完成 我用过这段代码 input textarea background color d1d1d1 input type tex
  • CSS 中 calc() 的结果是什么

    我们现在已经开始使用calc 在CSS中 用于设置计算结果的宽度 例如 div div div div parent width 100px calcWidth width calc 100 3px height 100px backgro
  • 拖放区缩略图宽度图像大小

    如何更改上传图像的缩略图大小 我在我的javascript中尝试过thumbnailWidth 350 但是这不会增加缩略图大小 而缩略图只是看起来放大了 如何操作图像缩略图大小 HTML section section
  • 相对于变换元素的绝对定位元素位置

    我重新创建了我在模板中遇到的问题 有一个nav具有position relative 在 的里面nav有一个div有两个嵌套列表 其中一个列表的位置绝对固定在列表的底部nav 当div对其应用了变换 当 的时候div在绝对和相对定位的元素之
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • 使组合高度等于浏览器窗口的高度

    http featuredfotografer com http featuredfotografer com Codemirror div 与 header div 结合占用的高度超过了浏览器的高度 我怎样才能使它们的总高度达到浏览器窗口
  • React Native 上的文本缩进

    我需要缩进 React Native 段落的第一行 但使用常见的csstext indent财产 textIndent 与 React Native 不兼容 伪元素选择器也不兼容 例如 first line 有什么方法可以做到这一点而不用将
  • 有没有办法在 html 图像标签中显示位图数据? [复制]

    这个问题在这里已经有答案了 有没有办法在 HTML 元素中显示位图图像数据 例如 您有一个指向源文件的常规图像 如下所示 img src myImage png width 100 height 100 有没有这样的事情 img width
  • Symfony 2 使用 CSS 设置背景图片

    I want to put a background image for a menu in symfony But I can t figure out how to do it I managed to style a lot of t
  • 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数?

    因此 我尝试根据是否选中子复选框 使用 Knockout js 将类添加到元素 为此 我试图通过this作为我的函数的参数 目前 我的精简 DOM 结构如下 tr td td tr
  • 通过 jQuery 从输入类型=“文件”多个中删除文件

    我在使用 PHP 和 jQuery 上传文件时遇到问题 表单可以一次上传多个图像 这些图像可以在滑块中预览 表单还包含两个字段标题和描述 滑块通过 jQuery 工作 当用户通过单击选择文件来选择多个图像时
  • `ie9` - contenteditable false 在父级可编辑时不起作用

    我正在尝试制作内容可编辑和不可编辑的容器 用户可以通过 3 种方式使用它 他们可以将内容与non editable 他们可以将内容与editable 他们可以在不选择其中之一的情况下放置内容 可编辑 我正在努力实现以下目标 content
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏
  • 使用 JavaScript onclick 添加表格行

    我正在尝试使用 javascript 添加下面找到的完全相同的元素 我已经尝试了这里找到的所有解决方案 我什至尝试用php echo但没有运气 无需更改任何输入名称或类似内容 只需单击该按钮即可向表中添加另一行 仅此而已 这是该元素 tr

随机推荐

  • Hive 开窗函数 汇总

    开窗函数 普通的聚合函数聚合的行集是组 开窗函数聚合的行集是窗口 因此 普通的聚合函数每组 Group by 只返回一个值 而开窗函数则可为窗口中的每行都返回一个值 简单理解 就是对查询的结果多出一列 这一列可以是聚合值 也可以是排序值 开
  • Error:(4, 25) java: 找不到符号符号:类 xxx位置:程序包 xxx.xxx

    解决方法 用maven中的 clean 清理掉刚才打的jar包之后就不会报错了
  • easypoi导出复杂表头&动态表头(纯代码导出)

    想要导出的样式 看需求要用那种方式的 使用注解一样可以导出杂表头 我的表头是动态的所以用的代码写 Excel注解依赖
  • Linux 安装MySQL 8.0 超详细教程(mysql 8.0.30)

    目录 一 卸载mariadb 1 检查Linux是否安装了mariadb数据库 2 全部卸载 3 检查mariadb是否全部卸载 二 删除之前安装的mysql 1 查找以前是否装有mysql 2 查找之前安装的mysql的目录 并且删除my
  • 将APP程序发布到iPhone或iPad上去测试

    转载至 http www appshare cn thread 3123 1 1 html 图文的介绍版本 http fstoke me blog tag apple 绝大多数iPhone Developer Distribution 的代
  • Linux命令——统计文件数量

    统计文件夹下文件的总个数 不包括文件夹 ls l grep wc l 统计文件夹下所有文件 包括子文件 的总个数 ls lR grep wc l 统计文件夹下所有文件夹的个数 包括子文件夹 ls LR grep d wc l 具体解释 ls
  • 【微软】数组里找任意两个数之和的绝对值最小值

    数组里找任意两个数之和的绝对值最小值 思路 有一个整数数组 请求出两两之差绝对值最小的值 记住 只要得出最小值即可 不需要求出是哪两个数 方法1 暴力的方式 遍历所有的两个数的差 记录最小值 算法的复杂度O n2 方法2 两个数要想差的绝对
  • Innodb的LRU列表解析

    Innodb为了加快对磁盘中数据的操作 在操作磁盘上的数据时 会先把数据存放到一块名为Buffer Pool的内存缓冲池中 缓冲池以页为单位进行缓存 页大小为16K 由于受到机器限制 内存的大小远小于磁盘的大小 因此需要一种机制来淘汰非热点
  • .NET框架结构体系及工作原理

    1 NET框架运行在操作系统之上 是 NET最基础的框架 它提供了创建 部署和运行 NET应用的环境 主要包含公共语言运行时 CLR 和框架类库 NET Framwork 类库 FCL 并且支持多种开发语言 NET框架可以安装在Window
  • ppt使用教程记录

    ctrl 快速缩小字体 ctrl 快速放大字体 ctrl b 加粗 ctrl u 下划线 ctrl i 斜体 ctrl e 居中对齐 ctrl l 左对齐 ctrl r 右对齐 alt n x h 快速插入文字 alt n p d 快速插入
  • 前端绑定事件总结

    前言 前端开发很多情况下都需要绑定事件 不同的事件对应不同的触发方式 不同需求下需要合适的事件 最近在开发中遇到了绑定事件的问题 所以总结一下前端绑定事件 事件 元素天生具备的行为方式 和写不写JS代码没有关系 onclick不是事件 cl
  • 1. 实现一个单链表,链表初始为空,支持三种操作:

    1 向链表头插入一个数 2 删除第 k 个插入的数后面的数 3 在第 k 个插入的数后插入一个数 include
  • MKL 进行矩阵向量运算

    C source code is found in dgemm example c define min x y x lt y x y include
  • 安卓逆向-反编译-修改-打包-签名-解决夜神模拟器usb调试找不到安卓apk的问题,无法进行动态调试的解决方案。

    问题来由 在进行了一定时间的安卓逆向的学习 遇到了一个问题如图 这么多个安卓apk 打开开发者模式 调试应用只有一个 这不是离谱 按照之前的文章 这就不能进行动态调试 既然有了问题就要想解决办法 问了带我的师傅 我不是用你这个方法的 给我演
  • 【Python】Pyqt5 主窗口调用子窗口demo

    背景 通过主窗口的按钮调用其对应的窗口 代码比较简单 直接看 不懂的欢迎留言 一共两个代码 ui first py 实现的是主窗口 ui second py 实现的是子窗口 点击开始按钮调用子窗口 点击关闭退出窗口 ui first py
  • C#方法,可空类型,数组,集合,ArrayList排序,List,Hashtable和Dictionary

    C 方法 方法的定义 public void int Compare int a int b Program program new Program Console WriteLine Compare a b 方法的递归 public vo
  • java 实现word转pdf,并且实现内容替换,乱码处理,去水印

    1 引入依赖 aspose words的包需要从官网下载
  • JavaScript 使用image-compressor压缩图片

    首先引入min js文件 引入 import ImageCompressor from assets js image compressor min 压缩 uploadImage 图片小于80KB 直接上传 大于80KB 压缩后上传 if
  • 使用Spring StateMachine框架实现状态机

    Spring StateMachine框架可能对于大部分使用Spring的开发者来说还比较生僻 该框架目前差不多也才刚满一岁多 它的主要功能是帮助开发者简化状态机的开发过程 让状态机结构更加层次化 前几天刚刚发布了它的第三个Release版
  • flex布局教程(来源:阮一峰)

    flex布局非常适合移动端项目 跟安卓端的线性布局很像 可参考 flex布局是通过给父元素添加flex属性 来控制子元素的位置和排序方式 一 Flex 布局是什么 Flex 是 Flexible Box 的缩写 意为 弹性布局 用来为盒状模