内容简介:先来看一个需求场景:上图中需要实现在水平方向上子元素之间、子元素和父容器边框之间的间距要相等。
问题描述
先来看一个需求场景:
上图中需要实现在水平方向上子元素之间、子元素和父容器边框之间的间距要相等。
实现的方法有很多,我们这里要讨论的是:如何简洁地使用 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;
}
然后看一下效果:
貌似有点不对。仔细看看子元素之间的间距比到边框的大,大概是子元素到边框的两倍,跟我们预期的效果有差异。
按照 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 主轴上的自动外边距》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- css经典布局系列三——三列布局(圣杯布局、双飞翼布局)
- 四种方法实现──三栏布局(圣杯布局、双飞翼布局)
- 浅谈CSS三栏布局(包括双飞翼布局和圣杯布局)
- css经典布局——圣杯布局
- CSS布局基础——(三栏布局)
- Grid布局 - 一键布局尝试总结~
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP经典实例(第3版)
David Sklar、Adam Trachtenberg / 苏金国、丁小峰 / 中国电力出版社 / 2015-7 / 128.00
想要掌握PHP编程技术?或者想要学习如何完成一个特定的任务?那么一定要先看看《PHP经典实例(第3版)》。本书介绍了专门为PHP 5.4和5.5修订的350个经典技巧,并提供了丰富的示例代码。特别是对生成动态Web内容的解决方案做了全面更新,从使用基本数据类型到查询数据库,从调用RESTful API到测试和保护网站安全都有涵盖。 各个技巧都提供了示例代码,可以免费使用,另外还讨论了如何解决......一起来看看 《PHP经典实例(第3版)》 这本书的介绍吧!