深入了解 JavaScript 中的 Flexbox 布局模型

前言

Flexbox(Flexible Box)布局模型是一种用于设计弹性、可响应且高度自适应的网页布局的现代 CSS 技术。它提供了一种更加直观和便捷的方式来对齐和分布容器内的元素。本文将详细介绍 JavaScript 中 Flexbox 的所有主要属性,并通过代码案例演示它们的用法。

Flex容器属性

1.display

  • 描述:指定一个元素应该生成的框的类型,将其设置为 flexinline-flex 将其变为 Flex 容器。
  • 值:flex | inline-flex

不设置flex属性:

html 复制代码
// 这里不展示css样式
<div class="box">
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
</div>

将box盒子设置为Flexbox布局模型:

css 复制代码
.box{
      display: flex;
 }

2.flex-direction

  • 描述:定义了主轴的方向。
  • 值:row | row-reverse | column | column-reverse
  • 默认主轴方向为x轴(row)

修改主轴方向为y轴(column):

  • 主轴为垂直方向,起点在上沿。
css 复制代码
.box{
      display: flex;
      flex-direction: column;
}

修改主轴方向(row-reverse):

  • 主轴为水平方向,起点在右端。
css 复制代码
.box{
      display: flex;
      flex-direction: row-reverse;
}

修改主轴方向(column-reverse):

  • 主轴为垂直方向,起点在下沿。
css 复制代码
.box{
      display: flex;
      flex-direction: column-reverse;
}

3.flex-wrap

  • 描述:定义了项目在容器中是否换行。
  • 值:nowrap | wrap | wrap-reverse
  • 默认值:nowrap(不换行)

wrap:

  • 换行,第一行在上方。

nowrap:

  • 不换行,高度不变,横向压缩

wrap-reverse:

  • 换行,第一行在下方。

4.justify-content

  • 描述: 定义了项目在主轴上的对齐方式。
  • 值: flex-start | flex-end | center | space-between | space-around | space-evenly

flex-start

  • 项目在主轴起点对齐。

flex-end

  • 项目在主轴终点对齐。

center

  • 项目在主轴居中对齐

space-between

  • 项目在主轴上平均分布,首尾两端贴边。

space-around

  • 项目在主轴上平均分布,每个项目两侧有相等的空白。

space-evenly

  • 项目在主轴上平均分布,每个项目两侧和首尾两端的空白相等。

5.align-items

  • 描述: 定义了项目在交叉轴上的对齐方式。
  • 值: stretch | flex-start | flex-end | center | baseline

stretch

  • 项目在交叉轴上拉伸以适应容器(默认值)。如下Gif图

flex-start

  • 项目在交叉轴起点对齐。

flex-end

  • 项目在交叉轴终点对齐。

center

  • 项目在交叉轴中居中对齐。

baseline

  • 项目在交叉轴上以基线对齐。

补充:基线

基线(baseline)通常被用来对齐项目在交叉轴上的位置。基线是文字或行内元素的底部边缘,包括字符的下沿或行内元素的基线。 当项目在交叉轴上以基线对齐时,它们的基线会对齐,从而使它们在垂直方向上对其。这种对齐方式常用于包含文字或行内元素的容器中,以确保它们在垂直方向上以可读的方式对齐。 它可以在网页设计中用于垂直居中文本,使得不同行的文本在垂直方向上对齐。此外,基线对齐还可以用于其他类型的元素,例如图像、表格等。

看下面案例:(Hello的字体大小为24px,World的字体大小为16px)

不加该属性:

加该属性:

6.align-content

  • 描述: 定义了多根轴线的对齐方式,仅在项目换行时有效。
  • 值: stretch | flex-start | flex-end | center | space-between | space-around

stretch

  • 多根轴线在交叉轴上平分容器的高度,使得它们的高度相等,从而填满整个容器。(默认值)

3个:

12个:

21个:

flex-start

  • 多根轴线在交叉轴上起点对齐,即它们的起点对齐于容器的交叉轴起点。

flex-end

  • 多根轴线在交叉轴上终点对齐,即它们的终点对齐于容器的交叉轴终点。

center

  • 多根轴线在交叉轴上居中对齐,即它们相对于容器的交叉轴中点居中。

space-between

  • 多根轴线在交叉轴上平均分布,首尾两端贴边。

space-around

  • 多根轴线在交叉轴上平均分布,每个轴线两侧有相等的空白。

Flex 项目属性

  • Flex 项目属性用于控制单个 Flex 项目的行为和样式。

1.order

  • 描述: order 属性定义了项目的排列顺序。数值越小,项目越靠前。

  • 值: 整数

css 复制代码
.b1 {
    background-color: blue;
    order: 1;  // 蓝色盒子第二个展示
 }

 .b2 {
    background-color: pink;
    order: 2;  // 粉色盒子第三个展示
 }

 .b3 {
    background-color: red;
    order: 0; // 红色盒子第一个展示
 }
html 复制代码
<div class="box">
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
</div>

效果:

2.flex-grow

  • 描述: flex-grow 属性定义了项目的放大比例。决定在空间分配时,项目放大的程度。

  • 值: 正整数

css 复制代码
.b1 {
   background-color: blue;
   order: 1;
   flex-grow: 2;  /*蓝色盒子将占用的可用空间*/
}
html 复制代码
<div class="box">
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
</div>

不加该属性:

加上该属性:

检查:

效果:

flex-shrink

  • 描述: flex-shrink 属性定义了项目的缩小比例。决定在空间不足时,项目缩小的程度。

  • 值: 正整数

css 复制代码
.b2 {
   background-color: pink;
   flex-shrink: 4;  /*粉色盒子将以4倍的速度缩小*/
}
html 复制代码
<div class="box">
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
    <div class="b1">A</div>
    <div class="b2">B</div>
    <div class="b3">C</div>
</div>

缩小前:

粉色盒子缩小后:

4.flex-basis

  • 描述: flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间。

  • 值: 长度值 | auto

css 复制代码
.b2 {
   background-color: pink;
   flex-basis: 300px;
}

再加三个盒子:

5.flex

  • 描述: flex 属性是 flex-grow, flex-shrink, 和 flex-basis 的缩写形式。

  • 值: none | <flex-grow> | <flex-shrink> | <flex-basis>

案例就不展示了。

6.align-self

  • 描述: align-self 属性允许单个 Flex 项目覆盖其容器的 align-items 属性。

  • 值: auto | stretch | flex-start | flex-end | center | baseline

效果和上述介绍过的是一样的,这里就不再展示。

留言

整理不易,如果觉得有帮助的话,还请点个赞哦。♥(ˆ◡ˆԅ)

相关推荐
鹏程十八少11 分钟前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
亿元程序员18 分钟前
这款值68亿的游戏,你不实战一下吗?安排!
前端
摸鱼的春哥1 小时前
Agent教程15:认识LangChain(中),状态机思维
前端·javascript·后端
明月_清风1 小时前
告别遮挡:用 scroll-padding 实现优雅的锚点跳转
前端·javascript
明月_清风1 小时前
原生 JS 侧边栏缩放:从 DOM 监听到底层优化
前端·javascript
万少10 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
哈里谢顿11 小时前
1000台裸金属并发创建中的重难点问题分析
面试
哈里谢顿11 小时前
20260303面试总结(全栈)
面试
橙序员小站12 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名15 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员