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

弹性布局 Flexbox

Flexbox(Flexible Box Layout,弹性盒子布局)是 CSS3 提供的一种现代布局方式,用于更高效地分配容器内的空间,并实现灵活的响应式布局。它特别适合处理一维布局(行或列方向排列的元素)。

一、Flexbox 基本概念

1、Flex 容器(Flex Container)
通过 display: flex 或 display: inline-flex 将一个元素设为 Flex 容器,其子元素自动成为 Flex 项目(Flex Items)。
.container {display: flex; /* 或 inline-flex */
}
2、Flex 项目(Flex Items)
Flex 容器的直接子元素自动成为 Flex 项目,可以灵活调整大小、顺序和对齐方式。
<div class="container"><div class="item">Item 1</div><div class="item">Item 2</div><div class="item">Item 3</div>
</div>

二、Flex 容器属性

1、主轴方向:flex-direction

定义 Flex 项目的排列方向(主轴方向):

row(默认):水平排列(左 → 右)row-reverse:水平反向排列(右 → 左)column:垂直排列(上 → 下)column-reverse:垂直反向排列(下 → 上)
.css{flex-direction: row | row-reverse | column | column-reverse;
}
2、换行方式:flex-wrap

控制 Flex 项目是否换行:

nowrap(默认):不换行(可能溢出)wrap:换行(从上到下)wrap-reverse:反向换行(从下到上)
.container {flex-wrap: nowrap | wrap | wrap-reverse;
}
3、主轴对齐:justify-content

控制 Flex 项目在主轴上的对齐方式:

flex-start(默认):左对齐flex-end:右对齐center:居中对齐space-between:两端对齐,项目间隔相等space-around:项目两侧间隔相等space-evenly:所有间隔均等
.container {justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
4、交叉轴对齐:align-items

控制 Flex 项目在交叉轴上的对齐方式:

stretch(默认):拉伸填满容器高度flex-start:顶部对齐flex-end:底部对齐center:垂直居中baseline:基线对齐
.container {align-items: stretch | flex-start | flex-end | center | baseline;
}
5、多行对齐:align-content

控制多行 Flex 项目在交叉轴上的对齐方式(仅当 flex-wrap: wrap 时生效):

stretch(默认):拉伸填满剩余空间flex-start:顶部对齐flex-end:底部对齐center:垂直居中space-between:两端对齐space-around:均匀分布
.container {align-content: stretch | flex-start | flex-end | center | space-between | space-around;
}

三、项目属性

1、项目排序:order

控制 Flex 项目的排列顺序(数值越小越靠前,默认 0):

.item {order: 0; /* 默认值 */
}
2、项目伸缩比例:flex-grow

定义 Flex 项目的放大比例(默认 0,不放大):

.item {flex-grow: 1; /* 剩余空间按比例分配 */
}
3、项目收缩比例:flex-shrink

定义 Flex 项目的收缩比例(默认 1,空间不足时收缩):

.item {flex-shrink: 1; /* 默认收缩 */
}
4、项目基准大小:flex-basis

定义 Flex 项目的初始大小(类似 width,但优先级更高):

.item {flex-basis: 200px | auto; /* 默认 auto */
}
5、简写属性:flex

flex-grow + flex-shrink + flex-basis 的简写:

.item {flex: 1 1 auto; /* 默认值 */
}
/* 常用写法 */
.item {flex: 1; /* 等同于 flex: 1 1 0 */
}
6、单独对齐:align-self

覆盖 align-items,单独设置某个 Flex 项目的对齐方式:

.item {align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

四、Flexbox 常见布局示例

1、水平居中
.container {display: flex;justify-content: center;
}
2、垂直居中
.container {display: flex;align-items: center;
}
3、圣杯布局(Header + Main + Footer)
<div class="container"><header>Header</header><main>Main Content</main><footer>Footer</footer>
</div>
.container {display: flex;flex-direction: column;min-height: 100vh;
}
main {flex: 1; /* 占据剩余空间 */
}
4、等宽卡片布局
.container {display: flex;flex-wrap: wrap;
}
.item {flex: 1 1 200px; /* 最小宽度 200px,自动换行 */
}
5、Flexbox vs. Grid
特性FlexboxGrid
布局维度一维(行或列)二维(行 + 列)
适用场景组件内部布局整体页面布局
对齐控制主轴 + 交叉轴行 + 列 + 区域对齐
是否换行需要 flex-wrap天然支持多行/多列
6、浏览器兼容性

Flexbox 已被所有现代浏览器支持(包括 IE11+),但部分旧版本可能需要前缀:

.container {display: -webkit-flex; /* Safari 8-9 */display: flex; /* 标准写法 */
}
http://www.dtcms.com/a/336405.html

相关文章:

  • BEVFusion(2022-2023年)版本中文翻译解读+相关命令
  • Java项目架构设计:模块化、分层架构的实战经验
  • Linux(十六)——top命令详解
  • wrap go as a telnet client lib for c to implement a simple telnet client
  • 堆的实际应用场景
  • 【Virtual Globe 渲染技术笔记】8 顶点变换精度
  • C11期作业17(07.05)
  • Microsoft WebView2
  • AMBA-AXI and ACE协议详解(十)
  • Rust:DLL 输出对象的生命周期管理
  • 影刀初级B级考试大题2
  • STM32CUBEMX配置stm32工程
  • Linux学习-多任务(线程)
  • LangChain4j
  • 三分钟在VMware虚拟机安装winXP教程,开箱即用
  • HTTP0.9/1.0/1.1/2.0
  • linux下timerfd和posix timer为什么存在较大的抖动?
  • USB-A 3.2 和 USB-A 2.0的区别
  • 集成电路学习:什么是ORB方向性FAST和旋转BRIEF
  • 外贸电商选品方案的模型
  • 天地图应用篇: 增加缩放、比例尺控件
  • 集运业务突围:三大关键问题的智能化解决方案
  • 【数据结构与算法-Day 16】队列的应用:广度优先搜索(BFS)的基石与迷宫寻路实战
  • vulnhub-lampiao靶机渗透
  • 002.Redis 配置及数据类型
  • 安装pytorch3d后报和本机cuda不符
  • LLM、RAG、Agent知识点思维导图
  • 简单了解BeanFactory和FactoryBean的区别
  • AMBA-AXI and ACE协议详解(八)
  • Critic-V: VLM Critics Help Catch VLM Errors in Multimodal Reasoning(CVPR 2025)