原文:Flexbox: Aligning with Auto Margins, by Samantha Mingcss
align-self
控制的是交叉轴上的 Flex 项目对齐。但问题来了,“在主轴上有没有相似的属性存在呢”,好比说“justify-self”🤔 好问题!不过答案是没有😅。但有一个已经存在的属性能够利用,那就是 auto margin !咱们能够用它控制指定元素在水平方向上的对齐方式。git
事实上,你也能够用 auto margin 控制指定元素在垂直方向上的对齐方式。github
并且,若是你在 Flex 项目设置了 margin: auto
(相对于 left、right、top、bottom 四个方向都同时设置了),甚至能够实现 Flex 项目在容器中的垂直居中效果!bash
看到这儿,你可能有点困惑了。为何使用了 margin-left: auto
后,Flex 项目被推倒右边了呢;为何使用了 margin-right: auto
后,Flex 项目被推倒左边了呢。有点反直觉哦,别担忧,我也这么以为 😅布局
还记得 margin
的基本概念吗?其实就是为了给元素添加间隔。好比 margin-left: 50px
,会在元素的左边添加 50px
的间隔,将元素向右推了一些距离。使用 margin-left: auto
,auto
则会计算当前的整个可用空间,而后将这么多的空间安排在元素的左侧,结果将元素一直向右推。学习
margin | 间隔 | 表现 |
---|---|---|
margin-left |
在左边添加间隔 | 将元素向右推 |
margin-right |
在右边添加间隔 | 将元素向左推 |
margin-top |
在上边添加间隔 | 将元素向下推 |
margin-bottom |
在下边添加间隔 | 将元素向上推 |
margin |
在每一个面都添加间隔 | 元素垂直居中 |
若是在 Flex 项目使用了 auto margin,那么它的优先级高于在其余地方的对齐属性设置,至关于在其余地方的设置无效了 💪flex
为何?flexbox
注意:若是剩余空间分配给了 auto margin,那么对齐属性在那个维度上的设置就会无效,由于 margin 已经用完了剩余空间(在 Flex 项目分配完成后)。spa
若是用非开发术语表述的话,auto margin 是你怀着善意邀请的某个笨朋友,他住在你的房子里,而后认为整个房子都是他的,并占用了全部空间。你没有那种朋友?我也没有😳但我想你应该明白了我要表达的那个点了吧😂3d
下面列出了一些关于使用 auto margin 的例子,很是亮眼!用它来布局你喜欢的导航栏排版样式很是好 🤩
我保证你对使用哪一个或者何时改用哪一个有点头晕(这是要选择的问题,对嘛)😅。我是这么作的:
理由?我以为 Flexbox 属性更加符合直觉,比“auto margin” 的表达也更加明确。来比较下:
.child {
align-self: flex-end;
}
复制代码
vs
.child {
margin-top: auto;
}
复制代码
即便你没有学习过关于 Flexbox 方面的相关知识。只从字面上看代码的话,咱们能够推断出 child
是对齐到末端的(end)。而来再看看 margin-top: auto
,你可能就会有点头晕,它究竟是想要实现怎样的布局效果。固然,这只是个人建议。你能够为你和你的团队作出合适的选择 😊
(完)