当前位置: 首页 > news >正文

Flex 布局精讲

Flex(弹性盒子)布局是 CSS3 引入的一种现代布局方式,旨在提供更高效、灵活的容器内子元素排列方式。它特别适合 一维布局(行或列),比传统布局(如浮动、定位)更简单、更强大。


1. Flex 布局的核心概念

1.1 Flex 容器(Flex Container)

通过 display: flexdisplay: inline-flex 将一个元素定义为 Flex 容器,其直接子元素自动成为 Flex 项目(Flex Items)

.container {display: flex; /* 或 inline-flex */
}

1.2 主轴(Main Axis)与交叉轴(Cross Axis)

  • 主轴:Flex 项目的默认排列方向(水平或垂直)。
  • 交叉轴:与主轴垂直的方向。
属性主轴方向交叉轴方向
flex-direction: row(默认)水平(从左到右)垂直(从上到下)
flex-direction: column垂直(从上到下)水平(从左到右)

2. Flex 容器的属性

2.1 主轴方向控制:flex-direction

.container {flex-direction: row | row-reverse | column | column-reverse;
}
  • row(默认):水平排列(左→右)。
  • row-reverse:水平反向排列(右→左)。
  • column:垂直排列(上→下)。
  • column-reverse:垂直反向排列(下→上)。

2.2 换行控制:flex-wrap

.container {flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(默认):不换行(可能溢出)。
  • wrap:换行(从上到下)。
  • wrap-reverse:反向换行(从下到上)。

2.3 主轴对齐:justify-content

.container {justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
效果
flex-start向主轴起点对齐(默认)
flex-end向主轴终点对齐
center居中
space-between两端对齐,项目间距相等
space-around项目两侧间距相等(边缘间距为中间一半)
space-evenly所有间距(包括边缘)完全相等

2.4 交叉轴对齐:align-items

.container {align-items: stretch | flex-start | flex-end | center | baseline;
}
效果
stretch(默认)拉伸填满容器高度(需无固定高度)
flex-start向交叉轴起点对齐(顶部对齐)
flex-end向交叉轴终点对齐(底部对齐)
center居中
baseline按第一行文字的基线对齐

2.5 多行对齐:align-content

.container {align-content: stretch | flex-start | flex-end | center | space-between | space-around;
}
  • 仅在多行(flex-wrap: wrap)时生效,控制行与行之间的间距。

3. Flex 项目的属性

3.1 项目排序:order

.item {order: 0; /* 默认值,数值越小越靠前 */
}
  • 通过 order 调整项目的显示顺序(无需修改 HTML 结构)。

3.2 项目伸缩比例:flex-grow

.item {flex-grow: 0; /* 默认不拉伸 */
}
  • 定义项目的放大比例(剩余空间分配)。
  • 值为 1 时,项目会拉伸填充剩余空间。

3.3 项目收缩比例:flex-shrink

.item {flex-shrink: 1; /* 默认允许收缩 */
}
  • 定义项目的缩小比例(空间不足时)。
  • 值为 0 时,项目不收缩(可能溢出)。

3.4 项目基准大小:flex-basis

.item {flex-basis: auto | 100px; /* 默认 auto */
}
  • 定义项目在分配多余空间之前的初始大小。
  • 类似 width,但优先级更高。

3.5 简写属性:flex

.item {flex: flex-grow flex-shrink flex-basis;flex: 1 1 100px; /* 常用写法 */
}
  • 默认值:flex: 0 1 auto(不拉伸,可收缩,初始大小由内容决定)。

3.6 单独对齐:align-self

.item {align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
  • 覆盖容器的 align-items 设置,单独控制某个项目的交叉轴对齐方式。

4. 实战示例

4.1 水平居中导航栏

<div class="nav"><div>Home</div><div>About</div><div>Contact</div>
</div>
.nav {display: flex;justify-content: center; /* 水平居中 */gap: 20px; /* 项目间距 */
}

4.2 圣杯布局(Header + Content + Footer)

<div class="container"><header>Header</header><main>Content</main><footer>Footer</footer>
</div>
.container {display: flex;flex-direction: column;min-height: 100vh;
}
main {flex: 1; /* 填充剩余空间 */
}

4.3 等高卡片

.card-container {display: flex;gap: 10px;
}
.card {flex: 1; /* 等宽 + 等高 */background: #f0f0f0;
}

5. Flex 布局的优缺点

优点

  • 简单易用:比浮动、定位更直观。
  • 响应式友好:轻松适配不同屏幕尺寸。
  • 对齐灵活:内置多种对齐方式。

缺点

  • 一维布局:不适合复杂二维布局(需用 Grid)。
  • 旧浏览器兼容性:IE 11 部分支持(需加 -ms- 前缀)。

6. 总结

  • Flex 布局 = 容器 + 项目:通过 display: flex 激活。
  • 主轴与交叉轴:控制排列方向和对齐方式。
  • 常用场景:导航栏、卡片布局、垂直居中、等分布局等。
http://www.lryc.cn/news/589276.html

相关文章:

  • labview生成exe应用程序常见问题
  • RocketMq 启动_源码分析
  • 程序“夯住“的常见原因
  • 高并发四种IO模型的底层原理
  • linux的磁盘满了清理办法
  • Java 大视界 -- Java 大数据机器学习模型在金融风险传染路径分析与防控策略制定中的应用(347)
  • gitee某个分支合并到gitlab目标分支
  • 3D数据:从数据采集到数据表示,再到数据应用
  • pc浏览器页面语音播报功能
  • 【C++】神奇的AVL树
  • Java项目:基于SSM框架实现的学生档案管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • k8s之Attach 和 Mount
  • Oracle日期时间函数说明及与MySql区别说明
  • 设计模式一: 模板方法模式 (Template Method Pattern)
  • GeoTools 工厂设计模式
  • MySQL高级篇(二):深入理解数据库事务与MySQL锁机制
  • 智驾芯片软件分层测试
  • Spring 中 @Component和@Bean注解的区别
  • 背包问题(包括路径统计)
  • zynq分频的例子
  • HTML的重要知识
  • 自己训练大模型?MiniMind 全流程解析 (一) 预训练
  • Vue框架之模板语法(插值表达式、指令系统、事件处理和表单绑定)全面解析
  • 代码随想录Day21:二叉树(修剪二叉搜索树、将有序数组转换为二叉搜索树、把二叉搜索树转换为累加树——全递归版本以及总结)
  • JavaDemo——使用CGLIB动态代理
  • 46. 携带研究材料(01背包二维数组)
  • (李宏毅)deep learning(五)--learning rate
  • Spring应用抛出NoHandlerFoundException、全局异常处理、日志级别
  • 游戏加速器核心技术:动态超发
  • Postman + Newman + Jenkins 接口自动化测试