IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> flex中的flex-grow、flex-shrink、flex-basis及缩写属性flex的使用场景 -> 正文阅读

[JavaScript知识库]flex中的flex-grow、flex-shrink、flex-basis及缩写属性flex的使用场景

1.【flex-grow】决定了flex items 如何扩展拉伸

总结:

  • 一个元素不设置或者flex-grow设置为0,默认是元素的宽度;
  • 如果给一个或多个元素设置了非负的flex-grow值,父元素剩余的宽度(如果有)重新分配宽度,flex-grow的值代表分配到的宽度比例。

有点难理解,下面有例子解释说明。

1.1.【flex-grow】默认样式

  • 可以设置任意非负数字(正小数、正整数、0),默认是0
  • 当flex-container在main axis(主轴)方向上有剩余size(空间)时,flex-grow属性才增加宽度

三个宽度120px(3*120px=360px)的子元素放在一个宽度420px的父级元素中,父级元素使用flex布局?

<div class="container">
    <div class="item item1">120px</div>
    <div class="item item2">120px</div>
    <div class="item item3">120px</div>
</div>
图1-1 默认样式
.container {
            display: flex;
            width: 420px;
            height: 200px;
        }    
.item {
            width: 120px;
            height: 120px;
        }

?三个item的flex-grow默认都是0,所以不会占用剩下的空间,还有60px剩余,如图1-1所示。

1.2.【flex-grow】只给一个子元素添加flex-grow 填满父元素宽度

?只给一个子元素设置flex-grow值

  • 设置了正值flex-grow(可以是flex-grow:1、flex-grow:2)的那个子元素,会占满父元素剩余的空间。
  • 其他子元素为默认值0,占原来自己的宽度

只要子元素添加了flex-grow正值,就重新分配父元素剩余空间的宽度,如图1-2、1-3所示。

图1-2 只给其中一个子元素设置(a)
图1-3 只给其中一个子元素设置(b)

?1.3.【flex-grow】给多个子元素添加flex-grow 填满父元素宽度

给多个子元素设置flex-grow值

  • 给设置了正值的多个子元素分配宽度
  • 按照flex-grow的值按比例分配父元素剩余宽度
图1-4 给item2和item3添加flex-grow:1

可以看到浏览器将父元素剩余的宽度按比例分配给了item2和item3

效果如图1-4所示

给每个子元素都添加flex-grow属性,只要是添加了flex-grow的都会按比例分配,效果如图1-5所示。父元素剩余的宽度是60px,所以给第一个子元素分配了30px、第二个子元素分配了20px、第三个子元素分配了10px。

图1-5 按比例分配宽度

2.【flex-shrink】决定了flex items 如何收缩

总结:

  • 一个元素不设置或者flex-shrink设置为1,默认会压缩元素的宽度;
  • 如果给一个或多个元素设置了0的flex-shrink值,那些元素会按原宽度显示,宽度可以超过父元素。

下面有例子解释说明。

2.1.【flex-shrink】默认样式

  • 可以设置任意非负数字(正小数、正整数、0),默认值是1
  • 当flex-items在main axis方向超过了flex container的size,flex-shrink属性才有效。item总共的宽度比容器大

三个宽度120px(3*120px=360px)的子元素放在一个宽度300px的父级元素中,父级元素使用flex布局?

<div class="container">
    <div class="item item1">120px</div>
    <div class="item item2">120px</div>
    <div class="item item3">120px</div>
</div>
图2-1 默认样式

?虽然3个宽度为120px的子元素超过了父元素300px,但是默认会缩小每个子元素的值以放进三个子元素,如图2-1所示。

.container {
            display: flex;
            width: 300px;
            height: 200px;
        }
        
        .item {
            width: 120px;
            height: 120px;
        }

2.2.【flex-shrink】给一个或多个子元素设置flex-shrink:0

?给一个子元素设置flex-shrink:0值,这个元素就会按原宽度显示,而其他元素就会被挤压

图2-2 给一个子元素设置flex-shrink:0值

?当设置flex-shrink:0的元素对应的宽度大于父元素的时候,会超出父元素宽度,如图2-3所示

图2-3 子元素的宽度超过父元素的情况

?3.【flex-basis】决定flex items的基本大小

应用的场景比较少,而且平常也很少去主动设置。默认值是auto。flex-basis用来设置flex items在main axis方向上的base size,与width有点类似,下面与其他大小设置的优先级进行比较

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

  1. max-width\max-height\min-width\min-height
  2. flex-basis
  3. width\height
  4. 内容本身的 size

4.【flex】缩写属性

?4.1.【flex】单值语法

  • 一个无单位数(<number>): 它会被当作flex:<number> 1 0 的值。flex-shrink的值被假定为1,即可以伸缩。flex-basis的值被假定为0,默认是没有宽度的。
  • 一个有效的宽度(width)值: 它会被当作 <flex-basis>的值。
  • 关键字none,auto或initial.

4.1.1.【flex】无单位数??

?下面的内容不好理解,可以只记住结论:

在给一个或多个子元素设置了flex:<number>后,会将那个子元素或者那些子元素的宽度+父元素剩余的宽度按比例重新分配。

举例说明1:一个item设置flex值

三个宽度120px(3*120px=360px)的子元素放在一个宽度420px的父级元素中,父级元素使用flex布局?,如图4-1所示。

<div class="container">
        <div class="item item1">120px</div>
        <div class="item item2">120px </div>
        <div class="item item3">120px </div>
</div>
图4-1 默认样式
.container {
            display: flex;
            width: 420px;
            height: 200px;
       
        }
        
        .item {
            width: 120px;
            height: 120px;
        }

给item3设置了flex:1后,item3的宽度加上黄色部分(父元素剩余的宽度)会重新分配宽度。如图4-2所示。

因为flex:1;会被当做flex:1 1 0;

flex-basis暂定为0,没有宽度,flex-grow又设置为1,就占用了全部的宽度。如图4-3所示

图4-2 给一个item设置flex值(a)
图4-3 给一个item设置flex值(b)

?

举例说明2:多个item设置flex值

给item1设置flex:1;? ? ? ? 给item2设置flex:2 ;? ? ? ? 给item3设置flex:3

flex:flex-grow flex-shrink flex-basis;

给元素设置flex单值,flex-basis为0,没有宽度。在本例子中设置了三个子元素,所以整个父元素都没有宽度。又设定了flex-grow,子元素按比例分配剩下的宽度。

图4-4 给多个item设置flex值

?

4.2.【flex】双值语法

双值语法:

第一个值必须为一个无单位数,并且它会被当作 <flex-grow> 的值。

第二个值必须为以下之一:

  • 一个无单位数:它会被当作 <flex-shrink> 的值。
  • 一个有效的宽度值: 它会被当作 <flex-basis> 的值。

4.3.【flex】三值语法?

  • 第一个值必须为一个无单位数,并且它会被当作 <flex-grow> 的值。
  • 第二个值必须为一个无单位数,并且它会被当作 ?<flex-shrink> 的值。
  • 第三个值必须为一个有效的宽度值, 并且它会被当作 <flex-basis> 的值。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章           查看所有文章
加:2022-04-27 11:15:02  更:2022-04-27 11:17:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:47:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码