Flex弹性布局详解

news2025/4/6 19:04:31

详解Flex弹性布局

  • 1. 什么是Flex布局
  • 2. Flex布局核心概念
    • 1)容器和属性定义
    • 2)主轴和交叉轴定义
    • 3)容器属性
    • 4)项目属性
  • 3. 优缺点

1. 什么是Flex布局

Flex全称为 “Flexible Box Layout”,即 “弹性盒布局”,旨在提供一种更有效的方式来布局、对齐和分配容器中项目之间的空间,即使它们的大小未知或动态变化。

2. Flex布局核心概念

1)容器和属性定义

容器:使用 display:flex 或 display:inline-flex 声明的元素为Flex弹性容器
项目:容器内的子元素自动成为Flex项目。注意: 项目只能是容器的顶层子元素(直属子元素),不包含项目的子元素

2)主轴和交叉轴定义

Flex布局主轴与交叉轴图示

主轴是Flex项目的排列方向,交叉轴则是垂直于主轴的方向。

  • 主轴(main axis):沿其布置子容器的从 main-start 开始到 main-end ,请注意,它不一定是水平的;这取决于 flex-direction 属性, main size 是它可放置的宽度,是容器的宽或高,取决于 flex-direction
  • 交叉轴(cross axis):垂直于主轴的轴称为交叉轴,它的方向取决于主轴方向,是主轴写满一行后另起一行的方向,从 cross-start到 cross-endcross size 是它可放置的宽度,是容器的宽或高,取决于 flex-direction

3)容器属性

  1. flex- direction 属性
    定义主轴的方向,也就是子项目元素排列的方向。

    .demo {
      display: flex;
      flex-direction: row | row-reverse | column | column-reverse;
    }
    
    • row(默认值):主轴为水平方向,起点在左端(项目从左往右排列)。
    • row-reverse:主轴为水平方向,起点在右端(项目从右往左排列)。
    • column:主轴为垂直方向,起点在上沿(项目从上往下排列)。
    • column-reverse:主轴为垂直方向,起点在下沿(项目从下往上排列)。
  2. flex-wrap 属性
    设置子容器的换行方式,默认子项目元素都将排列一行nowrap

    .demo {
      display: flex;
      flex-wrap: nowrap | wrap | wrap-reverse;
    }
    
    • nowrap(默认):不换行(列)。
    • wrap:主轴为横向时:从上到下换行。主轴为纵向时:从左到右换列。
    • wrap-reverse:主轴为横向时:从下到上换行。主轴为纵向时:从右到左换列。
  3. flex-flow 属性
    flex-direction 和 flex-wrap 属性的简写,默认值为 row nowrap

    .demo {
    	display: flex;
     	flex-flow: <flex-direction> <flex-wrap>;
    }
    
  4. 项目群主轴对齐 justify-content
    定义了项目在主轴上的对齐方式。

    .demo {
       display: flex;
       justify-content: flex-start | flex-end | center | space-between | space-around;
    }
    
    • flex-start(默认):与主轴的起点对齐。
    • flex-end:与主轴的终点对齐
    • center:与主轴的中点对齐。
    • space-between:两端对齐主轴的起点与终点,项目之间的间隔都相等。
    • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
  5. 项目群交叉轴对齐 align-items 属性
    定义项目在交叉轴上如何对齐。纵向交叉轴始终自上而下,横向交叉轴始终自左而右。

    .demo {
      	display: flex;
      	align-items: flex-start | flex-end | center | baseline | stretch;
    }
    
    • flex-start:交叉轴的起点对齐。
    • flex-end:交叉轴的终点对齐。
    • center:交叉轴的中点对齐。
    • baseline: 项目的第一行文字的基线对齐。
    • stretch(默认值):如果项目未设置高度或设为auto,项目将占满整个容器的高度。
  6. align-content属性
    定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用

    .demo {
        display: flex;
        align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    }
    
    • flex-start:与交叉轴的起点对齐。
    • flex-end:与交叉轴的终点对齐。
    • center:与交叉轴的中点对齐。
    • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
    • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
    • stretch(默认值):主轴线占满整个交叉轴。

4)项目属性

  1. order属性
    定义项目的排列顺序。数值越小,排列越靠前,默认为0。
    .child {
        order: <integer>;
    }
    
  2. flex-grow属性
    定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
    .child {
        flex-grow: <number>; /* default 0 */
    }
    
  3. flex-shrink属性
    定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。负值对该属性无效。如果flex-shrink值为0,表示该项目不收缩。
    .child {
        flex-shrink: <number>; /* default 1 */
    }
    
  4. flex-basis属性
    定义了在分配多余空间之前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。当设置了flex-basis的值并且flex-shrink: 0; width的设置就不起作用了
    .child {
        flex-basis: <length> | auto; /* default auto */
    }
    
  5. flex属性
    flex-grow,flex-shrink和flex-basis的简写,默认值为 0 1 auto后两个属性可选。该属性有两个快捷值: auto( 1 1 auto)和none( 0 0 auto)
    .child {
        flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
    }
    
  6. align-self属性
    允许单个项目有与其他项目不一样的对齐方式。可覆盖align-items属性,默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等于strechalign-self属性有6个值,除了auto,其他都与align-items属性完全一致。
    .child {
        align-self: auto | flex-start | flex-end | center | baseline | stretch;
    }
    

3. 优缺点

  • 优点

    Flex 布局是一种新型的 CSS 布局模式,它主要用于弹性盒子布局。相比于传统的布局方式,它更加灵活,易于调整,也更加适应不同的设备和屏幕尺寸。允许我们在一个容器内对子元素进行灵活的排列、对齐和空间分配。

  • 缺点

    Flex布局的主要缺点是兼容性问题。Flex布局是CSS3的一部分,因此在一些老旧的浏览器中可能不被支持或支持不完全。此外,Flex布局相对较新,因此可能需要一些时间来理解和掌握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java应用CPU飙升和死锁排查实战教程

引言 在日常开发中&#xff0c;我们可能会遇到Java应用CPU飙升和死锁的问题。本文将通过实际案例&#xff0c;为大家介绍如何排查这些问题 Java应用CPU飙升和死锁排查步骤 先执行top命令&#xff0c;找到CPU占用比较高的进程再执行jstack 进程id > dump.txt找到进程中CPU…

软考127-上午题-【软件工程】-McCabe度量法

一、McCabe度量法 1-1、定义 McCabe 度量法是通过定义环路复杂度&#xff0c;建立程序复杂性的度量。 它基于一个程序模块的程序图中环路的个数。计算有向图G的环路复杂性的公式为&#xff1a; V(G) m - n 2 闭合区域 1 其中V(G)是有向图 G 中的环路个数&#xff0c;m 是…

[全网最全]2024MathorCup妈妈杯ABCD题成品论文33页+配套完整代码数据汇总

所有题目的每一小问解答&#xff08;含配套代码和数据&#xff09;都已经更新完毕&#xff0c;其中C题成品论文33页更新&#xff0c;B题论文更新&#xff0c;A题半成品论文21页完整解答代码数据。 &#xff08;完整版的资料放在文末了&#xff09; A题 移动通信网络中PCI规划问…

蓝桥杯嵌入式(G431)备赛笔记——第十一届第二场真题

关键代码&#xff1a;、 user.c: u32 adc_tick 0; // 定义一个无符号32位整型变量 adc_tick&#xff0c;用于记录上次ADC处理的时间戳 u32 r37_value 0; // 定义一个无符号32位整型变量 r37_value&#xff0c;用于存储ADC通道2的采样值 u32 r38_value 0; // 定义一个无符号…

AI常见关键术语

哈喽&#xff0c;大家好&#xff0c;我是小码哥&#xff0c;人工智能技术的快速发展带来了许多专业术语&#xff0c;这些词汇对于理解AI的工作原理和应用至关重要。以下是一些关键的AI术语&#xff0c;以及它们的专业解释和通俗总结。 一、核心概念 人工智能 (AI) 专业解释&am…

轻量带屏解决方案之恒玄芯片移植案例

本文章基于恒玄科技BES2600W芯片的欧智通 Multi-modal V200Z-R开发板 &#xff0c;进行轻量带屏开发板的标准移植&#xff0c;开发了智能开关面板样例&#xff0c;同时实现了ace_engine_lite、arkui_ui_lite、aafwk_lite、appexecfwk_lite、HDF等部件基于OpenHarmony LiteOS-M内…

AI预测体彩排3第3弹【2024年4月14日预测--第1套算法开始计算第3次测试】

今天咱们继续测试第1套算法和模型&#xff0c;今天是第3次测试&#xff0c;目前的测试只是为了记录和验证&#xff0c;不建议大家盲目跟买。我的目标仍旧是10次命中3-4次!~废话不多说了&#xff0c;直接上结果&#xff01; 2024年4月14日排3的七码预测结果如下 第一套&…

mybatis的一对多

业务&#xff1a;通常主表从表 查询&#xff0c;一对多关系&#xff0c;通常是先查主表&#xff0c;然后拿主表的 关联字段与从表关联。在代码中 通常用for 循环等方法给 从表的数据赋值&#xff0c;很麻烦&#xff0c;&#xff0c;&#xff0c;很麻烦。。。。 用mybatis的…

软考中级--网络工程师-计算机基础与理论第二节无线基础知识

IEEE802.11 规定了多种 WLAN 通信标准&#xff0c;其中&#xff08; &#xff09;与其他标准采用的频段不同&#xff0c;因而不能兼容。 A IEEE802.11a B IEEE802.11b C IEEE802.11g D IEEE802.11n 试题答案 正确答案&#xff1a; A 答案解析 IEEE 802.11a规定采用5GHz的 ISM频…

Python | Leetcode Python题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; class Solution:# 翻转一个子链表&#xff0c;并且返回新的头与尾def reverse(self, head: ListNode, tail: ListNode):prev tail.nextp headwhile prev ! tail:nex p.nextp.next prevprev pp nexreturn tail, headdef reverseKGroup…

关于时频分析的一些事-答知乎问(一)

从信号的时频谱图中可以提取什么特征&#xff1f; 基于时频谱图的特征一般包括能量特征、时域和频域拓展特征以及时频内禀特征。 基于时频图的能量特征 基于时频图的特征中&#xff0c;能量特征是最简单的一种&#xff0c;通过分析时频谱图中的能量分布特性而获取信号的时频…

振兴国腾GM8775C MIPIDSI桥接到双 PORT LVDS

GM8775C描述&#xff1a; GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单 / 双通道 LVDS 功能&#xff0c;MIPI 支持 1/2/3/4 通道可选&#xff0c;每通道最高支持 1Gbps 速率&#xff0c;最大支持 4Gbps 速率。LVDS 时钟频率高达 154MHz &a…

SqlServer专题

目录 1&#xff0c;连接数据库 2&#xff0c;连接池 1.何为连接池&#xff1f; 2.连接池运行原理。 3.如何查看连接池&#xff1f; 4.连接池注意事项。 3&#xff0c;一般SQL语句。 4&#xff0c;控制语句 1.判断语句 2.循环语句 5&#xff0c;视图 1.使用…

vue-router 原理【详解】hash模式 vs H5 history 模式

hash 模式 【推荐】 路由效果 在不刷新页面的前提下&#xff0c;根据 URL 中的 hash 值&#xff0c;渲染对应的页面 http://test.com/#/login 登录页http://test.com/#/index 首页 核心API – window.onhashchange 监听 hash 的变化&#xff0c;触发视图更新 window.onhas…

黑马 javaweb 实现小案例

黑马 javaweb 实现案例 环境搭建 配置文件代码&#xff1a; spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/demo0413username: rootpassword: 123456mybatis:configuration:#配置mybatis的日志, 指定输出到控制台log-impl…

Java-博客系统(前后端交互)

目录 前言 博客系统基本情况 1 创建项目&#xff0c;引入依赖 2 数据库设计 2.1 分析 2.2 建库建表 3 封装数据库 3.1 在java目录下创建DBUtil类&#xff0c;通过这个类对数据库进行封装 3.2 在java目录下创建实体类&#xff08;博客类Blog&#xff09; 3.2 在java目录下创建…

Python里安装了库却报错找不到是怎么回事?

你在写代码的时候有没有遇到过这样的问题&#xff1a; 明明已经用pip安装好了一个Python模块&#xff0c; 但当你在代码中使用时&#xff0c;却给你报错说找不到这个库。 出现这种情况&#xff0c;绝大多数都是因为你安装模块的那个pip&#xff0c;和你执行代码时的python&…

机器学习—特征预处理和降维(四)

什么是特征预处理&#xff1f; 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 1包含内容 数值型数据的无量纲化&#xff1a; 归一化标准化 2特征预处理API sklearn. preprocessing为什么要进行归一化 or 标准化&#xff1f; 特征的单位或者大小相差较大…

UDP实现Mini版在线聊天室

实现原理 只有当客户端先对服务器发送online消息的时候&#xff0c;服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候&#xff0c;服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时&#xff0c;表明自己要下线了&#xff0c;此时服务器把该用…

keil参数删除后补写没有代码提示

代码提示快捷键 ctrlalt空格 如果按了之后没有提示&#xff0c;那说明跟输入法的快捷键冲突了。