返回顶部
首页 > 资讯 > 前端开发 > 其他 >带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis
  • 889
分享到

带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis

cssflex 2023-05-14 21:05:44 889人浏览 独家记忆
摘要

2 flex-shrinkflex-shrink:shrink的中文意思是收缩,用来指定flex元素的收缩规则。默认值为1。我们先看一个例子: .flex-box{ display: flex; width: 300px;

image.png

2 flex-shrink

  • flex-shrink:shrink的中文意思是收缩,用来指定flex元素的收缩规则。默认值为1。我们先看一个例子:

.flex-box{
    display: flex;
    width: 300px;
    height: 300px;
    ...
}

.left{
    flex-shrink: 3;
    width: 200px;
    background-color: orange;
}

.right{
    flex-shrink: 1;
    width:200px;
    background-color: cyan;
}

image.png首先,所有子元素宽度之和大于父元素宽度(200px+200px>300px)。由于父元素的宽高都是固定的,所以不能撑大父元素,只能缩小子元素。子元素flex-shrink的比为3:1,所以子元素left的宽度为:200px-100px*(200px*3/(200px*3+200px*1)) = 125px;子元素right的宽度为:200px-100px*(200px*1/(200px*3+200px*1)) = 175px;这样也就解析了当所有子元素的宽度和大于父元素宽度和的时候,子元素是如何处理的这个问题的了。

3 flex-basis

  • flex-basis:basis的中文意思是基准,用来指定子元素内容盒尺寸大小。默认值为auto。我们先看一下下面这个例子:
    .flex-box{
        display: flex;
        width: 300px;
        height: 300px;
        margin:0 auto;
        background-color: #000;
    }

    .left{
        width: 200px;
        flex-basis: 100px;
        background-color: orange;
    }
    .right{
        width:100px;
        background-color: cyan;
    }

image.png细心地我们发现,left的宽度是不是有点奇怪?上面left不是定义了一个width:200px,为什么效果会是100px的?我们都知道flex-basis是基准,其实在flex布局下,这个属性的优先级比width要高的,当flex-basis与width都存在时,是以前者的值为准的。 好了好了,三个元素我们都学完了,总结一下:

  • flex-grow:值大于0,主要是解决父元素宽度大于所有子元素宽度之和时,子元素合理分配父元素剩余空间。值为0时,子元素盒子空间不做扩大处理。
  • flex-shrink:值大于0,主要是解决父元素宽度小于所有子元素宽度之和时,子元素缩小宽度以适应父元素宽度,值为0时,子元素盒子空间不做缩小处理。
  • flex-basis:其实也可以理解为在flex布局下,一个高优先级的宽度

4 结合flex属性使用

除了上面各自分开使用这三个属性,还可以盒子一起使用也就是:

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

flex属性可以灵活处理这三个属性,可以单值、双值处理,这样的话,flex属性分别代表什么?

  • 当flex为单值时,可代表一个无单位数(默认为flex:number 1 0;)、一个有效宽度值(flex:100px,即是flex-basis)、或者特殊值(none、auto、initial)

none:元素会根据自身宽高来设置尺寸。它是完全非弹性的:既不会缩短,也不会伸长来适应 flex 容器。相当于将属性设置为flex: 0 0 auto

auto:会伸长并吸收 flex 容器中额外的自由空间,也会缩短自身来适应 flex 容器。这相当于将属性设置为 flex: 1 1 auto

initial:它会缩短自身以适应 flex 容器,但不会伸长并吸收 flex 容器中的额外自由空间来适应 flex 容器。

  • 当flex为双值时,第一个数必须为无单位数(代表flex-grow)、第二个数为一个无单位数(flex-shrink)或一个有效宽度(flex-basis)

5 一道笔试题

  • 以下布局在页面上的宽度比是?

.flex{
    display: flex;
    width: 200px;
    height: 100px;
    margin:0 auto;
    background-color: #000;
}


.left{
    flex:3 2 50px;
    background-color: orange;
}


.right{
    flex:2 1 200px;
    background-color: cyan;
}

从上面我们可以看到子元素的flex值太复杂,其实我们可以先不看前面两值,先看最后一值(flex-basis)。如果所有子元素的flex-basis之和大于父元素之和考虑第一个值,如果所有子元素的flex-basis之和小于父元素之和考虑第二个值。上面所有子元素宽度50px+200px=250px大于父元素宽度200px,所以考虑第二个值也就是子元素left和子元素right的flex-shrink属性比2:1,超出部分50px这样处理left的宽度缩小为:50px-50px*(50px*2/(50px*2+200px*1)) = 33.34;right的宽度为:200px-50px*(200px*2/(50px*2+200px*1)) = 166.66。 所以上面题目答案为33.34:166.66 = 1:5

【推荐学习WEB前端开发

以上就是带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis

本文链接: https://lsjlt.com/news/205796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis
    2 flex-shrinkflex-shrink:shrink的中文意思是收缩,用来指定flex元素的收缩规则。默认值为1。我们先看一个例子: .flex-box{ display: flex; width: 300px; ...
    99+
    2023-05-14
    css flex
  • Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用
    这篇文章主要介绍“Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用”,在日常操作中,相信很多人在Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用问题上存在疑惑,...
    99+
    2023-07-04
  • CSS中flex-grow、flex-shrink、flex-basis属性的介绍以及实现九宫格布局的方法
    这篇文章主要介绍“CSS中flex-grow、flex-shrink、flex-basis属性的介绍以及实现九宫格布局的方法”,在日常操作中,相信很多人在CSS中flex-grow、flex-shrink、...
    99+
    2024-04-02
  • CSS 弹性布局属性优化技巧:align-items 和 flex-grow
    在前端开发中,使用弹性布局(Flexbox)来实现网页的自适应布局已经成为了一个常见的技术选择。弹性布局通过一系列的 CSS 属性和值来控制元素在容器中的分布以及排列的方式。在这些属性中,align-items 和 flex-grow 是其...
    99+
    2023-10-21
    弹性布局 align-items flex-grow
  • Flex布局的元素属性有哪些
    这篇“Flex布局的元素属性有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flex布...
    99+
    2024-04-02
  • 常用的Flex布局属性有哪些
    flex布局的常用属性有哪些,需要具体代码示例 Flex布局是一种用于设计响应式网页布局的强大工具。它通过使用一组灵活的属性,可以轻松控制网页中元素的排列方式和尺寸。在本文中,我将介绍...
    99+
    2024-02-25
    flex flex布局 排列 网页布局
  • CSS Flex弹性布局详解!常用的12个属性
    CSS Flex弹性布局是一种用于布局网页元素的技术,它通过一系列的属性来定义弹性容器和其内部元素的行为。以下是常用的12个CSS ...
    99+
    2023-10-10
    CSS
  • CSS3中display属性Flex布局的示例分析
    这篇文章将为大家详细讲解有关CSS3中display属性Flex布局的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在设计首页布局的时候,新认识了一种布局方式di...
    99+
    2024-04-02
  • 三个flex属性对元素的影响是什么
    本篇内容主要讲解“三个flex属性对元素的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“三个flex属性对元素的影响是什么”吧!首先我们需要了解,fl...
    99+
    2024-04-02
  • CSS flex布局属性align-items和align-content的区别是什么
    这篇文章主要讲解了“CSS flex布局属性align-items和align-content的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS flex布局属性align-i...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作