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

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

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属性。

相关文章
|
2月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
77 3
|
2月前
|
JavaScript 前端开发 测试技术
构建高效可维护的前端应用
构建高效可维护的前端应用
|
1月前
|
移动开发 缓存 前端开发
深入理解前端路由:原理、实现与应用
本书《深入理解前端路由:原理、实现与应用》全面解析了前端路由的核心概念、工作原理及其实现方法,结合实际案例探讨了其在现代Web应用中的广泛应用,适合前端开发者和相关技术人员阅读。
|
2月前
|
前端开发 项目管理
Gitflow分支策略及其在前端工程化中的应用
Gitflow 分支策略也并非适用于所有项目。对于一些小型或简单的前端项目,可能会显得过于复杂。在实际应用中,需要根据项目的具体情况和团队的需求进行适当调整和优化。
|
2月前
|
自然语言处理 前端开发 JavaScript
深入理解前端中的 “this” 指针:从基础概念到复杂应用
本文全面解析前端开发中“this”指针的运用,从基本概念入手,逐步探讨其在不同场景下的表现与应用技巧,帮助开发者深入理解并灵活掌握“this”的使用。
|
2月前
|
存储 前端开发 JavaScript
前端中对象的深度应用与最佳实践
前端对象应用涉及在网页开发中使用JavaScript等技术创建和操作对象,以实现动态交互效果。通过定义属性和方法,对象可以封装数据和功能,提升代码的组织性和复用性,是现代Web开发的核心技术之一。
|
2月前
|
前端开发
结合具体案例分析Gitflow分支策略在大型前端项目中的应用优势
通过这个具体案例可以看出,Gitflow 分支策略在大型前端项目中能够提供有条不紊的开发环境,保障项目的稳定性和持续发展。
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
63 5
|
2月前
|
前端开发 开发者
本文将深入探讨 BEM 的概念、原理以及其在前端开发中的应用
BEM(Block-Element-Modifier)是一种前端开发中的命名规范和架构方法,旨在提高代码的可维护性和复用性。通过将界面拆分为独立的模块,BEM 提供了一套清晰的命名规则,增强了代码的结构化和模块化设计,促进了团队协作。本文深入探讨了 BEM 的概念、原理及其在前端开发中的应用,分析了其优势与局限性,为开发者提供了宝贵的参考。
63 8
|
2月前
|
编解码 监控 JavaScript
打造高效前端应用
打造高效前端应用
39 1