flex布局

文章目录

  • 1. 概念
  • 2. 和浮动的区别
  • 3. 伸缩容器和伸缩项目
    • 3.1. 伸缩容器
    • 3.2. 伸缩项目
  • 4. 主轴与侧轴
  • 5. 主轴属性
  • 6. 纵轴属性
    • 6.1. align-self 示例
  • 7. flex 实现水平垂直居中
    • 7.1. 方法一
    • 7.2. 方法二
  • 8. 伸缩性
    • 8.1. flex-basis
    • 8.2. flex-shrink
    • 8.3. flex-grow(伸)
    • 8.4. flex 复合属性
  • 9. 布局技巧
  • 10. gap 属性
  • 11. 小米模块实现
    • 11.1. 演示效果
    • 11.2. 分析思路
    • 11.3. 代码实现
    • 11.4. 补充
      • 11.4.1. 第一种
      • 11.4.2. 第二种
  • 12. flex 实现骰子点数![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=file%3A%2F%2F%2FC%3A%5CUsers%5Clenovo%5CAppData%5CLocal%5CTemp%5CSGPicFaceTpBq%5C21488%5C02FDDE70.png&pos_id=img-ko7i5zne-1711092124246)
    • 12.1. 分析思路
    • 12.2. 代码演示
  • 13. 青蛙小游戏

1. 概念

flex 是一种弹性的布局方式,使用它布局页面更加的简单灵活,避免了浮动脱标的影响,提高开发效率。

2. 和浮动的区别

  • 浮动的子元素脱标会导致父元素没有高度,而 flex 不会脱标,父元素的高度还是子元素撑起。

  • 浮动的属性写在子元素上,flex 属性是写在父元素上。

3. 伸缩容器和伸缩项目

3.1. 伸缩容器

父元素,也称为 flex 容器。

3.2. 伸缩项目

伸缩容器所有的子元素,也称为 flex 子项/弹性元素。

4. 主轴与侧轴

主轴:伸缩项目沿着主轴排列,主轴默认是水平方向的,默认方向是:从左到右。

纵轴:也叫侧轴,纵轴默认是垂直方向的,与主轴垂直。

image-20240311212236350

5. 主轴属性

属性名作用
flex-direction
主轴方向
row :主轴方向水平从左到右(默认)
row-reverse :主轴方向水平从右到左
column :主轴方向垂直从上到下
column-reverse :主轴方向垂直从下到上
flex-wrap
主轴换
nowrap :不换行(默认)
wrap :自动换行
wrap-reverse :反向换行
flex-flow
复合属性
flex-directionflex-wrap
justify-content
主轴对齐
flex-start :主轴起点对齐,从行首起始位置开始排列(默认)
flex-end :主轴终点对齐,从行尾位置开始排列
center :居中对齐
space-between :均匀分布,两端对齐,首个元素放置于起点,末尾元素放置于终点(常用)
space-around :均匀分布,两端距离是中间距离的一半
space-evenly :完全平分,每个元素之间的间隔相等。

注意:改变了主轴的方向,侧轴方向也随之改变。

6. 纵轴属性

属性名作用
align-items
侧轴一行对齐
flex-start :顶端对齐
flex-end :尾端对齐
center :水平对齐
baseline : 伸缩项目的第一行文字的基线对齐
stretch :如果伸缩项目未设置高度,元素被拉伸以适应容器(默认)
align-content
侧轴多行对齐
flex-start :顶端对齐
flex-end :尾端对齐
center :与侧轴的中点对齐
space-between :两端对齐,中间平均分布
space-around :均匀分布,上下两端距离是中间距离的一半
space-evenly : 完全平分
stretch :元素被拉伸以适应容器(默认)
align-self
单独调整某个伸缩项目的对齐方式
定义 flex 子项单独在纵轴方向上的对齐方式,默认值为auto,继承父元素的 align-items 属性。

align-self子项尺寸特点:

如果给了宽高,就按给的来,如果没给,就按内容来,如果有拉伸,就会拉伸的跟父类一样高。

6.1. align-self 示例

单独设置第二个元素跟父元素顶部对齐。

image-20240311214159844

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>14-flex布局-单独设置侧轴某个元素对齐方式</title><style>.father {background: pink;height: 300px;display: flex;justify-content: center;align-items: center;}.son {width: 100px;height: 100px;background: #a5ccaf;}.son:nth-child(2) {align-self: flex-start;}</style></head><body><div class="father"><div class="son">1</div><div class="son">2</div><div class="son">3</div></div></body>
</html>

7. flex 实现水平垂直居中

7.1. 方法一

父元素开启 flex 布局,随后使用 justify-contentalign-items 实现水平垂直居中。

display: flex;
/* 设置子元素水平居中 */
justify-content: center;
/* 设置子元素垂直居中 */
align-items: center;
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>12-flex布局-实现子元素水平垂直居中</title><style>.father {background: pink;height: 300px;display: flex;/* 设置子元素水平居中 */justify-content: center;/* 设置子元素垂直居中 */align-items: center;}.son {width: 100px;height: 100px;background: #a5ccaf;}</style></head><body><div class="father"><div class="son"></div></div></body>
</html>

7.2. 方法二

父容器开启 flex 布局,随后子元素 margin: auto

.father {background: pink;height: 300px;display: flex;
}
.son {width: 100px;height: 100px;background: #a5ccaf;margin: auto;
}

8. 伸缩性

8.1. flex-basis

定义子项在分配多余空间之前,子项所占的主轴空间,默认是 auto,即子项本身的大小。

8.2. flex-shrink

定义子项的缩小比例,默认是 1,表示如果 flex 容器空间不足,子元素将会缩小。

8.3. flex-grow(伸)

flex-grow 定义伸缩项目的放大比例,默认为 0 。

  1. 若所有伸缩项目的 flex-grow 值都为 1 ,则:它们将等分剩余空间(如果有空间的话)。
  2. 若三个伸缩项目的 flex-grow 值分别为: 1 、 2 、 3 ,则:分别瓜分到: 1/6 、 2/6 、3/6 的空间。

8.4. flex 复合属性

flex 是复合属性,复合了: flex-grow 、 flex-shrink 、 flex-basis 三个属性,默认值为 0 1 auto 。

  • flex:1 1 auto ,简写: flex:auto
  • flex:1 1 0 ,简写: flex:1
  • flex:0 0 auto ,简写: flex:none
  • flex:0 1 auto ,简写: flex:0 auto (flex 初始值)
  • 非负数字,等同于 flex:非负数字 1 0% ,能放大也能缩小,数字代表占父级剩余尺寸份数
  • 像素值,等同于 flex 1 1 像素值,能放大也能缩小,像素值代表容器在分配多余空间之前,子项所占的主轴空间。

我们一般用flex:数值来代表占父元素剩余尺寸的份数。

9. 布局技巧

修改轴向之后的对齐总结:

  • 首先要明确,水平和垂直方向上是哪个轴
  • 如果是主轴,对齐就是用 justify-content属性
  • 如果是侧轴,对齐就是用 align-items属性

10. gap 属性

gap 属性是用来设置网格行与列之间的间隙(gutters),该属性是 row-gapcolumn-gap 的简写形式,只给一个值,代表行间隙和列间隙都是 14px。

11. 小米模块实现

11.1. 演示效果

image-20240311222503920

11.2. 分析思路

这里要用到两次 flex,一次是蓝色容器,一次是红色的容器。

红色的容器使用flex-wrap: wrap;进行换行。

image-20240311222827256

11.3. 代码实现

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>小米模块案例效果</title><style>* {margin: 0;padding: 0;}.container {display: flex;width: 1226px;height: 614px;margin: 100px auto;}.aside-left {width: 234px;height: 614px;background-color: #81007f;margin-right: 14px;}.aside-right {display: flex;flex-wrap: wrap;/* 推荐使用方式一 *//* 方式一使用justify-content和align-content设置水平方向和垂直方向的布局 *//* justify-content: space-between;align-content: space-between; *//* 方式二:设置间隙gap也可以实现 */gap: 14px; /* gap是一个复合属性,只给一个值,代表行间隙和列间隙都是14px */width: 978px;height: 614px;}.aside-right .banner {width: 234px;height: 300px;background-color: #86cdea;}</style></head><body><!-- 版心 --><div class="container"><!-- 左侧边栏 --><div class="aside-left"></div><!-- 右侧边栏 --><div class="aside-right"><div class="banner"></div><div class="banner"></div><div class="banner"></div><div class="banner"></div><div class="banner"></div><div class="banner"></div><div class="banner"></div><div class="banner"></div></div></div></body>
</html>

11.4. 补充

红色容器每个子元素的间隙有两种解决方案:

11.4.1. 第一种

使用justify-contentalign-content设置水平方向和垂直方向的布局。

justify-content: space-between;
align-content: space-between;

11.4.2. 第二种

设置间隙 gap 也可以实现。

gap 属性是用来设置网格行与列之间的间隙(gutters),该属性是 row-gapcolumn-gap 的简写形式,只给一个值,代表行间隙和列间隙都是 14px。

gap: 14px;

12. flex 实现骰子点数外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 flex,完成骰子的点数。

image-20240202212159838

12.1. 分析思路

image-20240202213028669

12.2. 代码演示

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>骰子点数</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.wrapper {margin: 100px 100px;width: 500px;height: 500px;border-radius: 10px;background-color: #232323;display: flex;flex-wrap: wrap;align-items: center;justify-content: space-around;}.dot {width: 20px;height: 20px;border-radius: 50%;background-color: #000;}.box-common {width: 100px;height: 100px;display: flex;background-color: #fff;padding: 4px;margin: 60px;border-radius: 8px;}.box {align-items: center;justify-content: center;}.box2 {flex-direction: column;justify-content: space-between;align-items: center;}/* align-self子元素属性,控制自身的排列 */.dot2-1 {align-self: flex-start;}/* align-self子元素属性,控制自身的排列 */.dot2-2 {align-self: flex-end;}/* 3点的写法 */.box3 {justify-content: space-between;}.dot3-1 {align-self: flex-start;}.dot3-2 {align-self: center;}.dot3-3 {align-self: flex-end;}/* box4 */.box4 {flex-wrap: wrap;}.dot4 {width: 50%;height: 50%;display: flex;}.dot4:nth-child(2) {justify-content: flex-end;}.dot4:nth-child(3) {align-items: flex-end;}.dot4:nth-child(4) {justify-content: flex-end;align-items: flex-end;}</style></head><body><div class="wrapper"><!-- 一点 父容器,主轴居中,侧轴居中--><div class="box box-common"><div class="dot"></div></div><!-- 二点 主容器主轴为侧轴,居中,每一个子项单独控制,第一个flex-start,第二个flex-end--><div class="box2 box-common"><div class="dot dot2-1"></div><div class="dot dot2-2"></div></div><!-- 三点 同2点写法一样,只不过中间的点是center--><div class="box3 box-common"><div class="dot dot3-1"></div><div class="dot dot3-2"></div><div class="dot dot3-3"></div></div><!-- 四点 分为四个部分,嵌套两层flex盒子--><div class="box4 box-common"><div class="dot4"><div class="dot"></div></div><div class="dot4"><div class="dot"></div></div><div class="dot4"><div class="dot"></div></div><div class="dot4"><div class="dot"></div></div></div></div></body>
</html>

13. 青蛙小游戏

Flexbox Froggy(弹性盒小青蛙)是一个帮助你快速学习前端 Flex 布局的小游戏,可以通过玩游戏的方式进行巩固 flex 知识。

项目地址:https://flexboxfroggy.com/

image-20240202213434991

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

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

相关文章

如何做人才运营战略?

招聘人才和人才获取是同义词&#xff0c;但它们并不相同。招聘是大多数雇主的短期解决方案&#xff0c;而人才获取是一个长期解决方案。 企业要想改善企业文化朝着统一的愿景努力&#xff0c;就需要关注长期规划。 人才获取vs人才招聘 招聘是为了填补空缺&#xff0c;人才获取…

在服务器(Ubuntu20.04)安装用户级别的cuda11.8

1、cuda11.8的下载 首先在cuda官网下载我们需要的cuda版本&#xff0c;这里我下载的是cuda11.8&#xff08;我的最高支持cuda12.0&#xff09; 这里我直接使用wget命令下载不了&#xff0c;于是我直接在浏览器输入后面的链接下载到本地&#xff0c;之后再上传至服务器的&am…

SpringBoot2.7集成Swagger3

Swagger2已经在17年停止维护了&#xff0c;取而代之的是 Swagger3&#xff08;基于openApi3&#xff09;&#xff0c;所以新项目要尽量使用Swagger3. Open API OpenApi是业界真正的 api 文档标准&#xff0c;其是由 Swagger 来维护的&#xff0c;并被linux列为api标准&#x…

Stable Diffusion WebUI 生成参数:宽度/高度/生成批次/每批数量/提示词相关性/随机种子

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文将继续了解 Stable Diffusion WebUI 的生成参数,主要内容有:宽度、高度、生成批次、每批数量、提示词相关性、随机种子。希望能对你有所帮助。 文章目录 宽度(Width)和高度(Height)…

前端实例:页面布局1(后端数据实现)

效果图 注&#xff1a;这里用到后端语言php&#xff08;页面是.php文件&#xff09;,提取纯html也可以用 inemployee_index.php <?php include(includes/session.inc); $Title _(内部员工首页); $ViewTopic 内部员工首页; $BookMark 内部员工首页; include(includes/…

异地组网有哪些实现方式?为什么要选择SD-WAN?

建立跨地域的异地组网在当前数字化时代变得越来越重要&#xff0c;主要是因为企业业务的不断扩展和多样化。异地网络连接不仅有助于改善内部通信效率&#xff0c;还能提高数据处理能力和业务连续性。那么&#xff0c;到底有哪些方式可以实现异地组网呢&#xff1f;应该选择哪种…

【Linux】进程

本文主要介绍了进程的相关理解&#xff1a;查看进程、进程状态、进程的优先级、环境变量、进程地址空间、Linux内核进程调度队列。 目录 冯诺依曼体系结构 操作系统 进程 查看进程 几点预备小知识 进程创建的代码方式 为什么要创建子进程 样例代码&#xff1a;依次创建多…

【自然语言处理七-经典论文-attention is all you need】

然语言处理七-经典论文-attention is all you need 摘要原文译文小结 1&#xff1a;引言原文译文小结 2&#xff1a;背景原文译文小结 3&#xff1a;模型架构原文译文小结 3.1 编码器和解码器原文译文小结 3.2 注意力原文译文小结3.2.1 缩放点积注意力原文总结 3.2.2 多头注意力…

用例图画法

介绍 在软件工程中&#xff0c;用例图是一种用于描述系统功能和与之交互的参与者&#xff08;Actors&#xff09;之间关系的图形表示方法。 绘图步骤 确定参与者&#xff08;Actors&#xff09;&#xff1a;识别系统中的各个参与者&#xff0c;这些参与者可以是人、其他系统或外…

【JS】for in可能遇到的问题

问题一&#xff1a;for in 打印属性顺序与定义顺序不一致 先来做一道题&#xff0c;请说出打印结果 const obj {a2: aaa,2: aaa,1: aaaa,a1: aaa, }for(let key in obj){console.log(key) }结果&#xff1a; 1 2 a2 a1 属性的书写顺序不一定就是对象遍历时的顺序。这涉及到…

边缘自动隐藏窗体,透明度切换,同步父窗体标签切换winform

一、实现功能 默认的标签栏(superTabControl) 可以设置隐藏,即可实现全屏最大化。通过列表切换打开的标签页。用于定制B/S模式系统显示更个性,自定义样式,简介 安全 兼容性好。 二、主要代码 private void Time_Tick(object sender, EventArgs e) {获取主屏

《深入解析 C#》—— C# 3 部分

文章目录 第三章 C#3&#xff1a;LINQ及相关特性3.1 自动实现属性&#xff08;*&#xff09;3.2 隐式类型 var&#xff08;*&#xff09;3.3 对象和集合初始化3.3.1 对象初始化器3.3.2 集合初始化器 3.4 匿名类型3.4.1 基本语法和行为3.4.2 编译器生成类型3.4.3 匿名类型的局限…

#Linux(文件系统概念)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;查看文件系统情况df&#xff0c;man df查看df命令的功能 &#xff08;2&#xff09;查看文件系统的类型 df-T &#xff08;3&#xff09;df …

四川易点慧电子商务抖音小店:安全可靠,购物新选择

在数字化浪潮席卷全球的今天&#xff0c;电子商务已成为人们生活中不可或缺的一部分。四川易点慧电子商务抖音小店作为新兴的电商平台&#xff0c;以其安全可靠、便捷高效的特点&#xff0c;逐渐赢得了广大消费者的青睐。今天&#xff0c;就让我们一起走进四川易点慧电子商务抖…

前端项目部署后,如何提示用户版本更新

目录 前言解决方案1、public目录下新建manifest.json2、写入当前时间戳到manifest.json3、检查版本更新4、woker线程5、入口文件引入 可能出现的问题好书推荐 前言 项目部署上线后&#xff0c;特别是网页项目&#xff0c;提示正在操作系统的用户去更新版本非常 important。一般…

【开发环境搭建篇】Redis客户端安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

UniTask 异步任务

文章目录 前言一、UniTask是什么&#xff1f;二、使用步骤三、常用的UniTask API和示例1.编写异步方法2.处理异常3.延迟执行4.等待多个UniTask或者一个UniTas完成5.异步加载资源示例6.手动控制UniTask的完成状态7.UniTask.Lazy延迟任务的创建8.后台线程切换Unity主线程9.不要返…

力扣爆刷第102天之hot100五连刷96-100

力扣爆刷第102天之hot100五连刷96-100 文章目录 力扣爆刷第102天之hot100五连刷96-100一、136. 只出现一次的数字二、169. 多数元素三、75. 颜色分类四、31. 下一个排列五、287. 寻找重复数 一、136. 只出现一次的数字 题目链接&#xff1a;https://leetcode.cn/problems/sing…

C语言字符函数与字符串函数:编织文字的舞会之梦(下)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 七、strncpy的使用以及模拟实现 八、strncat的使用以及模拟实现 九、strncmp的使用以及模拟实现 十、strstr的使用以及模拟…

设计模式之抽象工厂模式解析

抽象工厂模式 1&#xff09;问题 工厂方法模式中的每个工厂只生产一类产品&#xff0c;会导致系统中存在大量的工厂类&#xff0c;增加系统的开销。 2&#xff09;概述 a&#xff09;产品族 和 产品等级结构 产品等级结构&#xff1a;产品的继承结构&#xff1b; 产品族&…