前端中关于弹性布局的应用

简介: 前端中关于弹性布局的应用

1. flex基础

首先,了解弹性盒子, 弹性元素, 两条轴的概念


flex容器有两个轴, 一个主轴,一个交叉轴(垂直于主轴的轴 即为交叉轴),容器内的元素默认会按主轴方向排列。


下面先运行一下这段代码:

<body>
  <div class="box">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item last"></div>
  </div>
</body>
</html>
<style>
  .box {
    width: 50vw;
    margin: 0 auto;
    background-color: mediumturquoise;
    display: flex;
  }
  .item {
    width: 50px;
    height: 50px;
    background-color: rgb(249, 27, 223);
    margin:5px;
  }
</style>


这就是flex布局的默认行为:内部元素默认按照默认主轴的方向排列(元素的间距是我自己设定的margin,没有margin他们就会连在一起)


Flexbox 允许使用margin: auto 来填充弹性子元素之间的可用空间。例如,我们可以给元素添加margin: auto

item {
  margin: auto;
}

利用这个特性,我们可以把最后一个item推到最右侧:


.item.last {
  margin-left: auto;
}

2. flex核心

先来一波总结:

flex的核心就是“弹”,弹性元素在盒子的空间剩余时可以放大, 溢了可以 缩小。 一个弹性元素的宽度计算


刚刚我们了解了相关的flex概念,现在我们来了解一个非常重要的属性——flex。flex属性控制弹性子元素在主轴方向上的大小。 下面我们新增如下html,并让弹性元素使用flex属性来设置其大小


<!-- html -->
<div class="content">
  <div class="main"></div>
  <div class="sider"></div>
</div>
<!-- css -->
<style>
  /* flex盒子 */
  .content {
    width: 90%;
    margin: 0 auto;
    display: flex;
  }
  .main, .sider {
    height: 50vh;
    background-color: white;
  }
  .main {
    //第一个白色方形宽度所占比例为3/4
    flex: 3;
    margin-right: 10px;
  }
  .sider {
    //第二个白色方形宽度所占比例为1/4
    flex: 1;
  }
</style>


我们设置了其为3:1的大小,弹性元素大小为(内容+ 内边框+内边距 + 外边框 + 外边距)。即若给其中一个弹性元素添加margin, 那么在计算弹性元素大小时,margin也会被计算在其中。


flex-basis属性

flex-basis属性 是用来定义弹性元素的宽度的(相当于width属性)。默认值为auto,此时,flex-basis的值为 wdith属性的值,若弹性元素没有设置width属性,那么就默认为弹性元素本身大小。flex-basis属性和width属性同时出现时, 会忽略掉width属性。 注意: flex-basis的值,为弹性元素大小(包含外边距)。 设置了基本大小之后,我们就可以放心的让弹性元素 智能缩放,来适应各盒子的大小,即可以“弹”。这时候就需要 flex-grow和 flex-shrink 来决定缩放的规则。


flex-grow属性

flex-grow属性可以用来放大单个弹性元素大小,是一个增长因子。 当flex-basis值设置好后,每个弹性元素都会占据一定宽度,加起来的宽度不一定正好填满弹性容器的宽度,可能会有留白。 多出来的留白(或剩余宽度)会按照 flex-grow(增长因子)的值分配给每个弹性子元素, flex-grow 的值为非负整数。如果一个弹性子元素的 flex-grow 值为 0,那么它的宽度不会超 过 flex-basis 的值。一图胜千言,看图:


flex-shrink属性

   与flex-grow相似,只不过felx-shrink属性是用来控制弹性元素缩小的,是一个缩小因子。 计算出弹性子元素的初始主尺寸后,它 们的累加值可能会超出弹性容器的可用宽度。如果不用 flex-shrink,会导致溢出。

.item {
    flex-basis: 40%;  
    flex-shrink: 0;   //设置为0,则为不进行缩放
    width: 200px;
  }

 如果某个子元素为 flex-shrink: 0,则不会收缩;如果值大于 0,则会收缩至不再溢出。按照 flex-shrink 值的比例,值越大的元素收缩得越多。


flex属性

    flex属性是一个简写属性,是flex-grow flex-shrink flex-basis属性的简写形式。 flex:1 1 0 相当于 flex-grow 为1, flex-shrink为1, flex-basis为0。 如果省略了其他属性,子属性的值并不会被置为初始值, flex 简写属性会给出有用的默认值:flex-grow 为 1、flex-shrink为 1、flex-basis 为 0%。这些默认值正是大多数情况下所需要的值。


    所以,平常我们写的flex: 1即设置了flex-grow为1, flex-shrink为1,flex-basis为0。基础值为0(大家初始宽度都一样大,且为0),那么剩下的全都是剩余的空间,每个元素都会按照相同的比例调整自己的宽度(基础值 + 分配的剩余宽度)。


注意:flex: 33.6% --> flex-grow:1, flex-shrink:1, flex-basis: 33.6%.


3. flex对齐

flex 提供了许多强大的对齐方式,让内部弹性元素按照规则对齐(例如居中对齐) 详细对齐效果见


justify-content属性

这个属性用来控制主轴方向的元素对齐方式:flex-start、flex-end、center、space-between。


align-items

这个属性用来控制副轴的对齐方式。大致取值及效果如下图:


aligin-self

这个属性是放在弹性子元素的身上的。 它可以单独给弹性子元素设置副轴上的对齐方式,覆盖掉原来的aligin-items属性。

相关文章
|
8天前
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
8天前
|
前端开发 算法 JavaScript
最小堆最大堆了解吗?一文了解堆在前端中的应用
该文章详细解释了堆数据结构(特别是最小堆)的概念与性质,并提供了使用JavaScript实现最小堆的具体代码示例,包括堆的插入、删除等操作方法。
最小堆最大堆了解吗?一文了解堆在前端中的应用
|
9天前
|
前端开发 容器
前端基础(十五)_多栏布局(两列自适应布局、圣杯布局---三列布局、双飞翼布局--三列布局、等高布局)
本文介绍了前端开发中的多种自适应布局技术,包括两列自适应布局、圣杯布局(三列布局)、双飞翼布局(三列布局)和等高布局。文章通过代码示例展示了如何使用HTML和CSS实现这些布局,以及如何通过flex布局简化实现过程。
33 2
|
8天前
|
存储 前端开发 算法
太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
该文章深入探讨了图数据结构的基本概念及其在前端领域的多种应用,包括图的不同表示方法(邻接矩阵与邻接表)和经典的图算法(如深度优先搜索与广度优先搜索),并通过具体实例讲解了如何使用JavaScript来解决图相关的编程问题,如太平洋大西洋水流问题。
太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
|
8天前
|
JSON 前端开发 JavaScript
一文了解树在前端中的应用,掌握数据结构中树的生命线
该文章详细介绍了树这一数据结构在前端开发中的应用,包括树的基本概念、遍历方法(如深度优先遍历、广度优先遍历)以及二叉树的先序、中序、后序遍历,并通过实例代码展示了如何在JavaScript中实现这些遍历算法。此外,文章还探讨了树结构在处理JSON数据时的应用场景。
一文了解树在前端中的应用,掌握数据结构中树的生命线
|
8天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
8天前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
8天前
|
存储 JSON 前端开发
栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
该文章探讨了栈在前端开发中的应用,并深入讲解了JavaScript中深拷贝与浅拷贝的区别及其实现方法。
栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
|
23天前
|
弹性计算 前端开发 容器
【前端web入门第六天】02 flex布局
Flex布局是一种现代CSS布局模式,通过给父元素设置`display: flex`,其子元素可自动挤压或拉伸。它包含弹性容器和弹性盒子,主轴默认为水平方向,侧轴为垂直方向。主轴对齐方式由`justify-content`属性控制,侧轴对齐方式包括`align-items`(针对所有子元素)和`align-self`(针对单个子元素)。修改主轴方向使用`flex-direction`属性,`flex`属性用于控制子元素在主轴上的伸缩比例。此外,`flex-wrap`属性允许子元素换行,而`align-content`属性则定义多行对齐方式。
|
8天前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
下一篇
无影云桌面