4.移动端布局-flex布局**

news/2025/2/22 13:26:21/

1、传统布局和flex布局

传统布局:PC端

  • 兼容性好
  • 布局繁琐
  • 局限性,不能在移动端很好的布局
    flex布局:PC端、移动端
  • 操作方便,布局简单,移动端应用广泛
  • PC端浏览器支持情况较差
  • IE11或更低版本,不支持或仅部分支持

2、布局原理

1、flex是flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局
2、采用flex布局的元素,称为flex容器,它的所有子元素自动成为容器成员,称为flex项目。子容器可以横向排列或纵向排列
3、总结:通过给父盒子添加flex属性,控制子盒子的位置和排列方式

  • 当我们为父盒子设为flex布局后,子元素的float、clear、vertical-align属性将会失效
  • 伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局

3、flex布局父盒子常见属性

  • flex-direction:设置主轴方向
  • justify-content:设置主轴上的子元素排列方式
  • flex-wrap:设置子元素是否换行
  • align-content:设置侧轴上的子元素的排列方式(多行)
  • align-items:设置侧轴上的子元素排列方式(单行)
  • flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap

3.1 flex-direction设置主轴方向

(1)主轴和侧轴

行和列、x轴和y轴
默认主轴方向是x轴,水平向右。可以改变主轴方向
默认侧轴方向是y轴,水平向下
主轴和侧轴是会变化的,看flex-direction设置谁为主轴,剩下的就是侧轴。子元素是根据主轴排列的

(2)属性值

属性值说明
row默认值从左到右
row-reverse从右到左
column从上到下
column-reverse从下到上

使用传统布局:
span行标签设置宽高,不生效

<!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>Document</title><style>div{background-color: green;width: 600px;height: 300px;}div span{width: 100px;height: 100px;background-color: orange;}</style>
</head>
<body><div><span>1</span><span>2</span><span>3</span></div>
</body>
</html>


使用flex布局:

<!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>Document</title><style>div{display: flex;flex-direction: column;background-color: green;width: 600px;height: 300px;}div span{width: 100px;height: 100px;background-color: orange;}</style>
</head>
<body><div><span>1</span><span>2</span><span>3</span></div>
</body>
</html>

在这里插入图片描述

3.2 justify-content设置主轴上的子元素排列方式**

注意:使用该属性之前先确定好主轴是哪个

属性值说明
flex-start默认值从头部开始,如果主轴是x轴,则从左到右
flex-end从尾部开始排列
center在主轴居中对齐(如果主轴是x轴,则水平居中)
space-around平分剩余空间
space-between先两边贴边,再平分剩余空间(**)
<!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>Document</title><style>div{display: flex;/* 设置主轴是x轴 */flex-direction: row;/*设置两边贴边,中间平分*/justify-content: space-between;background-color: green;width: 600px;height: 300px;}div span{width: 100px;height: 100px;background-color: orange;}</style>
</head>
<body><div><span>1</span><span>2</span><span>3</span></div>
</body>
</html>

在这里插入图片描述

3.3 flex-wrap设置子元素是否换行*

flex布局中,子元素默认不会换行(项目都排在轴线上),如果一行装不下所有的子元素,就会通过缩小子元素的宽度以放到父元素中1行进行展示。

属性值说明
wrap换行
nowrap不换行,默认不写

在这里插入图片描述
添加flex换行后:

<!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>Document</title><style>div{display: flex;/* 设置主轴是x轴 */flex-direction: row;/*设置两边贴边,中间平分*/justify-content: space-between;/* 设置子元素换行 */flex-wrap: wrap;background-color: green;width: 600px;height: 300px;}div span{width: 200px;height: 200px;margin: 10px;background-color: orange;}</style>
</head>
<body><div><span>1</span><span>2</span><span>3</span><span>4</span></div>
</body>
</html>

在这里插入图片描述

3.4 align-items 设置侧轴子元素排列方式(单行)*

在子元素为单项的时候使用

属性值说明
flex-start沿着主轴从上到下(左到右),贴着父盒子上(左)沿
flex-end从下到上
center垂直居中,居中
stretch拉伸(默认值),子盒子不要设置高度。拉到和父亲一样高
<!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>Document</title><style>div{display: flex;/* 设置主轴是x轴 */flex-direction: row;/*设置两边贴边,中间平分*/justify-content: space-between;/* 设置子元素换行 */flex-wrap: wrap;/* 设置垂直居中(单行) */align-items: center;background-color: green;width: 600px;height: 300px;}div span{width: 100px;height: 100px;margin: 10px;background-color: orange;}</style>
</head>
<body><div><span>1</span><span>2</span><span>3</span></div>
</body>
</html>

在这里插入图片描述

3.5 align-content设置子元素沿侧轴排列方式(多行)*

看主轴上有无出现换行,行指的是主轴的方向
适用于子项出现换行的情况(多行),单行使用没有效果

属性值说明
flex-start默认值,在侧轴的头部开始排列
flex-end在侧轴的尾部开始排列
center在侧轴中间显示
space-around子项在侧轴平分剩余空间
space-between子项在侧轴先分布在两头,再平分剩余空间
stretch设置子项元素高度平分父元素高度
<!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>Document</title><style>div{display: flex;/* 设置主轴是x轴 */flex-direction: row;/*设置两边贴边,中间平分*/justify-content: space-between;/* 设置子元素换行 */flex-wrap: wrap;/* 设置垂直居中(单行) *//* align-items: center; *//* 设置两边贴在侧轴头部 */align-content: space-between;background-color: green;width: 600px;height: 300px;}div span{width: 100px;height: 100px;margin: 10px;background-color: orange;}</style>
</head>
<body><div><span>1</span><span>2</span><span>3</span><span>4</span><span>5</span><span>6</span><span>7</span><span>8</span></div>
</body>
</html>

在这里插入图片描述

3.6 flex-flow

是flex-wrap和flex-direction的简写属性

flex-flow:row wrap;
<!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>Document</title><style>div {display: flex;/* 设置主轴是x轴 */flex-direction: row;/*设置两边贴边,中间平分*/justify-content: space-between;/* 设置子元素换行 */flex-wrap: wrap;/* 设置垂直居中(单行) *//* align-items: center; *//* 设置两边贴在侧轴头部:多行 */align-content: space-between;/* 设置主轴和换行 */flex-flow: column wrap;background-color: green;width: 600px;height: 300px;}div span {width: 100px;height: 100px;margin: 10px;background-color: orange;}</style>
</head><body><div><span>1</span><span>2</span><span>3</span><span>4</span><span>5</span><span>6</span><span>7</span><span>8</span></div>
</body></html>

在这里插入图片描述

4、子项属性使用

  • flex:子项占的份数**
  • align-self:控制子项自己在侧轴的排列方式
  • order:属性定义子项的排列顺序(前后顺序)

4.1 flex属性

定义子项目分配剩余空间,flex表示占多少份数

.item{flex:1;/*default 0*/
}

可以实现圣杯布局:缩放屏幕时,两边固定,中间自适应

<!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>Document</title><style>section{display: flex;width: 60%;margin: 0 auto;height: 150px;background-color: #ccc;}section div:first-child{width: 100px;height: 150px;background-color: green;}section div:nth-child(2){flex:1 ;}section div:nth-child(3){width: 100px;height: 150px;background-color: orange;}</style>
</head>
<body><section><div></div><div></div><div></div></section>
</body>
</html>

在这里插入图片描述

<!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>Document</title><style>p{display: flex;width: 60%;margin: 100px auto;height: 150px;background-color: #ccc;}p span{flex:1;}</style>
</head>
<body><p><span>1</span><span>2</span><span>3</span></p>
</body>
</html>

在这里插入图片描述
设置第2个盒子占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>Document</title><style>p{display: flex;width: 60%;margin: 100px auto;height: 150px;background-color: #ccc;}p span{flex:1;}p span:nth-child(2){flex: 2;background-color: green;}</style>
</head>
<body><p><span>1</span><span>2</span><span>3</span></p>
</body>
</html>

在这里插入图片描述

4.2 align-self控制子项自己在侧轴的排列方式

允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

span:nth-child(2){//设置第2个盒子在侧轴上的排列方式align-self:flex-end;
}
<!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>Document</title><style>section{width:60%;height: 200px;display: flex;/* 设置子项沿侧轴从底部开始排列 */align-items: flex-end;background-color: #ccc;}section div{width: 100px;height: 150px;margin: 10px;background-color: orange;}section div:nth-child(2){/* 设置第二个子项是沿着侧轴顶部排列 */align-self: flex-start;}</style>
</head>
<body><section><div>1</div><div>2</div><div>3</div></section>
</body>
</html>

在这里插入图片描述

4.3 order属性定义项目的排列顺序

数值越小越靠前,默认是0

<!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>Document</title><style>section{width:60%;height: 200px;display: flex;/* 设置子项沿侧轴从底部开始排列 */align-items: flex-end;background-color: #ccc;}section div{width: 100px;height: 150px;margin: 10px;background-color: orange;}section div:nth-child(2){/* 设置第二个子项是沿着侧轴顶部排列 */align-self: flex-start;/* 设置2号盒子在1号盒子之前,默认是0 ,-1<0 */order:-1;}</style>
</head>
<body><section><div>1</div><div>2</div><div>3</div></section>
</body>
</html>

在这里插入图片描述


http://www.ppmy.cn/news/6987.html

相关文章

深度学习02:损失函数总结

目录 nn.L1Loss: nn.NLLLoss: nn.MSELoss: nn.CrossEntropyLoss: 损失函数是用来估量模型的预测值与真实值的不一致程度&#xff0c;它是一个非负实值函数。我们训练模型的过程&#xff0c;就是通过不断的迭代计算&#xff0c;使用梯度下降的优化算法&#xff0c;使得损失函…

【JavaScript】ES6模块化开发

文章目录一. 模块化的意义二. ES6 模块化讲解定义模块&#xff1a;导入模块&#xff1a;配置模块&#xff1a;HTML页面加载规则一. 模块化的意义 函数编程---->闭包---->命名空间---->模块化编程 模块化的意义–冲突和依赖 模块化思想 就是指将页面根据内容的关联性…

PostgreSQL数据库TableAM——Table scan callbacks

TableAM Table scan TableAM提供了如下4个接口用于实现表数据的扫描功能。scan_begin函数的形参nkeys不为零&#xff0c;则扫描结果需要根据scan keys先进行过滤&#xff1b;pscan如果不为null&#xff0c;说明该结构体已经由parallelscan_initialize初始化过了(仅仅在table_b…

软件设计中最关键的“开闭原则”,究竟指什么呢?

前言 软件设计原则中有一条很关键的原则是开闭原则&#xff0c;就是所谓的对扩展开放&#xff0c;对修改关闭。个人觉得这条原则是非常重要的&#xff0c;直接关系到你的设计是否具备良好的扩展性&#xff0c;但也是相对比较难以理解和掌握的&#xff0c;究竟怎样的代码改动才…

显著性分析

选择图 为什么要分Non-parametric & parametric 方法 为了找到更符合数据的分析方法。每个方法有自己的假设&#xff0c;如果违背了结果会不精准。 Sign Test 是一个可以用于任何数据分布情况的pairwise 方法。 检查normality: Sample 数量 < 50,适用 Shapiro-Wilk&am…

ElasticSearch 数据读写

文章目录一、数据模型1.1 PacificA 算法1.2 ES 数据副本模型1.2.1 写入模型1.2.2 读取模型1.2.3 一致性保障二、ES 数据写入2.1 写入详细流程2.1.1 协调节点流程2.1.2 主分片节点流程三、ES 数据读取3.1 GET 流程3.2 Search 流程四、索引恢复一、数据模型 1.1 PacificA 算法 …

vue2[webpack]中接入vue3[vite]的qiankun微前端服务

本文记录在 vue2[webpack]老项目中&#xff0c;使用qiankun.js微前端服务&#xff0c;接入vue3[vite]新项目。 纯vue2[webpack]技术项目可参考以前的文章&#xff1a; vue项目落地(qiankun.js)微前端服务-zhanghaoran’s blog vue2为基座主应用&#xff1b; vue3为子应用。 改造…

2022年学习机器人和人工智能的一些体会

前些日子开会&#xff0c;很受启发&#xff0c;比如有大佬指出&#xff1a; 总结&#xff1a;一般是高屋建瓴&#xff0c;通常是级别高的总揽全局&#xff0c;小虾虾不适用&#xff1b;感想和体会&#xff1a;小虾虾们学习完大佬讲话之后&#xff0c;自己的收获。 这才发现写博…