弹性布局-更优秀的Flex

2023-11-07

Flex布局详解

浮动布局的优缺点

  • 图文的环绕显示;
  • 浮动元素 同行显示;
  • 适配性更好;
  • 忘记清浮动-高度坍塌;

flex布局的优缺点

  • IE10以下不支持;
  • 用来做布局的,很方便;

flex布局

  • flex/flexible(弹性布局)

  • 移动端用的最多,PC越来越多;


两个重要概念

  • 外边开启flex布局的元素叫 flex container;
  • flex container 里边的直接子元素叫做 flex items;

如何开启flex布局

设置display属性为flex或者inline-flex

<html>
    <title></title>
    <style>
    .box {
        /* 两个值:
        flex:块级 block-level形式的flex container
        inline-flex:行内 inline-level形式的flex container
         */
        display:flex;
    }
    </style>
    <body>
        <div class="box">
            <div></div>
            <div></div>
        </div>
    </body>
</html>

flex布局模型

flex container:

  • main axis(主轴)

    • main size
    • main start
    • main end
  • cross axis(交叉轴)

    • cross size
    • cross start
    • cross end

flex item


主轴是会的:

  • 主轴/交叉轴方向改变;
  • 主轴、交叉轴交换;

flex相关的属性

应用在flex container上的CSS属性

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

应用在flex items上的CSS属性

  • flex
  • flex-grow
  • flex-basis
  • flex-shrink
  • order
  • align-self
  • margin(补充属性,详见文末)

flex container属性详解

flex-direction

flex items 默认是沿着main axis从main strat 向 main end方向排布;

flex-direction决定了主轴的方向,默认值row,共四个值;

  • row:从左-右
  • row-reverse:从右-左
  • column:从上-下
  • column-reverse:从下-上

row

1 2 3

row-reverse

3 2 1

column

1 - -
2 - -
3 - -

column-reverse

3 - -
2 - -
1 - -

justify-content

justify-content 决定了flex items在main axis上的对齐方式,共6个值:

  • flex-start(默认值):与main start对齐
  • flex-end:与main end对齐
  • center:居中对齐
  • space-between:

    flex items 之间的距离相等;
    与main start、main end两端对齐;

  • space-evenly:

    flex items 之间距离相等;
    flex items与main start、main end 之间的距离 等于flex items之间的距离;

  • space-around:

    flex items之间距离相等
    flex items与main start、main end之间的距离是flex items之间距离的一半;

注:通过补空元素可以实现多行的间距自然等分;


示意:

flex-start

1 2 3 - - -

flex-end

- - - 1 2 3

center

- - 1 2 3 - -

space-between

1 - 2 - 3

space-evenly

- 1 - 2 - 3 -

space-around

- 1 - - 2 - - 3 -

align-items

align-items 决定了flex items 在cross axis上的对齐方式,共6个值;

  • normal(默认值):在弹性布局中,效果和stretch一样;如果设置了侧轴方向高度效果就和flex-start一样;
  • stretch:当flex items在cross axis方向的size为auto时(没设值),会自动拉伸至填充flex container(的高度);

    前提是不能指定高度;

  • flex-start:与cross start对齐;
  • flex-end:与cross end对齐;
  • center:居中对齐;
  • baseline:与基线对齐(第一个item的内容底部->基线,且各个item的基线都是以第一行内容为准);

示意:

normal

stretch

1 2 3
1 2 3
1 2 3

flex-start

1 2 3
- - -
- - -

flex-end

- - -
- - -
1 2 3

center

- - -
1 2 3
- - -

baseline

- - -
1 2 3
- 2 3
- 3 -

flex-wrap

flex-wrap 决定了flex container是单行还是多行,共3个值:

  • nowrap(默认):单行;

    多的item会引起,全部items的宽度压缩;

  • wrap:多行;
  • wrap-reverse:反向多行(第一行在底下,后续行依次向上,items次序不变);

示意:

nowrap

1 2 34 56
- - -
- - -

wrap

1 2 3
4 5 6
- - -

wrap-reverse

- - -
4 5 6
1 2 3

flex-flow

flex-flow是flex-direction || flex-wrap的缩写属性,顺序任意;

flex-flow: row-reverse wrap;

align-content

align-content 决定了 多行flex items 在 cross axis上的对其方式,和justify-content类似,共7个值:

  • stretch(默认值):不设侧轴方向高度,拉伸;
  • flex-start:与cross start对齐;
  • flex-end:与cross end对齐;
  • center:居中对齐;
  • space-between:

    flex items 之间距离相等;
    与cross start、cross end两端对齐;

  • space-around:

    flex items之间的距离相等;
    flex items与cross start、cross end之间的距离是flex items之间距离的一半;

  • space-evenly:

    flex items之间的距离相等;
    flex items与cross start、cross end之间的距离等于flex items之间的距离;


示意:

stretch

无高度

1 2 3
1 2 3
4 5 6
4 5 6

有高度

1 2 3
- 2 -
4 5 6
4 - -

flex-start

1 2 3
4 5 6
- - -
- - -

flex-end

- - -
- - -
1 2 3
4 5 6

center

- - -
1 2 3
4 5 6
- - -

space-between

1 2 3
- - -
- - -
4 5 6

space-around

- - -
1 2 3
- - -
- - -
4 5 6
- - -

space-evenly

- - -
1 2 3
- - -
4 5 6
- - -

flex items属性详解

order

order 决定了flex items的排布顺序;

  • 可以设置任意整数(正整数、负整数、0),值越小,越会排到前面;
  • 默认值是0;

示意:

默认

1 2 3

2的order设为10,1的order设为50,3的order设为100

2 1 3

align-self

通过align-self可以覆盖flex container设置的align-items;

  • auto(默认值):遵从flex container的align-items设置;
  • stretch、flex-start、flex-end、center、baseline,效果和align-items的值一致;

flex-grow

flex-grow 决定了flex items如何扩展:

  • 可以设置任意非负数字(正小数、正整数、0),默认值是0;
  • 当flex container在main axis方向上有剩余size时,flex-grow属性才会生效;

如果所有flex items的flex-grow总和sum超过1,每个flex item扩展的size为:

  • flex container的 剩余size * flex-grow/sum;
  • 即,按照百分比瓜分剩余size,分给每个item;

如果所有flex items的flex-grow 总和不超过1,每个flex item扩展的size为:

  • flex container 的 剩余size * flex-grow;
  • 即,按比例瓜分剩余size,但一定还有剩余;

注:flex items扩展后的最终size不能超过设置的max-width/max-height;


示意:

默认

1 2 3 - - -

1的flex-grow设为2,2的flex-grow设为2,3的flex-grow设为1;

1 1 2 2 3

1的flex-grow设为0.2,2的flex-grow设为0.2,3的flex-grow设为0.2;

1 1(0.2) 2 2(0.2) 3 3(0.2) - -

flex-shrink

flex-wrap:nowrap;需要设置为不换行;

flex-shrink决定了flex items如何收缩:

  • 可以设置任意非负数字(正小数、正整数、0),默认值是1;
  • 当flex items在main axis方向上超过了flex container的size,flex-shrink属性才会生效;

如果所有flex items的flex-shrink总和sum超过1,每个flex item收缩的size为

  • flex items超出 flex container的size*flex-shrink/sum;

如果所有flex items的flex-shrink综合sum不超过1,每个flex item收缩的size为:

  • flex items超过flex container的size*flex-shrink;

注:收缩的宽度不能小于内容的宽;
注:flex items收缩后的最终size不能小于设置的min-width/min-height;


示意:

默认

1 2 3 - - -

1的flex-shrink设为2,2的flex-shrink设为2,3的flex-shrink设为1;

1(-0.4*size) 2(-0.4*size) 3(-0.2*size)

1的flex-shrink设为0.2,2的flex-shrink设为0.2,3的flex-shrink设为0.2;

1(-0.2*size) 2(-0.2*size) 3(-0.2*size) 超出显示0.4*size

flex-basis

flex-basis 用来设置flex items在main axis方向上base size;

  • 设置主轴上item宽度的大小;
  • 默认值是auto,也可以设置具体的宽度;

决定flex items最终base size的因素,从优先级高到低:

  • max-width/max-height/min-width/min-height
  • flex-basis
  • width/height
  • 内容本身的size

flex

flex是 flex-grow || flex-shrink || flex-basis 的简写(放大 缩小 固定宽度),flex的值可以是1个、2个或3个值;

单值语法:值必须是以下其中之一

  • 一个无单位数(<number>):会作为<flex-grow>的值;
  • 一个有效宽度(width)值:会作为<flex-basis>的值;
  • 关键字none、auto或initial;

双值语法:第一个必须是无单位数、会作为<flex-grow>的值;
第二个值必须是以下之一:

  • 一个无单位数(<number>):会作为<flex-shrink>的值;
  • 一个有效宽度(width)值:会作为<flex-basis>的值;

三值语法:

  • 第一个必须是无单位数、会作为<flex-grow>的值;
  • 第二个必须是无单位数、会作为<flex-shrink>的值;
  • 第三个必须是有效宽度(width)值:会作为<flex-basis>的值;

Tips CSS

文字居中:

text-align:center;
line-height:包裹块元素高度;

块水平居中:

margin: 0 auto;

补充属性

margin

在flexbox布局中有很强大的作用,如果给某个可伸缩项设置某个方向上的margin为auto,那么这个可伸缩项就会在这个方向上占用该方向的剩余空间来作为自己的这个方向上的margin;


示意:

默认

1 2 3 - - -

1的margin-right设为auto;

1 - - - 2 3

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

弹性布局-更优秀的Flex 的相关文章

  • webpack打包报错:if (!scriptUrl) throw new Error(“Automatic publicPath is not supported in this browser“)

    翻车现场 ERROR in Error D Work test webpack demo 05 打包图片资源 src index html 104 if scriptUrl throw new Error Automatic publicP
  • vue中实现el-table点选和鼠标框选功能

    实现思路 项目有两个需求 既能在el table实现点选又能实现鼠标框选 一 点选实现思路 使用el table的cellClick方法 1 直接给点击的cell添加类名 cell classList add blue cell 然后把获取
  • 使用Chrome浏览器自带命令对web页面进行截图,生产高质量图片

    在平时工作中 我们对浏览器的web页面截图有很多方法 无论是Windows还是Mac操作系统 都自带截图工具 但是 如果我们打开的web页面非常的大 我使用操作系统自带的截屏工具就力不从心了 因为我们的显示屏幕不能显示web页面的所有内容
  • ajax请求不能下载文件

    最近在做文件下载 后台写了个控制层 直接走进去应该就可以下载文件 各种文件图片 excel等 但是起初老是下载失败 并且弹出下面的乱码 前台请求代码 fileexcel unbind click bind click function al
  • web前端面试题整理(前端和计算机相关知识)

    1 你能描述一下渐进增强和优雅降级之间的不同吗 定义 优雅降级 graceful degradation 一开始就构建站点的完整功能 然后针对浏览器测试和修复 渐进增强 progressive enhancement 一开始只构建站点的最少
  • 对象转换为JSON数据格式&使用JQuery获取数据

    将对象转换为JSON数据格式 我们需要json lib 2 3 jdk15 jar架包 当然还需要其它架包 来实现对象转JSON数据格式 此架包提供两个类来实现转换 JSONObject fromObject object 将对象转换成js
  • js __proto__、prototype 、constructor 三者关系总结

    一 proto 属性 proto 怎么读 杠杠 proto 杠杠 proto 读作 dunder proto double underscore proto 的缩写 并且它前后两边 分别是 两个 下划线 由 proto 属性来连接对象 直到
  • Flex布局实战详解

    Flex布局详解 1 父项属性 flex direction 设置主轴的方向 justify content 设置主轴上的子元素排列方式 flex wrap 设置子元素是否换行 align content 设置侧轴上的子元素排列方式 多行
  • 前端js和jq中select下拉框

    获取select选中的option的值 ddlRegType find option selected val 获取select选中的text ddlRegType find option selected text 获取select选中的
  • vue flex 布局实现div均分自动换行

    vue flex 布局实现div均分自动换行 许久没有更新了 今天才意外发现以前还是没有看懂盒模型 今天才算看懂了 首先我们今天来看一下想要实现的效果是什么 当然适配是必须的 1920 或者 1376都测试过 效果如图所选中区域所示 一 关
  • Web启动项目走Https协议(Webpack版,Umi版和Host代理版)

    需求 Web项目的启动 一般是默认的http协议 在某些业务需求时 需要走https来调试 Webpack版本 只需在webpack的devServer中配置就可以了 devServer host 0 0 0 0 port 8080 htt
  • 父容器display:flex后,子元素的内部元素height:100%无效解决方法

    父容器display flex后 子元素的内部元素height 100 无效解决方法 解救办法 父类容器position relative 子元素 position absolute width 100 height 100 效果图 代码如
  • 20最佳代码审查工具-专门为开发人员准备

    程序员总是面临最后期限的压力和很多延误软件设计相当不稳定 整个产品是不稳定的 这种不稳定性的设计软件的原因是 它是不能正常测试 来的工作代码审查工具 的代码审查工具可以帮助web开发人员指出他们哪些区域的程序代码是错误的也可能有机会是不正确
  • vue/cli3添加自定义icon图标

    1 从阿里巴巴矢量图表库将需要的图标 加入购物车 点击购物车 2 选择添加至项目 3 下载到本地 放到项目中 4 在main js中引入iconfont css文件 以实际位置为准 import assets fonts download
  • TextSymbol使用方法

    private var grapbiaozhu GraphicsLayer new GraphicsLayer grapbiaozhu clear map addLayer grapbiaozhu var gra Graphic new G
  • (一)软件架构概述

    1 系统结构 B S架构 Browser Server 浏览器 服务器的交互形式 Browser支持哪些语言 HTML CSS JavaScript 写HTML CSS JavaScript代码的这波人职位叫做 WEB 前端开发工程师 Ja
  • JS 时区时间转换

    业务场景 页面服务器时间是东八区时间 页面 JS 功能需要对比服务器时间和用户本地时间 为兼容世界各地时间 需要将用户本地时间转换为东八区时间 基本概念 格林威治时间 格林威治子午线上的地方时 或零时区 中时区 的区时叫做格林威治时间 也叫
  • 点击按钮复制链接

    做点击按钮复制链接 网上找的方法是用原生js document execCommand Copy window clipboardData setData Text url value 发现微信上存在不兼容 在安卓和PC段都可以 但是在苹果
  • 禁止ios浏览器页面上下滚动 (橡皮筋效果)弹性滚动 微信的下拉回弹

    发现之前阻止页面滚动的代码e preventDefault代码失效了 于是自己折腾了一番 找到了解决办法 一 前言 浏览器在移动端有一个默认触摸滚动的效果 让我们感触最深的莫过于微信浏览器里面 下拉时自带橡皮筋的效果 然而在开发的时候我们经
  • js实现鼠标悬停显示title效果

随机推荐

  • Windows应急响应

    临近冬奥 残奥 发一篇Windows的应急响应 希望对大家有所帮助 下一篇会发Linux的应急响应 目录 Part1 前期交互 Part2 主机排查 Part3 工具篇 Part1 前期交互 这个阶段主要是先找客户了解主机的基本情况 如 主
  • Push failed Remote: Support for password authentication was removed on August 13, 2021.

    啥情况 竟然不能推送代码到github了 还能不能愉快的玩耍了 报错如下 大概意思就是 8月13后 不能使用用户名 密码的形式进行Push 强制大家改成SSH的方式 先说解决方案吧 一 查看是否已有密钥 Mac Users Your Nam
  • 写好“提示”改变“智造未来”-GPT4提示词驶入代码优化驾驶座心得

    开篇 在前端科技的新浪潮中 Artificial Intelligence AI 的逐渐成熟与发展引领着我们向前 其中OpenAI的GPT4提供了我们一种新的可能 帮助我们优化代码 使编程变得更加轻松 在这篇文章中 我们将一同探究如何在1
  • C++ 之 模板与泛型编程(二、模板实例化)

    模板是一个蓝图 它本身不是类或函数 编译器用模板产生指定的类或函数的特定类型版本 产生模板的特定类型实例的过程称为实例化 模板在使用时将进行实例化 类模板在引用实际模板类类型时实例化 函数模板在调用它或用它对函数指针进行初始化或赋值时实例化
  • 【UBUNTU与ROS实战笔记】(二)——系统ROS安装与配置

    本文结构 0 引言 1 ROS系统安装 1 1 解析安装过程 1 2 ROS环境配置 小结 该博文是 UBUNTU与ROS实战笔记 系列的第二篇文章 写这个的过程中我也正一步一步的实际操作 如果你对该内容有兴趣 欢迎留言交流 0 引言 同学
  • 死锁/死锁的实现

    首先明白死锁产生的原因 死锁指两个或两个以上线程执行过程中 因争夺资源而造成的互相等待现象 四个必要条件 1 互斥性 线程对资源的占有是排他性的 一个资源只能被一个线程占有 直到释放 2 请求和保持条件 一个线程对请求被占有资源发生阻塞时
  • Unity上架苹果商店游戏资源加载的问题被拒4.2.3

    由于游戏资源加载的问题被4 2 3拒绝的解决方案 方案一 加一个下载资源说明 然后改一下逻辑 启动app可以正常进去 然后提醒用户在你进去体验的初期 我们会继续在Wi Fi环境下继续下载app需要的资源 方案二 真是本地解压资源 可以搞一个
  • 前端笔记目录

    HTML 部分 HTML 常用的标签 HTML 表格标签 HTML 列表标签 HTML 表单标签 CSS 部分 CSS 选择器 CSS 字体属性 JavaScript 部分 JavaScript ES6新特性 1 JavaScript ES
  • 简单的spring项目搭建流程

    一 搭建步骤 创建空maven项目 pom文件导入相应依赖jar包 创建包结构 domain test即可 创建JavaBean配置文件 编写简单示例 二 开始 1 创建一个空的maven项目 2 在pom xml文件中导入spring5依
  • AI小程序——文本绘图

    文章目录 一 摘要 二 文心 ERNIE ViLG 技术原理解读 图文双向生成统一建模 三 使用教程 2 1 exe下载 2 2 获取API 2 3 软件使用 2 4 源码链接 一 摘要 在文字生成图像上 文心 ERNIE ViLG 可以根
  • 力扣第99场双周赛题目记录(复盘)

    第一题 2578 最小和分割 给你一个正整数 num 请你将它分割成两个非负整数 num1 和 num2 满足 num1 和 num2 直接连起来 得到 num 各数位的一个排列 换句话说 num1 和 num2 中所有数字出现的次数之和等
  • 解决 VMware 克隆或复制的虚拟机,同时只有一台能上网问题

    VMware 克隆或复制虚拟机后 发现不能上网 多次调试后 确定是克隆或复制的虚拟机与原虚拟机 同时只能有一台能上网 原因是 克隆或复制的虚拟机 网卡 MAC 地址一样导致 重新分配的新 MAC 地址即可 方法如下 1 打开 Vmware
  • Matlab/Simulink-单相逆变电路双闭环仿真搭建

    1 前言 Simulink零基础 单相逆变电路双闭环仿真搭建 单相逆变电路仿真 单相逆变仿真 十分钟让你掌握单相电路简单的双闭环控制 本文不讲单相逆变电路的原理和构成 只涉及如何在Simulink中实现单相逆变电路 搭建的过程在下面视频里了
  • Unity射线穿透UI解决

    unity场景中 射线是可以穿透UI的 我用过很多版本 都有这个问题 比如我现在用2020版本的unity做了个范例 我在场景中新建了一个cube名叫 我秦始皇打钱 点击这个物体就会出现log显示这个物体的名字 代码在下面 运行之后确实会弹
  • 计算机原码补码和反码的计算方法,一个数的原码,反码,补码怎么算,原码 反码 补码...

    数在计算机中是以二进制形式表示的 数分为有符号数和无符号数 原码 反码 补码都是有符号定点数的表示方法 一个有符号定点数的最高位为符号位 0是正 1是副 以下都以8位整数为例 原码就是这个数本身的二进制形式 例如 0000001 就是 1
  • Vue3+ts+element-plus 组件的二次封装-- 头部搜索条件的封装

    Vue 常用笔记 本人是一个web前端开发工程师 主要是vue框架 整理了一些Vue常用的技术 一方面是分享 一方面是做总结 今后也会一直更新 有好建议的同学欢迎评论区分享 Vue专栏 点击此处 Vue组件库专栏 点击此处 Vue2 vs
  • Unity中同时修改物体及其所有子物体层级

    简单说一下思路 首先你得判定当前物体是否有子物体 没有的话就直接设置层级 有的话就再回到1 继续判断子物体下是否还有子物体 接下来结合代码再好好理解一下 private void ChangeLayer Transform transfor
  • matlab实现牛顿下山法

    说起牛顿下山法 首先要提牛顿法 牛顿法是求解非线性方程的一个重要方法 具体可以点击牛顿法 虽然牛顿法作为一个二阶的迭代收敛方法 但是其对于函数和初始点的要求都比较高 而牛顿下山法则是有效降低这些要求的一种技巧 牛顿下山法的迭代公式如下 x
  • [C/C++] 创建后台接受命令程序

    C C 多线程时 运行时输入自定义参数 达到控制线程的目的 基础概念 线程 线程是操作系统能够进行运算调度的最小单位 它被包含在进程之中 进程包含一个或者多个线程 进程可以理解为完成一件事的完整解决方案 而线程可以理解为这个解决方案中的的一
  • 弹性布局-更优秀的Flex

    Flex布局详解 浮动布局的优缺点 图文的环绕显示 浮动元素 同行显示 适配性更好 忘记清浮动 高度坍塌 flex布局的优缺点 IE10以下不支持 用来做布局的 很方便 flex布局 flex flexible 弹性布局 移动端用的最多 P