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

深入理解Flexbox:弹性盒子布局详解

深入理解Flexbox:弹性盒子布局详解

      • 一、Flexbox 的基本概念
      • 二、Flexbox 的核心属性
        • 1. `display: flex`
        • 2. `flex-direction`
        • 3. `flex-wrap`
        • 4. `justify-content`
        • 5. `align-items`
        • 6. `flex`
      • 三、Flexbox 的实际应用
        • 1. 创建响应式三列布局
        • 2. 实现垂直居中
        • 3. 复杂布局的嵌套使用
      • 四、Flexbox 的优势与局限
        • 优势
        • 局限
      • 五、总结与扩展

在现代网页开发中,布局是至关重要的一环。传统的布局方法,如浮动(float)和定位(position),虽然功能强大,但在处理复杂的多列布局、对齐问题以及响应式设计时显得力不从心。为了解决这些问题,CSS 引入了弹性盒子(Flexbox)这一强大的布局工具。本文将详细介绍 Flexbox 的基本概念、核心属性以及实际应用,帮助你轻松掌握这一布局神器。


一、Flexbox 的基本概念

Flexbox 是一种一维布局系统,主要用于按行或按列排列元素。它的核心思想是允许元素在父容器中“膨胀”或“收缩”,以适应可用空间。Flexbox 的主要优势在于:

  • 灵活的布局:能够轻松实现复杂的多列布局、对齐以及响应式设计。
  • 简化代码:相比于传统的浮动布局,Flexbox 的代码更简洁、易读。
  • 跨浏览器兼容性:现代浏览器(如 Chrome、Firefox、Edge 等)均支持 Flexbox。

Flexbox 的基本术语包括:

  • Flex 容器(Flex Container):设置为 display: flex 的父元素。
  • Flex 项目(Flex Item):Flex 容器的直接子元素。
  • 主轴(Main Axis):Flex 项目排列的方向,可以是水平或垂直。
  • 交叉轴(Cross Axis):与主轴垂直的方向。

二、Flexbox 的核心属性

1. display: flex

这是启用 Flexbox 的基础。将父元素的 display 属性设置为 flex,即可使其子元素成为 Flex 项目。

.container {display: flex;
}
2. flex-direction

该属性用于指定主轴的方向。默认值为 row(水平排列),也可以设置为 column(垂直排列)、row-reverse(反向水平排列)或 column-reverse(反向垂直排列)。

.container {flex-direction: column;
}
3. flex-wrap

默认情况下,Flex 项目会尝试在一行或一列中排列。当空间不足时,可以设置 flex-wrapwrap,使项目换行或换列。

.container {flex-wrap: wrap;
}
4. justify-content

该属性用于控制 Flex 项目在主轴上的对齐方式。常用值包括:

  • flex-start:左对齐(默认值)。
  • flex-end:右对齐。
  • center:居中对齐。
  • space-between:两端对齐,项目之间间隔相等。
  • space-around:项目之间间隔相等,且两端留有空间。
.container {justify-content: space-around;
}
5. align-items

该属性用于控制 Flex 项目在交叉轴上的对齐方式。常用值包括:

  • flex-start:顶部对齐。
  • flex-end:底部对齐。
  • center:居中对齐。
  • stretch:拉伸以填满容器(默认值)。
.container {align-items: center;
}
6. flex

flex 是一个复合属性,用于控制 Flex 项目的缩放行为。它由三个部分组成:

  • flex-grow:定义项目在主轴方向上的扩展比例。
  • flex-shrink:定义项目在主轴方向上的收缩比例。
  • flex-basis:定义项目在主轴方向上的基准大小。

通常,我们可以直接使用 flex 属性的缩写形式:

.item {flex: 1 1 200px;
}

三、Flexbox 的实际应用

1. 创建响应式三列布局

以下是一个简单的三列布局示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Flexbox 三列布局</title><style>.container {display: flex;justify-content: space-between;padding: 20px;}.item {flex: 1;min-width: 200px;padding: 10px;background-color: #f0f0f0;border-radius: 5px;margin: 10px;}</style>
</head>
<body><div class="container"><div class="item">第一列</div><div class="item">第二列</div><div class="item">第三列</div></div>
</body>
</html>
2. 实现垂直居中

Flexbox 可以轻松实现垂直居中对齐:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Flexbox 垂直居中</title><style>.container {display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #e6e6e6;}.item {padding: 20px;background-color: #fff;border-radius: 5px;text-align: center;}</style>
</head>
<body><div class="container"><div class="item">垂直居中内容</div></div>
</body>
</html>
3. 复杂布局的嵌套使用

Flexbox 支持嵌套使用,可以实现复杂的多级布局:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Flexbox 嵌套布局</title><style>.outer-container {display: flex;justify-content: space-between;padding: 20px;}.inner-container {display: flex;flex-direction: column;flex: 1;min-width: 200px;padding: 10px;background-color: #f0f0f0;border-radius: 5px;}.item {padding: 10px;background-color: #fff;margin: 5px 0;border-radius: 3px;}</style>
</head>
<body><div class="outer-container"><div class="inner-container"><div class="item">第一列内容</div><div class="item">第一列内容</div></div><div class="inner-container"><div class="item">第二列内容</div><div class="item">第二列内容</div></div><div class="inner-container"><div class="item">第三列内容</div><div class="item">第三列内容</div></div></div>
</body>
</html>

四、Flexbox 的优势与局限

优势
  • 简化布局:Flexbox 可以轻松实现复杂的布局,减少对浮动和定位的依赖。
  • 响应式设计:Flexbox 的弹性机制使其非常适合响应式设计。
  • 对齐能力:Flexbox 提供了强大的对齐功能,可以轻松实现居中、两端对齐等效果。
局限
  • 学习曲线:Flexbox 的一些概念(如主轴、交叉轴)需要一定的学习时间。
  • 浏览器兼容性:虽然现代浏览器均支持 Flexbox,但在某些旧版本浏览器中可能存在兼容性问题。

五、总结与扩展

Flexbox 是现代网页开发中不可或缺的布局工具。通过本文的学习,你已经掌握了 Flexbox 的基本概念、核心属性以及实际应用。在实际开发中,Flexbox 可以帮助你轻松实现复杂的布局需求,提升开发效率。

如果你希望进一步学习 Flexbox,可以参考以下资源:

  • CSS Flexbox 官方文档
  • Flexbox 在线示例

相关文章:

深入理解Flexbox:弹性盒子布局详解

深入理解Flexbox&#xff1a;弹性盒子布局详解 一、Flexbox 的基本概念二、Flexbox 的核心属性1. display: flex2. flex-direction3. flex-wrap4. justify-content5. align-items6. flex 三、Flexbox 的实际应用1. 创建响应式三列布局2. 实现垂直居中3. 复杂布局的嵌套使用 四、…...

android Camera 的进化

引言 Android 的camera 发展经历了3个阶段 &#xff1a; camera1 -》camera2 -》cameraX。 正文 Camera1 Camera1 的开发中&#xff0c;打开相机&#xff0c;设置参数的过程是同步的&#xff0c;就跟用户实际使用camera的操作步骤一样。但是如果有耗时情况发生时&#xff0c;会…...

仿真设计|基于51单片机的氨气及温湿度检测报警

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;LCD1602液晶第一行显示当前的氨气值&#xff0c;第二行显示当前的温度…...

关于EDGE IMPULSE的使用与适配,包含如何学习部署在对应的板子

创建好账号后&#xff0c;可以打开主页新建一个工程 跳出这个选no就可以不用标label直接整张图训练&#xff0c;要更改可以去dashboard》labeling method改 然后在这个工程中选择添加自己的照片等数据&#xff0c;他支持这些格式的数据我们现在一般是用在openmv opencv yolo 等…...

【Python蓝桥杯备赛宝典】

文章目录 一、基础数据结构1.1 链表1.2 队列1.3 栈1.4 二叉树1.5 堆二、基本算法2.1 算法复杂度2.2 尺取法2.3 二分法2.4 三分法2.5 倍增法和ST算法2.6 前缀和与差分2.7 离散化2.8 排序与排列2.9 分治法2.10贪心法1.接水时间最短问题2.糖果数量有限问题3.分发时间最短问题4.采摘…...

数据结构 前缀中缀后缀

目录 前言 一&#xff0c;前缀中缀后缀的基本概念 二&#xff0c;前缀与后缀表达式 三&#xff0c;使用栈实现后缀 四&#xff0c;由中缀到后缀 总结 前言 这里学习前缀中缀后缀为我们学习树和图做准备&#xff0c;这个主题主要是对于算术和逻辑表达式求值&#xff0c;这…...

【cocos官方案例改】跳跃牢猫

自制游戏【跳跃牢烟】 案例解析 案例需求&#xff0c;点击鼠标控制白块左右。 资源管理器部分 在body创建一个2d精灵用作玩家。 在地下在创建一个2d精灵用来代表地面。 在body下挂在脚本。 全部脚本如下 &#xff08;在二次进行复刻时候&#xff0c;发现把代码复制上去无法…...

基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)

一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…...

Day51:type()函数

在 Python 中&#xff0c;type() 是一个内置函数&#xff0c;用于返回对象的类型。它可以用于检查变量的类型&#xff0c;也可以用于动态创建新的类型。今天&#xff0c;我们将深入了解 type() 函数的使用方法。 1. 使用 type() 获取变量的类型 最常见的使用方式是将一个对象…...

因果推断与机器学习—用机器学习解决因果推断问题

Judea Pearl 将当前备受瞩目的机器学习研究戏谑地称为“仅限于曲线拟合”,然而,曲线拟合的实现绝非易事。机器学习模型在图像识别、语音识别、自然语言处理、蛋白质分子结构预测以及搜索推荐等多个领域均展现出显著的应用效果。 在因果推断任务中,在完成因果效应识别之后,需…...

计算机网络一点事(21)

第四章 网络层 功能&#xff1a;服务传输层&#xff0c;封装ip数据报&#xff08;主机到主机&#xff09; IP地址以32b表示&#xff0c;以8b为一组记十进制数 异构网络互连&#xff1a;网络结构&#xff0c;主机类型不同 路由器相互配合出IP数据报生成表&#xff0c;根据表…...

springboot使用rabbitmq

使用springboot创建rabbitMQ的链接。 整个项目结构如下&#xff1a; 1.maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.4.1</version> </dependency>application.y…...

【微服务与分布式实践】探索 Eureka

服务注册中心 心跳检测机制&#xff1a;剔除失效服务自我保护机制 统计心跳失败的比例在15分钟之内是否低于85%&#xff0c;如果出现低于的情况&#xff0c;Eureka Server会将当前的实例注册信息保护起来&#xff0c;让这些实例不会过期。当节点在短时间内丢失过多的心跳时&am…...

Day48:获取字典键的值

在 Python 中&#xff0c;字典是一种无序的集合类型&#xff0c;它以键-值对的形式存储数据。字典的每个元素都有一个唯一的键&#xff0c;并且每个键都对应一个值。获取字典中的值是字典操作的常见任务&#xff0c;今天我们将学习如何从字典中获取键对应的值。 1. 使用方括号…...

Java锁自定义实现到aqs的理解

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解锁&#xff0c;能自定义实现锁通过自定义锁的实现复习Thread和Object的相关方法开始尝试理解Aqs, 这样后续基于Aqs的的各种实现将能更好的理解 目录 锁的…...

仿真设计|基于51单片机的温度与烟雾报警系统

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;LCD1602实时监测及显示温度值和烟雾浓度值&#xff1b; &#xff08;2…...

文件读写操作

写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式&#xff1a;1.ios::out、ios::trunc 清除文件内容后打开2.ios:…...

【后端开发】字节跳动青训营Cloudwego脚手架

Cloudwego脚手架使用 cwgo脚手架 cwgo脚手架 安装的命令&#xff1a; GOPROXYhttps://goproxy.cn/,direct go install github.com/cloudwego/cwgolatest依赖thriftgo的安装&#xff1a; go install github.com/cloudwego/thriftgolatest编辑echo.thrift文件用于生成项目&…...

SQL UCASE() 函数详解

SQL UCASE() 函数详解 在SQL中&#xff0c;UCASE() 函数是一个非常有用的字符串处理函数&#xff0c;它可以将字符串中的所有小写字母转换为大写字母。本文将详细介绍UCASE() 函数的用法、语法、示例以及其在实际应用中的优势。 一、UCASE() 函数简介 UCASE() 函数是SQL标准…...

99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)

目录 0. 承前1. 简述&#xff1a;价格指数对比2. 比喻&#xff1a;两大指数对比2.1 简单对比2.2 生动比喻 3. 实际应用3.1 价格传导现象 4. 总结5. 有趣的对比6. 数据获取实现代码7. 数据可视化实现代码 0. 承前 本文主旨&#xff1a; 本文使用小卖部比喻PPI和CPI&#xff0c;…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...