实用的 Web 布局技巧:Flex 主轴上的自动外边距

栏目: Html · 发布时间: 6年前

内容简介:先来看一个需求场景:上图中需要实现在水平方向上子元素之间、子元素和父容器边框之间的间距要相等。

问题描述

先来看一个需求场景:

实用的 Web 布局技巧:Flex 主轴上的自动外边距

上图中需要实现在水平方向上子元素之间、子元素和父容器边框之间的间距要相等。

实现的方法有很多,我们这里要讨论的是:如何简洁地使用 Flex 布局来实现?

我这里采用的方法是: 使用自动的外边距在主轴上对齐。

自动的外边距在主轴上对齐

我们先来看一下 MDN 关于这个的解释:

... 自动的外边距会占据全部的多余的空间——在一个块上设置自动的左右外边距可以使它居中。两边尽可能占据多的空间,块就被置于中间位置了。

这很好理解:自动外边距将平分全部的剩余空间。下面就来尝试下这个方案吧,代码如下:

<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>
.container {
  display: flex;
  align-items: center;
  box-sizing: border-box;
  border: 2px dashed #7cb305;
  width: 600px;
  height: 200px;
  margin: auto;
}


.item {
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 auto;
  width: 100px;
  height: 100px;
  background: #722ed1;
  border-radius: 50%;
  color: #fff;
  font-size: 22pt;
}

然后看一下效果:

实用的 Web 布局技巧:Flex 主轴上的自动外边距

貌似有点不对。仔细看看子元素之间的间距比到边框的大,大概是子元素到边框的两倍,跟我们预期的效果有差异。

按照 MDN 的解释来看,自动的外边距会等分剩余空间,但为什么会出现上图的情况呢?下面来谈一下我的理解。

主轴剩余空间“分配权重”与子元素自动外边距的关系

这个分配权重关系没有在 MDN 上找到相关解释,纯粹是个人见解,我们可以这样来理解:

margin-*: auto

首先,这个理解显然是可以满足 MDN 上的解释。然后我们再来看看上图的情况怎么解释:

  • 我们把 子元素1 的左边区域命名为 间距区域1子元素1 的右边区域命名为 间距区域2
  • 子元素1 的左边和右边都有自动外边距,那么 间距区域1的权重 = 1间距区域2的权重 = 1
  • 子元素2 的左边和右边都有自动外边距,那么 间距区域2的权重 = 1 + 1 = 2
  • 最后 间距区域1的权重间距区域1的权重 就是 1:2 的关系
  • 其他区域依次类推,最后根据权重划分间距区域大小

然后依据这种理解我们来调整下代码,只需要在每个相隔的区域上声明一次自动外边距就好了:

  • 首先我们把 .item 这个样式上的 margin 去掉
  • 然后只在 html 的 子元素1子元素3 上设置 style="margin: 0 auto"

调整后如下:

<div class="container">
  <div class="item" style="margin: 0 auto">1</div>
  <div class="item">2</div>
  <div class="item" style="margin: 0 auto">3</div>
</div>
.container {
  display: flex;
  align-items: center;
  box-sizing: border-box;
  border: 2px dashed #7cb305;
  width: 600px;
  height: 200px;
  margin: auto;
}


.item {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100px;
  height: 100px;
  background: #722ed1;
  border-radius: 50%;
  color: #fff;
  font-size: 22pt;
}

OK,问题解决了

根据这个理解还有一种设置也可以达到同样效果:

<div class="container">
  <div class="item" style="margin-left: auto">1</div>
  <div class="item" style="margin: 0 auto">2</div>
  <div class="item" style="margin-right: auto">3</div>
</div>

以上代码已放到 codepen 上: https://codepen.io/deepfunc/pen/BembyQ

各位童鞋如果觉得还可以请点赞和收藏下哈


以上所述就是小编给大家介绍的《实用的 Web 布局技巧:Flex 主轴上的自动外边距》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

统计思维:程序员数学之概率统计

统计思维:程序员数学之概率统计

Allen B.Downey / 张建锋、陈钢 / 人民邮电出版社 / 2013-5 / 29.00元

代码跑出来的概率统计问题; 程序员的概率统计开心辞典; 开放数据集,全代码攻略。 现实工作中,人们常被要求用数据说话。可是,数据自己是不能说话的,只有对它进行可靠分析和深入挖掘才能找到有价值的信息。概率统计是数据分析的通用语言,是大数据时代预测未来的根基。 站在时代浪尖上的程序员只有具备统计思维才能掌握数据分析的必杀技。本书正是一本概率统计方面的入门图书,但视角极为独特,折......一起来看看 《统计思维:程序员数学之概率统计》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码