前端学习<二>CSS基础——13-CSS3属性:Flex布局图文详解

前言

CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强。其强大的伸缩性和自适应性,在网页开中可以发挥极大的作用。

flex 初体验

我们先来看看下面这个最简单的布局:

上面这张图中的布局是我们都熟悉的:默认文档流中,在一个父容器里放置多个块级的子元素,那么,这些子元素会默认从上往下排列。

在此基础之上,如果我给父容器仅仅加一个 display: flex属性,此时,这些子元素的布局会摇身一变:

没错,子元素们会在水平方向上,从左至右排列,就是这么神奇。到此为止,你已经掌握了关于 flex 的一半的知识。

flex 布局的优势

1、flex 布局的子元素不会脱离文档流,很好地遵从了“流的特性”。

但你如果用 float 来做布局,float 属性的元素会脱离文档流,而且会涉及到各种 BFC、清除浮动的问题。浮动相关的问题,比较麻烦,所以也成了面试必问的经典题目。但有了 flex 布局之后,这些问题都不存在的。

2、flex 是一种现代的布局方式,是 W3C 第一次提供真正用于布局的 CSS 规范。 flex 非常提供了丰富的属性,非常灵活,让布局的实现更佳多样化,且方便易用。

flex 唯一的缺点就在于,它不支持低版本的 IE 浏览器。

flex 的兼容性问题

上图中可以看到, flex 布局不支持 IE9 及以下的版本;IE10及以上也只是部分支持。如果你的页面不需要处理 IE浏览器的兼容性问题,则可以放心大胆地使用 flex 布局。

但是,比如网易新闻、淘宝这样的大型网站,面对的是海量用户,即便使用低版本浏览器的用户比例很少,但绝对基数仍然是很庞大的。因此,这些网站为了兼容低版本的 IE 浏览器,暂时还不敢尝试使用 flex 布局。

概念:弹性盒子、子元素

在讲 flex 的知识点之前,我们事先约定两个概念:

  • 弹性盒子:指的是使用 display:flexdisplay:inline-flex 声明的父容器

  • 子元素/弹性元素:指的是父容器里面的子元素们(父容器被声明为 flex 盒子的情况下)。

概念:主轴和侧轴

在上面的“初体验”例子中,我们发现,弹性盒子里面的子元素们,默认是从左至右排列的,这个方向,代表的就是主轴的方向。

在此,我们引入主轴和侧轴的概念。

如上图所示:

  • 主轴:flex容器的主轴,默认是水平方向,从左向右。

  • 侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向,从上往下。

PS:主轴和侧轴并不是固定不变的,可以通过 flex-direction 更换方向,我们在后面会讲到。

弹性盒子

声明定义

使用 display:flexdisplay:inline-flex 声明一个父容器为弹性盒子。此时,这个父容器里的子元素们,会遵循弹性布局。

备注:一般是用 display:flex这个属性。display:inline-flex用得较少。

flex-direction 属性

flex-direction:用于设置盒子中子元素的排列方向。属性值可以是:

属性值描述
row从左到右水平排列子元素(默认值)
column从上到下垂直排列子元素
row-reverse从右向左排列子元素
column-reverse从下到上垂直排列子元素

备注:如果我们不给父容器写flex-direction这个属性,那么,子元素默认就是从左到右排列的。

代码演示:

 <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;list-style: none;}body{background-color: #eee;font-family: "Microsoft Yahei";font-size:22px;}​h3{font-weight: normal;}section{width: 1000px;​margin:40px auto;}​ul{background-color: #fff;border: 1px solid #ccc;​}​ul li{width: 200px;height: 200px;background-color: pink;margin:10px;}section:nth-child(1) ul{overflow: hidden; /* 清除浮动 */}section:nth-child(1) ul li{float: left;}/* 设置伸缩盒子*/section:nth-child(2) ul{display: flex;}​section:nth-child(3) ul{/* 设置伸缩布局*/display: flex;/* 设置主轴方向*/flex-direction: row;}​section:nth-child(4) ul{/* 设置伸缩布局*/display: flex;/* 设置主轴方向 :水平翻转*/flex-direction: row-reverse;}​section:nth-child(5) ul{/* 设置伸缩布局*/display: flex;/* 设置主轴方向 :垂直*/flex-direction: column;}​section:nth-child(6) ul{/* 设置伸缩布局*/display: flex;/* 设置主轴方向 :垂直*/flex-direction: column-reverse;}</style></head><body><section><h3>传统布局</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>伸缩布局 display:flex</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴方向 flex-direction:row</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴方向 flex-direction:row-reverse</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴方向 flex-direction:column</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴方向 flex-direction:column-reverse</h3><ul><li>1</li><li>2</li><li>3</li></ul></section></body></html>

flex-wrap 属性

flex-wrap:控制子元素溢出时的换行处理。

justify-content 属性

justify-content:控制子元素在主轴上的排列方式。

弹性元素

justify-content 属性

  • justify-content: flex-start; 设置子元素在主轴上的对齐方式。属性值可以是:

    • flex-start 从主轴的起点对齐(默认值)

    • flex-end 从主轴的终点对齐

    • center 居中对齐

    • space-around 在父盒子里平分

    • space-between 两端对齐 平分

代码演示:(在浏览器中打开看效果)

 <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;list-style:none;}body{background-color: #eee;font-family: "Microsoft Yahei";​}section{width: 1000px;margin:50px auto;}section h3{font-size:22px;font-weight: normal;}​ul{border: 1px solid #999;background-color: #fff;display: flex;​}​ul li{width: 200px;height: 200px;background: pink;margin:10px;​}​section:nth-child(1) ul{/* 主轴对齐方式:从主轴开始的方向对齐*/justify-content: flex-start;}​section:nth-child(2) ul{/* 主轴对齐方式:从主轴结束的方向对齐*/justify-content: flex-end;}​section:nth-child(3) ul{/* 主轴对齐方式:居中对齐*/justify-content: center;}​section:nth-child(4) ul{/* 主轴对齐方式:在父盒子中平分*/justify-content: space-around;​}​section:nth-child(5) ul{/* 主轴对齐方式:两端对齐 平分*/justify-content: space-between;}</style></head><body><section><h3>主轴的对齐方式:justify-content:flex-start</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴的对齐方式:justify-content:flex-end</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴的对齐方式:justify-content:center</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴的对齐方式:justify-content:space-round</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>主轴的对齐方式:justify-content:space-bettwen</h3><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></section></body></html>

align-items 属性

align-items:设置子元素在侧轴上的对齐方式。属性值可以是: - flex-start 从侧轴开始的方向对齐 - flex-end 从侧轴结束的方向对齐 - baseline 基线 默认同flex-start - center 中间对齐 - stretch 拉伸

代码演示:

 <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;list-style:none;}body{background-color: #eee;font-family: "Microsoft Yahei";​}section{width: 1000px;margin:50px auto;}section h3{font-size:22px;font-weight: normal;}​ul{border: 1px solid #999;background-color: #fff;display: flex;height:500px;​}​ul li{width: 200px;height: 200px;background: pink;margin:10px;​}​section:nth-child(1) ul{/* 侧轴对齐方式 :从侧轴开始的方向对齐*/align-items:flex-start;}​section:nth-child(2) ul{/* 侧轴对齐方式 :从侧轴结束的方向对齐*/align-items:flex-end;}​section:nth-child(3) ul{/* 侧轴对齐方式 :居中*/align-items:center;}​section:nth-child(4) ul{/* 侧轴对齐方式 :基线 默认同flex-start*/align-items:baseline;}​section:nth-child(5) ul{/* 侧轴对齐方式 :拉伸*/align-items:stretch;​}​section:nth-child(5) ul li{height:auto;}​​</style></head><body><section><h3>侧轴的对齐方式:align-items :flex-start</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>侧轴的对齐方式:align-items:flex-end</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>侧轴的对齐方式:align-items:center</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>侧轴的对齐方式:align-itmes:baseline</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>侧轴的对齐方式:align-itmes: stretch</h3><ul><li>1</li><li>2</li><li>3</li></ul></section></body></html>

flex属性:设置子盒子的权重

代码演示:

 <!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;list-style:none;}body{background-color: #eee;font-family: "Microsoft Yahei";​}section{width: 1000px;margin:50px auto;}section h3{font-size:22px;font-weight: normal;}​ul{border: 1px solid #999;background-color: #fff;display: flex;​}​ul li{width: 200px;height: 200px;background: pink;margin:10px;​}​section:nth-child(1) ul li:nth-child(1){flex:1;}​section:nth-child(1) ul li:nth-child(2){flex:1;}​section:nth-child(1) ul li:nth-child(3){flex:8;}​section:nth-child(2) ul li:nth-child(1){​}​section:nth-child(2) ul li:nth-child(2){flex:1;}​section:nth-child(2) ul li:nth-child(3){flex:4;}​​</style></head><body><section><h3>伸缩比例:flex</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​<section><h3>伸缩比例:flex</h3><ul><li>1</li><li>2</li><li>3</li></ul></section>​​</body></html>

相关链接

CSS Flexbox 可视化手册

可视化的截图如下:(请点开链接,查看大图)

http://img.smyhvae.com/20190821_2101.png

相关文章:

  • 【英文原版】 CSS Flexbox Fundamentals Visual Guide:https://medium.com/swlh/css-flexbox-fundamentals-visual-guide-1c467f480dac

  • 【中文翻译】CSS Flexbox 可视化手册:CSS Flexbox 可视化手册 - 知乎

flex 相关的推荐文章

  • flex 效果在线演示:https://demos.scotch.io/visual-guide-to-css3-flexbox-flexbox-playground/demos/

  • A Complete Guide to Flexbox | 英文原版:A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

  • CSS3 Flexbox 布局完全指南 | 中文翻译:https://www.html.cn/archives/8629

flex 相关的教程

  • 后盾人 flex 教程

技巧:使用 margin 自动撑满剩余空间

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

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

相关文章

软考数据库

目录 分值分布1. 事务管理1.1 事物的基本概念1.2 数据库的并发控制1.2.1 事务调度概念1.2.2 并发操作带来的问题1.2.3 并发控制技术1.2.4 隔离级别&#xff1a; 1.3 数据库的备份和恢复1.3.1 故障种类1.3.2 备份方法1.3.3 日志文件1.3.4 恢复 SQL语言发权限收权限视图触发器创建…

动态规划——回文串问题

目录 练习1&#xff1a;回文子串 练习2&#xff1a;最长回文子串 练习3&#xff1a;回文串分割IV 练习4&#xff1a;分割回文串 练习5&#xff1a;最长回文子序列 练习6&#xff1a;让字符串成为回文串的最小插入次数 本篇文章主要学习使用动态规划来解决回文串相关问题&…

ES6 学习(一)-- 基础知识

文章目录 1. 初识 ES62. let 声明变量3. const 声明常量4. 解构赋值 1. 初识 ES6 ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准&#xff0c;已经在2015年6月正式发布了。它的目标&#xff0c;是使得」JavaScript语言可以用来编写复杂的大型应用程序&#xff0c;成为…

新收获——蓝桥杯单片机第十四届国赛程序设计题

大家要是初学&#xff0c;可以去看西风那里的系统课程&#xff0c;非常全面&#xff0c;有利于形成你自己的代码风格。 笔者发文章只是分享性的&#xff0c;有需要者才拿去用其中的一个小片段。 代码在这&#xff1a; 一、这个是首写自主完成的&#xff0c;bug应该也是没有的…

预处理详解(一) -- 预定义符号与#define定义

目录 一. 预定义符号二. #define1.#define定义常量2.#define定义宏3.带有副作用的宏参数4.宏替换的规则5.宏和函数的对比 一. 预定义符号 %s _ _FILE_ _ //文件 %s _ _ DATE_ _ //日期 %s _ _ TIME_ _ //时间 %d _ _ LINE_ _ //行号 %d _ _ STDC_ _ //如果编译器支持 ANSI C,那…

Vmware下减小Ubuntu系统占用系统盘大小

1、虚拟机设置下占用空间 如图&#xff0c;给虚拟机分配了120GB&#xff0c;已经占用116.9GB&#xff0c;开机会提示空间不足。 2、实际使用空间 ubuntu系统下使用“df -h”命令查看实际使用空间大小50GB左右 造成这个原因是&#xff0c;虚拟机的bug&#xff1a;在虚拟机的ub…

算法学习——LeetCode力扣动态规划篇6

算法学习——LeetCode力扣动态规划篇6 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&…

ADC--数模转换器的使用

目录 前言 ADC接口使用 配置准备 确定引脚编号 光敏电阻--PF7​编辑 ADC3_IN5 开始配置 实验进阶 MQ_3--酒精传感器、水位传感器、火焰传感器 前言 ADC(analog-digital conversion)顾名思义模拟数字转换器,把外界的譬如温度、湿度、酒精含量、水位、特殊光波等等的现实…

通过PandasAI使用自然语言进行数据分析

通过PandasAI使用自然语言进行数据分析 介绍 ​ PandasAI是一个Python库&#xff0c;可以很容易地用自然语言向数据提问。它可以帮助您使用生成人工智能来探索、清理和分析数据。 使用PandasAI 这里使用Anaconda和Jupyter使用PandasAI 进入一个文件目录 创建一个 Notebook …

Python | Leetcode Python题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optiona…

LabVIEW无人机大气数据智能测试系统

LabVIEW无人机大气数据智能测试系统 随着无人机技术的迅速发展&#xff0c;大气数据计算机作为重要的机载设备&#xff0c;在确保飞行安全性方面发挥着重要作用。设计了一套基于LabVIEW的无人机大气数据智能测试系统&#xff0c;通过高效、稳定的性能测试&#xff0c;及时发现…

统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式

1、统计XML文件内标签的种类和其数量 对于自己标注的数据集&#xff0c;需在标注完成后需要对标注好的XML文件校验&#xff0c;下面是代码&#xff0c;只需将SrcDir换成需要统计的xml的文件夹即可。 import os from tqdm import tqdm import xml.dom.minidomdef ReadXml(File…

Jenkins执行策略(图文讲解)

Jenkins执行策略-图文讲解 一&#xff1a;手动执行1、手动执行流程2、手动执行操作 二、通过构建触发器——定时执行1、定时执行流程2、定时执行操作 三、当开发部署成功之后进行执行——在测试项配置——关注的项目1、执行流程2、操作流程 四、测试代码有更新的时候自动构建1、…

Kubeflow文档1:介绍与架构

Kubeflow 2024/3/19版本的文档 此专栏用来展示相关的内容翻译&#xff0c;重点关注本地部署&#xff0c;关于运营商的方案&#xff0c;请自行查阅 文档地址https://www.kubeflow.org/docs/ 开始编辑时间&#xff1a;2024/3/27&#xff1b;最后编辑时间2024/3/27 Kubeflow文…

毕设论文目录设置

添加目录 选择一种格式的自动目录 更新目录 发现该目录中只有1、2章&#xff0c;3、4章 然后再点击更新目录 对应的&#xff0c;小标题添加二级目录

数据库之MyBatisPlus详解

MyBatisPlus MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window) 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 官网地址&#xff1a;https://baomidou.com/ 一、入门案…

C++学习随笔(8)——模板初阶

本章我们来学习一下C的模版部分&#xff01; 目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通…

精通Go语言文件上传:深入探讨r.FormFile函数的应用与优化

1. 介绍 1.1 概述 在 Web 开发中&#xff0c;文件上传是一项常见的功能需求&#xff0c;用于允许用户向服务器提交文件&#xff0c;如图像、文档、视频等。Go 语言作为一门强大的服务器端编程语言&#xff0c;提供了方便且高效的方式来处理文件上传操作。其中&#xff0c;r.F…

(完结)Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(三)项目优化

本文参考自 Springboot3微服务实战12306高性能售票系统 - 慕课网 (imooc.com) 本文是仿12306项目实战第&#xff08;三&#xff09;章——项目优化&#xff0c;本篇将讲解该项目最后的优化部分以及一些压测知识点 本章目录 一、压力测试-高并发优化前后的性能对比1.压力测试相关…

探索C语言中的联合体和枚举:让处理数据更加得心应手

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;http://t.csdnimg.cn/Oytke 小新的主页&#xff1a;编程版小新-CSDN博客 C语言中有内置类型&#xff0c; 比如&…