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

Flex弹性布局

Flexible Box(弹性盒子)布局是CSS3中引入的一种强大的布局模式,它能够更高效地处理容器内项目的排列、对齐和空间分配问题,特别适合构建响应式设计。

基本属性

  • Flex容器:设置了display: flexdisplay: inline-flex的父元素
  • Flex项目:Flex容器的直接子元素
  • 主轴:Flex项目的默认排列方向
  • 副轴:与主轴垂直的方向
/* 定义一个Flex容器 */
.container {display: flex; /* 或 inline-flex */
}

拥有flex属性的容器内的直接子元素自动成为Flex项目

##Flex容器属性详解

1. flex-direction

设置主轴的方向,元素跟着主轴排列
默认主轴为x水平向右,侧轴为y水平向下

.container {flex-direction: row | row-reverse | column | column-reverse;
}

在这里插入图片描述

2. flex-wrap

控制项目是否充满后换行

.container {flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(默认):不换行,会在充满后压缩项目
  • wrap:换行,第一行在上方
  • wrap-reverse:换行,第一行在下方

3. flex-flow

flex-directionflex-wrap的简写

.container {flex-flow: column wrap;
}

4. justify-content

定义项目在主轴上的对齐方式

.container {justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}

在这里插入图片描述

5. align-items

定义项目在副轴上的对齐方式(单行有效)

.container {align-items: stretch | flex-start | flex-end | center | baseline;
}
  • stretch(默认):拉伸填满容器高度
  • flex-start:顶部对齐
  • flex-end:底部对齐
  • center:垂直居中
  • baseline:项目的第一行文字基线对齐

6. align-content

定义多根轴线的对齐方式(多行有效)

.container {align-content: stretch | flex-start | flex-end | center | space-between | space-around;
}

属性值与justify-content类似->多了一个stretch
在这里插入图片描述

Flex子元素属性

1. order

定义项目的沿主轴的前后排列顺序,而不是显示权重排列顺序,数值越小越靠前,可以为负整数。

.item {order:number; /* 默认0 */
}

2. flex

用来代表分配剩余空间所占份数

.item {flex: number;
}

若flex为1,则代表该项目在剩余空间(父元素空间-已写死空间)占有1份。

3. align-self

允许单个项目在侧轴有与其他项目不一样的对齐方式

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

Flex布局注意事项

1. 误区

  • 不是所有场景都适合Flex:简单的一维布局用Flex,复杂二维布局考虑Grid
  • 过度使用flex: 1:可能导致内容挤压。

2. 性能考量

  • 大规模使用Flex布局(尤其是嵌套)可能影响渲染性能
  • 避免在滚动容器内使用复杂的Flex布局

3. flex常用技巧

  1. 垂直居中
.container {display: flex;<!--在主轴上居中-->justify-content: center;<!--在副轴上居中-->align-items: center;
}
  1. 等高分栏
.container {display: flex;
}
.item {
<!--多个item均占一份则可以实现等宽/等高-->flex: 1;
}
  1. 底部对齐
        .container {display: flex;flex-direction: column;background-color: blue;height: 400px;}.content {flex: 1;background-color: aqua;}
<body>
<div class="container">123<div class="content">1</div><div class="content">2</div><div class="content">3</div><div class="content">4</div><div class="content">5</div>123
</div>
</body>

效果:
在这里插入图片描述
删去4后:
在这里插入图片描述

Flex布局实战案例

1. 经典三栏布局(圣杯布局)

<div class="container"><header>Header</header><main><article>Main Content</article><nav>Navigation</nav><aside>Sidebar</aside></main><footer>Footer</footer>
</div>

css:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
跟随视口而变化

2. 响应式导航栏

<nav class="navbar"><div class="logo">Logo</div><ul class="nav-links"><li><a href="#">Home</a></li><li><a href="#">About</a></li><li><a href="#">Services</a></li><li><a href="#">Contact</a></li></ul><div class="menu-toggle"></div>
</nav>
.navbar {display: flex;justify-content: space-between;align-items: center;padding: 1rem;background-color: pink;}
.nav-links {display: flex;gap: 1rem;list-style: none;background-color: aqua;}
.menu-toggle {display: none;
}@media (max-width: 768px) {.nav-links {display: none;}.menu-toggle {display: block;}
}

随着视口变化而改变大小与显示:
在这里插入图片描述
在这里插入图片描述

总结

Flex布局是现代CSS中不可或缺的工具,它:

  • 简化了复杂布局的实现
  • 提供了强大的空间分配能力
  • 增强了响应式设计的灵活性

掌握Flex布局的关键在于理解主轴/副轴的概念,以及如何通过容器和项目的属性组合来实现各种布局需求。

http://www.xdnf.cn/news/10581.html

相关文章:

  • langGraph多Agent
  • 【C语言入门级教学】冒泡排序和指针数组
  • ShardingSphere 分片策略深度解析
  • 导入典籍数据
  • 《仿盒马》app开发技术分享-- 购物车业务逻辑完善(端云一体)
  • java 多线程
  • 基于贝叶斯优化神经网络的光伏功率预测综述
  • Java JVM 内存模型详解
  • LeetCode 付费题157. 用 Read4 读取 N 个字符解题思路
  • deep forest安装及使用教程
  • 强大的PDF编辑工具,操作方便 ,长久使用
  • 第1天:认识RNN及RNN初步实验(预测下一个数字)
  • 【C盘瘦身】Docker安装目录占用C盘过大,一键移动给C盘瘦身
  • 大数据-275 Spark MLib - 基础介绍 机器学习算法 集成学习 随机森林 Bagging Boosting
  • 8、电解电容—数据手册解读
  • Unity使用Lua框架和C#框架开发游戏的区别
  • 2022年上半年软件设计师下午试题
  • 6月2日星期一今日早报简报微语报早读
  • 知识图谱系列(5):表示学习
  • 内网应用如何实现外网访问?无公网IP本地端口网址服务提供互联网连接
  • HCIP:MPLS LDP的原理和配置
  • Go开发简历优化指南
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月2日第96弹
  • 高压电绝缘子破损目标检测数据集简介与应用
  • MDP的curriculums部分
  • GNOME开始菜单
  • gcc编译构建流程-动态链接库
  • YOLO机械臂丨使用unity搭建仿真环境,YOLO算法识别,Moveit2控制
  • 残差神经网络ResNet
  • Webpack依赖