当前位置: 首页 > news >正文

css3伸缩盒模型第三章(伸缩相关)

伸缩盒模型第三章(伸缩)

介绍了伸缩性的伸缩提现到哪些方面,以及flex 居中的小技巧,视觉差异等

  • flex 水平垂直居中
  • 伸缩性
  • flex 复合式属性
  • 项目排序
  • 侧轴单独对齐

flex 水平居中

我们可以使用flex 使元素居中对齐,当然也可以用 margin 等进行对比,但是比较麻烦

代码

  <title>08.水平垂直居中对齐</title><style>.outer {width: 600px;height: 600px;background-color: #888;/* 开启弹性盒子 */display: flex;/* 方案一   主轴   侧轴对齐 *//* justify-content: center;align-items: center; */}.inner {width: 150px;height: 150px;background-color: pink;/* 方案二 */margin: auto;}</style>
</head>
<body><div class="outer"><div class="inner"></div></div>
</body>

效果

在这里插入图片描述

方案1

前提一定是需要开启弹性布局,display: flex;

/* 方案一 主轴 侧轴对齐 */

​ justify-content: center;

​ align-items: center;

方案2

/* 方案二 */

​ margin: auto;

flex-basic 基线

  • 概念: flex-basis 设置的是主轴方向的基准长度,会让宽度或高度失效。
  • flex-basis 默认值为 auto

代码

<title>09.基线对齐</title><style>.outer {width: 800px;height: 800px;background-color: #888;display: flex;/* 主轴方向  如果是横向,那么flex-basis代表的就是宽度,高度就失效了 *//* flex-direction: row; *//* 主轴方向  如果是纵向,那么flex-basis代表的就是高度,宽度就失效了  */flex-direction: column;}.inner {width: 200px;height: 200px;background-color: deeppink;border: 1px solid black;}.inner2 {/* 默认值是 auto *//* flex-basis: auto; */flex-basis: 300px;}</style>
</head>
<body><div class="outer"><div class="inner">1</div><div class="inner inner2">2</div><div class="inner">3</div></div>
</body>

主轴方向

我们设置主轴方向的不同,会让宽或者高失效

主轴横向

flex-direction: row

.inner2 {

​ /* 默认值是 auto */

​ /* flex-basis: auto; */

​ flex-basis: 300px;

}

在这里插入图片描述

结论

主轴方向 如果是横向,那么flex-basis代表的就是宽度,高度就失效了,我们设置的每一个项目宽度是200px,但是当我们设置了 flex-basis 为300px的时候,伸缩项目原来的200px宽度就失效了,统一为300px

主轴为纵向

我们可以设置主轴为纵向,也就是上下

flex-direction: column;

.inner2 {

​ /* 默认值是 auto */

​ /* flex-basis: auto; */

​ flex-basis: 300px;

}

在这里插入图片描述

总结

主轴方向 如果是纵向,那么flex-basis代表的就是高度,宽度就失效了。每个项目本身是200px,当设置了 flex-basis 后,高度就变为 300px了

伸缩项目(伸)

flex-grow(伸)

  • 概念: flex-grow 定义伸缩项目的放大比例,默认为 0 ,即:纵使主轴存在剩余空间,也不拉伸(放大)。
  • 规则
    • 若所有伸缩项目的 flex-grow 值都为 1 ,则:它们将等分剩余空间(如果有空间的话)。
    • 若三个伸缩项目的 flex-grow 值分别为: 1 、 2 、 3 ,则:分别瓜分到: 1/6 、 2/6 、
      3/6 的空间。

代码

<title>10.伸缩项目(伸)</title><style>.outer {width: 1000px;height: 700px;background-color: #888;margin: 0 auto;/* 开启弹性布局 */display: flex;/* 主轴方西  默认从左到右边 */flex-direction: row;/* 换行 */flex-wrap: wrap;}.inner {width: 200px;height: 200px;background-color: aqua;border: 1px solid black;box-sizing: border-box;font-size: 30px;text-align: center;/* 开始拉伸 *//* flex-grow: 1; *//* 方式1   1   就是每一个 项目均分剩余的空间  *//* flex-grow: 1; */}/* 方式二  分开设置    我们留下了300px的空间    那么就是所有的 flex-grow来平均分配这些剩下的空间比例值    300 / 6 = 50  inner1 = 50 * 1 = 50px + 200px   = 250px inner2 = 50 * 2 = 100px + 300px   = 400px inner3 = 50 * 3 = 150px + 200px   = 250px */.inner1 {flex-grow: 1;}.inner2 {width: 300px;background-color: deeppink;flex-grow: 2;}.inner3 {flex-grow: 3;}</style>
</head>
<body><div class="outer"><div class="inner inner1">1</div><div class="inner inner2">2</div><div class="inner inner3">3</div></div>
</body>

案例一

我们将伸缩项目均分

.inner {

​ width: 200px;

​ height: 200px;

​ background-color: aqua;

​ border: 1px solid black;

​ box-sizing: border-box;

​ font-size: 30px;

​ text-align: center;

​ /* 开始拉伸 */

​ /* flex-grow: 1; */

​ /* 方式1 1 就是每一个 项目均分剩余的空间 */

​ flex-grow: 1;

}

效果

在这里插入图片描述

公式计算

我们设置了父容器盒子为1000px,三个盒子占用的空间为 200 + 300 + 200 = 700 ,也就是说我们还剩余了200px的宽度,这个时候我们设置了 flex-grow为1 就是是均分了剩下的 300 那么就是每个伸缩项目各占100

  • 总等分为 1 + 1 + 1 = 3
  • 300(剩余的空间) / 3 = 100
  • 项目1 = 100 * 1 + 200(自身宽度) = 300px

案例二

我们将每个项目均不同划分,这个时候每个项目分摊后得到的均不相同,分开设置 我们留下了300px的空间 那么就是所有的 flex-grow来平均分配这些剩下的空间

.inner1 {

​ flex-grow: 1;

}

.inner2 {

​ width: 300px;

​ background-color: deeppink;

​ flex-grow: 2;

}

.inner3 {

​ flex-grow: 3;

}

效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

公式计算

 比例值    300 / 6 = 50  inner1 = 50 * 1 = 50px + 200px   = 250px inner2 = 50 * 2 = 100px + 300px   = 400px inner3 = 50 * 3 = 150px + 200px   = 350px 

伸缩项目(缩)

flex-shrink(缩)

  • 概念: flex-shrink 定义了项目的压缩比例,默认为 1 ,即:如果空间不足,该项目将会缩小。

  • 注意

    我们需要将 flex-wrap设置为压缩模式,否则不生效 flex-wrap: nowrap;

背景

  • 我们设置了三个项目,分别为 item1 = 200px item2 = 300px item3 = 200px ,共起来是 700px

  • 容器大小为 400px

  • 压缩空间为 700 - 400 = 300px

我们需要在压缩的300 身上分析每一个均摊了多少

代码

<title>11.伸缩项目(缩)</title><style>.outer {width: 400px;height: 700px;background-color: #888;margin: 0 auto;/* 开启弹性布局 */display: flex;/* 主轴方西  默认从左到右边 */flex-direction: row;/* 默认就是压缩空间    改选项一定要开启   */flex-wrap: nowrap;}.inner {width: 200px;height: 200px;background-color: aqua;border: 1px solid black;box-sizing: border-box;font-size: 30px;text-align: center;/* 均分拉伸剩余空间 */flex-grow: 1;/* 缩小 方式1 均分 *//* flex-shrink: 1; *//* 计算缩小方式   压缩300的空间共计三个伸缩项目    所有的都加起来计算分母  200 * 1  + 300 * 1 + 200 * 1 = 700 inner1 比例   (200 * 1) / 700 =  0.2857inner2 比例   300 * 1 / 700 =  0.4285inner3 比例   200 * 1 / 700 =  0.2857inner1 需要缩小的范围   300 * 0.2857 = 85.714inner2 需要缩小的范围   300 * 0.4285 = 128.57inner3 需要缩小的范围   300 * 0.2857 = 85.714inner1 实际大小为 200 - 85.714 = 114.2857inner2 实际大小为 300 - 128.57 = 171.4285inner3 实际大小为 200 - 85.714 = 114.2857*/}/* 方式2    每一个都不同  *//* 总空间为:  (200 * 1) + (300 * 2) + (200 * 3) = 1400 */.inner1 {/* 所占比例为:      200 * 1 / 1400 = 0.14285需要压缩的空间为:0.14285 * 300 = 42.857剩余的空间为:    200 - 42.857 = 157.14285*/flex-shrink: 1;}.inner2 {width: 300px;background-color: tomato;/* 所占比例为:      300 * 2 / 1400 = 0.42857需要压缩的空间为:0.42857 * 300 = 128.5714剩余的空间为:    300 - 128.5714 = 171.4285*/flex-shrink: 2;}.inner3 {/* 所占比例为:      200 * 3 / 1400 = 0.42857需要压缩的空间为:0.42857 * 300 = 128.5714剩余的空间为:    200 - 128.5714 = 71.428*/flex-shrink: 3;}</style>
</head>
<body><div class="outer"><div class="inner inner1">1</div><div class="inner inner2">2</div><div class="inner inner3">3</div></div>
</body>

比例均分

我们缩小比例都设置为1 ,这个时候,我们看到1 和3 一样,摊的比我们想象中的要少,按照我们的想象,是不是 1 需要压缩100 ,2也是100 3 也是100 呢,实际不是。具体算法看下方公式

flex-shrink: 1

效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

计算公式

 计算缩小方式   压缩300的空间共计三个伸缩项目    所有的都加起来计算分母  200 * 1  + 300 * 1 + 200 * 1 = 700 inner1 比例   (200 * 1) / 700 =  0.2857inner2 比例   300 * 1 / 700 =  0.4285inner3 比例   200 * 1 / 700 =  0.2857inner1 需要缩小的范围   300 * 0.2857 = 85.714
inner2 需要缩小的范围   300 * 0.4285 = 128.57
inner3 需要缩小的范围   300 * 0.2857 = 85.714inner1 实际大小为 200 - 85.714 = 114.2857
inner2 实际大小为 300 - 128.57 = 171.4285
inner3 实际大小为 200 - 85.714 = 114.2857

比例不均分

我们将每一个项目压缩比例设置不同,压缩的空间还是300 ,看这些是如何分配的

.inner1 {

​ flex-shrink: 1;

}

.inner2 {

​ width: 300px;

​ background-color: tomato;

​ flex-shrink: 2;

}

.inner3 {

​ flex-shrink: 3;

}

效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

公式计算

总空间为:  (200 * 1) + (300 * 2) + (200 * 3) = 1400 
# 项目1计算      flex-shrink: 1;/* 所占比例为:      200 * 1 / 1400 = 0.14285需要压缩的空间为:0.14285 * 300 = 42.857剩余的空间为:    200 - 42.857 = 157.14285*/# 项目2 计算        flex-shrink: 2;/* 所占比例为:      300 * 2 / 1400 = 0.42857需要压缩的空间为:0.42857 * 300 = 128.5714剩余的空间为:    300 - 128.5714 = 171.4285*/# 项目3 计算           flex-shrink: 3; /* 所占比例为:      200 * 3 / 1400 = 0.42857需要压缩的空间为:0.42857 * 300 = 128.5714剩余的空间为:    200 - 128.5714 = 71.428*/ 

flex 复合属性

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

  • 注意
    • 我们一定要注意顺序,第一个代表为 flex-grow(拉),flex-shirk(缩),flex-basis 基线

代码

 <title>12.复合属性flex</title><style>.outer {width: 900px;height: 700px;background-color: #888;margin: 0 auto;/* 开启弹性布局 */display: flex;/* 主轴方西  默认从左到右边 */flex-direction: row;/* 默认就是压缩空间   */flex-wrap: nowrap;}.inner {width: 200px;height: 200px;background-color: chocolate;border: 1px solid black;box-sizing: border-box;font-size: 30px;text-align: center;/* 均分拉伸剩余空间 *//* flex-grow: 1; *//* 均摊压缩空间 *//* flex-shrink: 1; *//* 基线 *//* flex-basis: 100px; *//* 有顺序要求   拉  缩 基线 *//* 写法1  拉伸   缩小   自动  简写  flex: auto *//* flex: 1 1 auto; *//* 写法2   全部都是拉伸的效果   简写 flex: 1 *//* flex: 1 1 0; *//* 写法3  不拉  不缩 高度自动  缩小的里面内容就溢出了 ,大了也不填充简写 flex : none *//* flex: 0 0 auto; *//* 写法4  不拉    可以缩  宽高自动  简写 flex: 0 auto 实际就是默认值 */flex: 0 1 auto;}</style>
</head>
<body><div class="outer"><div class="inner">1</div><div class="inner">2</div><div class="inner">3</div></div>
</body>

写法1

  • flex: 1 1 auto; 拉伸 缩小 自动
  • 简写为 flex: auto

在这里插入图片描述

写法2

  • flex: 1 1 0; 全部都是拉伸的效果
  • 简写 flex: 1

在这里插入图片描述

写法3

  • flex: 0 0 auto; 不拉 不缩 高度自动 缩小的里面内容就溢出了 ,大了也不填充
  • 简写 flex : none

在这里插入图片描述

写法4

  • flex: 0 1 auto; 不拉 可以缩 宽高自动 ,实际为默认值
  • flex: 0 1 auto;

在这里插入图片描述

项目排序与单独对齐

我们可以设置项目的排列顺序已经对齐方式;

代码

<title>13.项目排序与单独对齐</title><style>.outer {width: 900px;height: 700px;background-color: #888;margin: 0 auto;/* 开启弹性布局 */display: flex;/* 主轴方西  默认从左到右边 */flex-direction: row;/* 默认就是压缩空间   */flex-wrap: nowrap;}.inner {width: 200px;height: 200px;background-color: purple;border: 1px solid black;box-sizing: border-box;font-size: 30px;text-align: center;}.inner2 {background-color: aliceblue;order: -3;}.inner4 {/* 排序,默认是0  也就是以写的标签一个一个的排列  */order: -1;/* 对齐  实际上是 侧轴 */align-self: flex-end;}</style>
</head>
<body><div class="outer"><div class="inner inner1">1</div><div class="inner inner2">2</div><div class="inner inner3">3</div><div class="inner inner4">4</div></div>
</body>

项目排序

  • order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0 。

.inner4 {

/* 排序,默认是0 也就是以写的标签一个一个的排列 */

​ order: -1;

}

.inner2 {

​ background-color: aliceblue;

​ order: -3;

}

在这里插入图片描述

单独对齐

  • 通过 align-self 属性,可以单独调整某个伸缩项目的对齐方式
  • 默认值为 auto ,表示继承父元素的 align-items 属性。

.inner4 {

/* 排序,默认是0 也就是以写的标签一个一个的排列 */

​ order: -1;

​ /* 对齐 实际上是 侧轴 */

​ align-self: flex-end;

}

在这里插入图片描述

相关文章:

  • JWT深度解析:现代Web身份验证的通行证-优雅草卓伊凡
  • 基于FPGA婴儿安全监护系统(蓝牙小程序监测)
  • python小说网站管理系统-小说阅读系统
  • 深入解析asyncio的实现与应用
  • 在模 p 运算中,将负数 x 转换为对应的正数,执行 (x % p + p) % p 操作即可。
  • 大模型调优方法与注意事项
  • 基于springboot+vue的校园部门资料管理系统
  • 【java】oop 结课模拟题版
  • Python 异常处理与文件 IO 操作:构建健壮的数据处理体系(3/10)
  • 【开源】Python打造高效剪贴板历史管理器:实现跨平台生产力工具
  • 数据分析平台选型与最佳实践:如何打造高效、灵活的数据生态?
  • PyTorch 实战:从 0 开始搭建 Transformer
  • 按句子切分文本、保留 token 对齐信息、**适配 tokenizer(如 BERT)**这种需求
  • 数据中台-常用工具组件:DataX、Flink、Dolphin Scheduler、TensorFlow和PyTorch等
  • 计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术
  • 从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践
  • 【银河麒麟高级服务器操作系统】服务器外挂存储ioerror分析及处理分享
  • flinksql bug : Max aggregate function does not support type: CHAR
  • Debian系统详解
  • UV使用官网
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 越秀地产前4个月销售额约411.2亿元,达年度销售目标的34.1%
  • 定位真核生物起源于约27.2亿年前,华东师大团队在《自然》发文
  • 美国与胡塞武装达成停火协议,美伊相向而行?
  • 被炒热的“高潮针”:超适应症使用,安全性和有效性存疑
  • 工人日报关注跟着演出去旅游:票根经济新模式兴起,让过路客变过夜客