W3C推荐的新布局模式 【CSS Flex布局】详解

article/2025/8/23 10:39:17

本文目录

  • 概述
  • 属性
    • 弹性容器的属性(父级)
      • display
      • flex-direction
      • flex-wrap
      • flex-flow
      • justify-content
      • align-items
      • align-content
      • gap, row-gap, column-gap
    • 弹性项目的属性(子项)
      • order
      • flex-grow
      • flex-shrink
      • flex-basis
      • flex
      • align-self
  • 示例



概述

在 flex 布局模型中,flex 容器的子级可以在任何方向上布局,并且可以“伸缩”它们的大小,要么增长以填充未使用的空间,要么缩小以避免溢出父级。孩子的水平和垂直对齐都可以很容易地操作。这些框的嵌套(水平内垂直,或垂直内水平)可用于构建二维布局。

CSS 灵活框布局模块 Level 1 – W3C 候选人推荐

在真正了解之前,我一直使用float进行布局,但了解了Flex布局之后,发现它是个超好用的排版工具,也是它拯救了我,用它来做网页非常容易达到响应式,因为它有极强大的适应能力,可以随着网页缩放去改变比例。

flex 布局背后的主要思想是:让容器能够改变其项目的宽度/高度(和顺序)以最好地填充可用空间(主要是为了适应各种显示设备和屏幕尺寸)。

Flex 布局表面上类似于块布局、常规布局(基于垂直的块和基于水平的内联)。它缺少许多可用于块布局的更复杂的以文本或文档为中心的属性,例如floats和columns。但似乎最重要的是,与常规布局相反,Flex布局与方向无关。Flex可用于Web 应用程序和复杂的网页,通可以自由分配空间和对齐内容。

但在大型的布局情况下我更推荐Grid网格布局。当然在我们还没学习到的情况下不需要考虑这些

我们可以看到CSDN使用了Flex布局
在这里插入图片描述

那么在了解了这么多信息之后,现在我们可以开始正式学习Flex布局了




属性

弹性容器的属性(父级)

display

display:flex 定义了一个弹性容器;内联或块取决于给定的值。它为所有直接子级启用了弹性上下文。

如果你想要flex的布局生效就需要提前给父元素设置 display:flex

.content{display:flex
}

我们看一个示例

<style>.content {display: flex;}.box-parent{width: 100%;border: 1px red solid;margin-bottom: 10px;}.box {width: 200px;height: 100px;background-color: black;margin: 10px;color: aliceblue;}</style><!-- 添加的情况 --><div class="box-parent content"><h1>display: flex</h1><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div></div><!-- 正常的情况 --><div class="box-parent"><h1>正常情况</h1><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div></div>

你能发现区别吗 ?
在这里插入图片描述



flex-direction

flex-direction 决定了弹性方向,它建立了主轴,从而定义了弹性项目放置在弹性容器中的方向。

Flex 是一个单向布局概念。将弹性项目视为主要以水平行或垂直列布局。

.content{flex-direction: row | row-reverse | column | column-reverse;
}
  • row(默认):从左到右
  • row-reverse :从右到左
  • column : 从上到下
  • column-reverse : 从下到上

在这里插入图片描述
在设置了 flex-direction 之后因为默认是flex-direction:row ,这就是为什么前面的 display:flex 会默认排成一列,从左到右



flex-wrap

flex-wrap 用于包装盒子,默认情况下,弹性项目都会自己主动组合成一行。

我们可以更改它并允许使用此属性根据需要的来包装项目。

.container {flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(默认):所有弹性项目都将在一行,当宽度不够时则会压缩空间
  • wrap : 项目将从上到下包裹成多行,当宽度不够时则会将最右边的项目向下换行
  • wrap-reverse : 项目将从下到上换行成多行。当宽度不够时则会将最左边的项目向上换行

在这里插入图片描述



flex-flow

flex-flow 用于设置盒子的弹性流动.

这是 flex-directionandflex-wrap 属性的简写,它们共同定义了 flex 容器的主轴和交叉轴。默认值为 row nowrap

属性的值的效果和上面的 column 是一样的,该属性将 flex-directionanflex-wrap 进行了组合。
你可以这样使用,将两个值放一起

.content{flex-flow: nowrap row-reverse;
}


justify-content

justify-content 定义了沿主轴的对齐方式。

当一行上的所有 flex 项目都不灵活,或者是灵活的但已达到最大大小时,它有助于分配额外的可用空间。

当项目溢出行时,它还会对项目的对齐方式施加一些控制。

.content{justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
}
  • flex-start(默认):从 flex-direction定义的位置的开始。
  • flex-end : 从 flex-direction定义的位置末尾开始。
  • start : 在方向的开始处 writing-mode。
  • end : 方向的尽头处 writing-mode。
  • left : 在容器的左边缘,除非特殊的的要求,否则没有意义,就像start一样。
  • right : 在容器的右边缘,除非特殊的的要求,否则没有意义,就像end一样。
  • center :项目沿线居中
  • space-between :均匀分布在行中;第一项在起始行,最后一项在结束行
  • space-around :均匀分布在行中,周围空间相等。请注意,视觉上的空间是不相等的,因为所有项目的两边都有相等的空间。第一个项目将在容器边缘有一个空间单位,但下一个项目之间有两个空间单位,因为下一个项目有自己的适用间距。
  • space-evenly :使得任何两个项目之间的间距(以及边缘的空间)相等。

在这里插入图片描述


这里穿插一个重要的知识点

  • safe : 使用后会变成安全对齐,“安全” 的对齐方式在溢出时改变了对齐模式,以避免数据丢失。
  • unsafe: 则关闭安全对其

例如

justify-content: safe center;

但在使用中会有浏览器兼容性问题,所以我们只要在 flex 子元素上应用 margin: auto ; 即可解决问题,不需要用 safe 关键字



align-items

align-items 定义了弹性项目如何沿当前行的交叉轴布局的默认行为。将其视为justify-content横轴(垂直于主轴)的版本。

你可以理解为水平位置

.content {align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
  • stretch(默认):拉伸以填充容器(仍然遵守最小宽度/最大宽度)。
  • flex-start、start : 放置在横轴的开始处。
  • flex-end、end : 放置在横轴的末端。
  • center :在横轴上居中
  • baseline :对齐,例如基于文字基线对齐

在这里插入图片描述



align-content

align-content 用于对齐内容,当横轴上有额外空间时,将对齐 flex 容器的线,类似于在 justify-content 主轴内对齐单个项目的方式。

那么 align-content 有什么特点呢?和 align-items 有什么区别呢?

align-content 属性只对多行灵的活容器生效,这里 flex-wrap 设置为wrap)。align-content 在单行灵活容器下(即 whereflex-wrap设置为其默认值no-wrap)不会生效。

也就是说 align-items 的设置对象是行内成员; align-content 的设置对象是所有行,且只有在多行弹性盒子容器中才生效。

当然 align-content 的前提是这一个容器整体定义了一个高度

.content {align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
  • normal(默认):默认位置,就好像没有设置一样。
  • flex-start、start :在容器的开头。
  • flex-end、end :在容器的末端。
  • center :在容器中居中。
  • space-between :均匀分布;第一行在容器的开头,最后一行在结尾。
  • space-around :在每行周围均匀分布。
  • space-evenly :均匀分布,周围空间相等
  • stretch : 线条伸展以占用剩余空间

在这里插入图片描述



gap, row-gap, column-gap

gap 属性明确控制弹性项目之间的空间。

注意是弹性项目之间的,不影响盒子边缘,和 margin 是有明显区别的。

.content{display: flex;.../* 行间距/列边距 统一设置 */gap: 5px; /* 行间距/列边距 分开设置 */gap: 5px 10px; /* 行间距/列边距 独立设置 */row-gap: 5px;column-gap: 10px;
}

它不仅适用于 flexbox,gap 适用于网格和多列布局。




弹性项目的属性(子项)

order

默认情况下,弹性项目按原顺序排列。但是,order 属性控制它们在弹性容器中出现的顺序。

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

具有相同order 的节点会恢复到原来的排列。

我们可以看下面这个例子,认真思考

<style>.box-parent{display: flex;width: 100%;border: 1px red solid;margin-bottom: 10px;}.box-parent > div {width: 200px;height: 100px;background-color: black;margin: 10px;color: aliceblue;}
</style>
<div class="box-parent"><div style="order: 1;">1 <p>order:1</p></div><div style="order: 1;">2 <p>order:1</p></div><div style="order: 2;">3 <p>order:2</p></div><div style="order: -1;">4 <p>order:-1</p></div>
</div>

在这里插入图片描述



flex-grow

flex-grow 定义了弹性项目在必要时扩大/增长的能力。

它适合无单位的项目,它规定了项目应该占用的弹性容器内的可用空间量。

如果所有项目的 flex-grow 都设置为1,则容器中的剩余空间将平均分配给所有子项。如果其中一个项目的值为2,则该项目将占用其他项目之一的两倍空间(或者至少会尝试)。

.item {flex-grow: 2; /* 默认 0 负数无效。*/
}

你可以自己试一下下面这个例子

<style>.box-parent{display: flex;width: 100%;border: 1px red solid;margin-bottom: 10px;}.box {width: 100px;height: 100px;background-color: black;margin: 10px;color: aliceblue;}
</style>
<div class="box-parent"><div class="box" style="flex-grow: 1;">1</div><div class="box" style="flex-grow: 4;">2</div><div class="box">3</div><div class="box">4</div>
</div>


flex-shrink

flex-shrink 定义了弹性项目在必要时收缩的能力。

.item {flex-shrink: 3; /* 默认是 1 */
}

注意区分, flex-grow 用于提高优先增长能力,而 flex-shrink 则是提高优先伸缩能力



flex-basis

flex-basis 定义了在分配剩余空间之前元素的默认大小。它可以是长度(例如 10%、2rem 、100px等)或关键字。

.item {flex-basis:  | auto; /* 默认 auto */
}


flex

flexflex-grow , flex-shrinkflex-basis 组合的简写。

第二个和第三个参数 ( flex-shrinkflex-basis ) 是可选的。

默认值为 0 1 auto ,但如果使用单个数值,例如 flex: 3 ,它就像设置 flex-grow: 5; flex-shrink: 1; flex-basis: 0%

.item {flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}


align-self

align-self 会覆盖已有的 align-items 的值,两者的可取值完全一样。

两者的区别在于:伸缩容器内部某个元素在排列方式需要有所差异,此时就不能使用
align-items ,因为 align-items 作用于整体,我们希望作用于部分,这就是 align-self 的作业。




示例

一个简单的菜单栏示例

<style>* {margin: auto;padding: 0;}header {width: 90%;min-width: 600px;height: 55px;background-color: rgba(0, 0, 0, 0.062);border-radius: 0 0 20px 20px;}.list {display: flex;height: 100%;}.list>li {flex-basis: 80px;text-align: center;list-style: none;}.logo {flex-grow: 0.5;}
</style>
<header><ul class="list"><li class="logo"><div> LOGO </div></li><li><a href="#">Home</a></li><li><a href="#">Page</a></li><li><a href="#">More</a></li><li><a href="#">About</a></li></ul>
</header>




在这里插入图片描述

如果对您有帮助,可别忘了 点赞 / 收藏 / 评论 / 关注 支持下博主



http://chatgpt.dhexx.cn/article/XNUDjif1.shtml

相关文章

CSS变量(CSS Variables)

概述 如果突然有一天,当你页面的主题色发生变化时,有许多元素的颜色要一起变化,这是你会考虑怎么做呢?使用Less/Sass/Stylus来定义一个颜色变量?还是专门去定义多了个类名来控制元素? 使用第一种方法,有他的弊端,浏览器无法识别CSS预处理器的语法,所以我们都会将Less…

详细介绍css3中的变量使用

CSS3新功能之变量&#xff1a;variables css3为我们提供了一个强大的功能自定义属性&#xff0c;也就是变量&#xff0c;他能让我们更改色系、皮肤、自适配变得简单。我们只需要更改一些我们事先定义好的变量就可以轻松实现各种效果。特别是我们在开发大型项目的时候有多处使用…

详解CSS(一)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、的博客 &#x1f6fa;系列专栏&#xff1a;CSS专栏 &#x1f6b2;给大家推荐一个网站&#x1f609;很实用&#x1f61a;我…

读书笔记《MySQL技术内幕:InnoDB存储引擎》第5章 索引与算法

索引是应用程序设计和开发的一个重要方面。若索引太多&#xff0c;应用程序的性能可能会受到影响。而索引太少&#xff0c;对查询性能又会产生影响。要找到一个合适的平衡点&#xff0c;这对应用程序的性能至关重要。 一些开发人员总是在事后才想起添加索引——我一直认为&…

32.项目总结--技术点部分

项目整体架构 Docker 虚拟化容器计数,Docker基于镜像,可以秒级启动各种容器,每一种容器都是一个完整的运行环境,容器之间相互隔离; 安装docker 安装前卸载原有的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

【HCIA-Datacom V1.0培训教材】广域网技术

局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 数字数据网DDN&#xff08;Digital Data Network&#xff09; 帧中继FR(Frame Relay) 同步数字结构SDH&#xff08;Synchronous Digital Hierachy&#xff09; …

一文了解Docker容器技术的操作

一文了解Docker容器技术的操作 前言 相信点进这篇文章的Coder&#xff0c;不管是在各大技术论坛上、技术交流群&#xff0c;亦或招聘网上&#xff0c;应该都有见到过Doker容器技术的面孔&#xff0c;随着社会节奏的加快以及迫于生活的压力&#xff0c;在计算机技术日新月异的今…

自然语言处理简介(1)---- 服务梳理与传统汉语分词

文章大纲 1.Nlp技术体系简介1.1 基础技术1.2 Nlp 核心技术1.3 NlP&#xff08;高端技术&#xff09; 2.知名NLP 服务系统简介2.1汉语分词系统ICTCLAS2.2 哈工大语言云&#xff08;Language Technology Platform&#xff0c;LTP&#xff09;2.3 Amazon Comprehend2.4 阿里云NLP2…

微服务技术栈学习笔记(自用)

微服务技术栈学习笔记&#xff08;自用&#xff09; 文章目录 微服务技术栈学习笔记&#xff08;自用&#xff09;1.导学2.Eureka2.1微服务远程调用&#xff1a;2.2搭建Eureka 3.Ribbon负载均衡4.Nacos4.1服务注册4.2 分级存储 5.Feign6.Gateway6.1搭建6.2路由断言工厂6.3 过滤…

自然语言处理技术

自然语言处理技术&#xff08;NLP&#xff09;在推荐系统中的应用 NLP 推荐系统 词袋模型 阅读7798 作者&#xff1a; 张相於&#xff0c;58集团算法架构师&#xff0c;转转搜索推荐部负责人&#xff0c;负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机器学习…

Java.mob.org.cn搜索_探讨Android全文检索技术

原标题&#xff1a;探讨Android全文检索技术 写在前面 客户端本地存储数据一般使用的存储方式是&#xff1a;文件、SharedPreference、数据库(SQLite) 如果我们要做一些查询的操作&#xff0c;对于文件的方式&#xff0c;通过序列化和反序列化来进行数据的增删改查操作&#xf…

seg:NLP之正向最大匹配分词

已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click me 一、任务要求 实现一个基于词典与规则的汉语自动分词系统。 二、技术路线 采用正向最大匹配(FMM)方法对输入的中文语句进行分词&#xff0c;具体的实现可以分为下面几个步骤&am…

Elasticsearch搜索技术实战

elasticsearch下载安装 本篇前述的ES版本是7.14.2&#xff0c;实现了与Mysql的数据同步&#xff0c;ES端的搜索与分词&#xff1b;后来由于和Springcloud&#xff08;spring-data-elasticsearch:3.0.6&#xff09;集成发现版本问题&#xff0c;换成ES5.5.0&#xff0c;所以完整…

Docker技术

在这里插入代码片# Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are…

Elasticsearch - 文档分析,IK分词器;文档冲突(十二)

阅读本文前可先参考 Elasticsearch - Elasticsearch详解&#xff1b;安装部署&#xff08;一&#xff09;_MinggeQingchun的博客-CSDN博客 https://blog.csdn.net/MinggeQingchun/article/details/126855747 一、文档分析 文档分析过程如下&#xff1a; 1、将一块文本分成适…

springboot+Elasticsearch实现word,pdf,txt内容抽取并高亮分词全文检索

文章目录 需求 一、环境 二、功能实现 1.搭建环境 2.文件内容识别 三.代码 需求 产品希望我们这边能够实现用户上传PDF,WORD,TXT之内得文本内容&#xff0c;然后用户可以根据附件名称或文件内容模糊查询文件信息&#xff0c;并可以在线查看文件内容 一、环境 项目开发环境&…

使用lucce分词怎么_ElasticSearch 分词器,了解一下

这篇文章主要来介绍下什么是 Analysis &#xff0c;什么是分词器&#xff0c;以及 ElasticSearch 自带的分词器是怎么工作的&#xff0c;最后会介绍下中文分词是怎么做的。 首先来说下什么是 Analysis&#xff1a; 什么是 Analysis&#xff1f; 顾名思义&#xff0c;文本分析就…

自然语言处理 # 中文分词技术 概述

定义 中文分词&#xff08;Chinese Word Segmentation&#xff09;就是将连续的字序列按照一定的规范重新组合成词序列的过程。 Ques:为什么要分词&#xff1f; Ans: 词是最小的能够独立运用的语言单位 Ques:什么是独立运用呢&#xff1f; Ans:它可以解释为“单独做句法成分或…

Python 中 concurrent.futures 模块使用说明

Python 中 concurrent.futures 模块使用说明 转载请注明出处&#xff1a;https://blog.csdn.net/jpch89/article/details/87643972 文章目录 Python 中 concurrent.futures 模块使用说明0. 参考资料1. 概述2. Executor Object 执行器对象3. ThreadPoolExecutor 线程池执行器4.…

【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo

前言 ruoyi 4.6.0jdk1.8 错误 11:48:16.879 [http-nio-9031-exec-25] INFO c.r.f.s.r.UserRealm - [doGetAuthenticationInfo,128] - 对用户[admin]进行登录验证..验证未通过{} java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThre…