【CSS】flex布局

Flex 布局 (也称为 弹性盒子布局)。

Flexible Box 模型,通常称为 Flexbox,是一种为一维布局设计的 CSS 布局模式。它旨在提供一种更有效的方式来对容器中的元素进行排列、对齐和分配空间,即使它们的大小是未知或动态的。

文章目录

      • [一、什么是 Flex 布局?](#一、什么是 Flex 布局?)
      • 二、基本概念和术语
      • [三、Flex 容器的属性(作用于父元素)](#三、Flex 容器的属性(作用于父元素))
      • [四、Flex 项目的属性(作用于子元素)](#四、Flex 项目的属性(作用于子元素))
      • 五、一个完整的示例
      • 总结

一、什么是 Flex 布局?

核心思想:通过赋予容器控制其子元素(弹性项目)高度/宽度和顺序的能力,来填充可用空间。其核心是让容器能够改变其子项目的宽度、高度和顺序,以最佳方式填充可用空间(主要是为了适应各种显示设备和屏幕尺寸)。

主要特征

  • 一维布局:Flex 布局一次只能处理一个维度(行或列)上的布局。这与处理行和列的 CSS Grid(二维布局)形成对比。
  • 两个轴 :Flex 布局基于主轴交叉轴
    • 主轴 :由 flex-direction 属性定义的方向(默认为水平,从左到右)。
    • 交叉轴:与主轴垂直的方向。

二、基本概念和术语

要使用 Flex 布局,你需要理解两个基本组件:

  1. Flex 容器 :设置了 display: flexdisplay: inline-flex 的父元素。

  2. Flex 项目:Flex 容器内的直接子元素。

    项目 1
    项目 2
    项目 3

三、Flex 容器的属性(作用于父元素)

这些属性控制着容器内所有项目的整体行为。

属性 作用 常用值
display 定义一个 Flex 容器。 flex(块级容器) inline-flex(行内容器)
flex-direction 定义主轴的方向,即项目的排列方向。 row(默认,水平从左到右), row-reverse(水平从右到左), column(垂直从上到下), column-reverse(垂直从下到上)
flex-wrap 定义项目是否换行。 nowrap(默认,不换行), wrap(换行), wrap-reverse(反向换行)
justify-content 定义项目在主轴上的对齐方式。 flex-start(默认,左对齐), flex-end(右对齐), center(居中), space-between(两端对齐,项目间间隔相等), space-around(每个项目两侧的间隔相等), space-evenly(项目与项目、项目与边框的间隔都相等)
align-items 定义项目在交叉轴上的对齐方式(单行)。 stretch(默认,拉伸填满容器高度), flex-start(顶部对齐), flex-end(底部对齐), center(垂直居中), baseline(按项目第一行文字的基线对齐)
align-content 定义了多根轴线的对齐方式(多行)。如果项目只有一根轴线,该属性不起作用。 stretch, flex-start, flex-end, center, space-between, space-around, space-evenly

flex-flow 简写属性 :是 flex-directionflex-wrap 的简写形式。

  • 语法:flex-flow: <flex-direction> || <flex-wrap>;
  • 示例:flex-flow: row wrap;

四、Flex 项目的属性(作用于子元素)

这些属性控制单个项目在容器内的行为。

属性 作用 常用值
order 定义项目的排列顺序。数值越小,排列越靠前,默认为 0。 <integer>(整数,如 -1, 0, 1, 2)
flex-grow 定义项目的放大比例,默认为 0(即如果存在剩余空间,也不放大)。 <number>(数字,如 0, 1, 2)
flex-shrink 定义项目的缩小比例,默认为 1(即如果空间不足,该项目将缩小)。 <number>(数字,如 0, 1, 2)
flex-basis 定义在分配多余空间之前,项目占据的主轴空间。浏览器根据这个属性计算是否有多余空间。 auto(默认,项目本来的大小), 长度值(如 20%, 250px
align-self 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。 auto(继承父容器的 align-items), stretch, flex-start, flex-end, center, baseline

flex 简写属性 :是 flex-grow, flex-shrinkflex-basis 的简写。

  • 语法:flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
  • 推荐使用简写,因为它可以智能地设置其他值。
  • 常用值:
    • flex: initial:等同于 flex: 0 1 auto。(不放大,可缩小,初始大小)
    • flex: auto:等同于 flex: 1 1 auto。(可放大,可缩小)
    • flex: none:等同于 flex: 0 0 auto。(不放大,不缩小)
    • flex: 1:等同于 flex: 1 1 0%。(常用,平均分配空间)

五、一个完整的示例

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <style>
        .container {
            display: flex; /* 定义 Flex 容器 */
            flex-direction: row; /* 主轴为水平方向 */
            flex-wrap: wrap; /* 允许换行 */
            justify-content: space-around; /* 主轴对齐方式 */
            align-items: center; /* 交叉轴对齐方式(单行) */
            height: 200px;
            background-color: #f0f0f0;
        }
        .item {
            flex: 1; /* 每个项目可伸缩,平均分配空间 */
            min-width: 100px; /* 设置最小宽度,防止过小 */
            height: 60px;
            margin: 10px;
            background-color: tomato;
            text-align: center;
            line-height: 60px;
            color: white;
        }
        .item-special {
            flex: 2; /* 这个项目占据的空间是其他的两倍 */
            background-color: steelblue;
            align-self: flex-end; /* 这个项目自己底部对齐 */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item item-special">3 (特殊)</div>
        <div class="item">4</div>
    </div>
</body>
</html>

总结

Flex 布局是现代 CSS 的基石,它极大地简化了以往非常棘手的布局问题(如垂直居中、等高布局、圣杯布局等)。掌握 Flex 布局是前端开发者的必备技能。

相关推荐
彩旗工作室2 小时前
用 Supabase 打造统一认证中心:为多应用提供单点登录(SSO)
服务器·前端·数据库
EveryPossible3 小时前
第一版代码
前端·javascript·css
ObjectX前端实验室3 小时前
【图形编辑器架构】渲染层篇 — 从 React 到 Canvas 的声明式渲染实现
前端·计算机图形学·图形学
java水泥工3 小时前
基于Echarts+HTML5可视化数据大屏展示-智慧消防大屏
前端·echarts·html5
杨超越luckly3 小时前
HTML应用指南:利用POST请求获取全国索尼体验型零售店位置信息
前端·arcgis·html·数据可视化·门店数据
ObjectX前端实验室3 小时前
【图形编辑器架构】节点树篇 — 从零构建你的编辑器数据中枢
前端·计算机图形学·图形学
ikun778g4 小时前
uniapp设置安全区
前端·javascript·vue.js·ui·uni-app
IT_陈寒4 小时前
React Hooks 实战:这5个自定义Hook让我开发效率提升了40%
前端·人工智能·后端
三月的一天4 小时前
React单位转换系统:设计灵活的单位系统与单位系统转换方案
前端·javascript·react.js