likes
comments
collection
share

【译】start、flex-start 和 slef-start 有什么区别?

作者站长头像
站长
· 阅读数 59

原文:What's the difference between the alignment values of start, flex-start, and self-start?

作者:Rachel Andrew

当我们需要在 Flexbox 中左对齐或右对齐 flex 项目时,有好些个属性值可供我们选择。在这篇文章中,我将解释以下几个含义非常相似的属性值之间的区别。

  • flex-startflex-end
  • startend
  • self-startself-end

Firefox 和 Chrome Canary 浏览器已支持start,end,self-startself-end属性值,Chrome 在 93 版本添加了对它们的支持。运行本文中的 demo 需要你使用支持这几个属性的浏览器。

几个 flexbox 术语

在本文中我会用到一些有助于理解 flexbox 中对齐方式的术语。如果你想深入了解盒子对齐规范中更多关于这个主题的内容,了解这些术语也会对你有所帮助。

对齐容器

flex 项目的父元素,即声明了diaplay: flex的元素。

对齐对象

即 flex 项目,参与对齐的元素。

主轴

flex-direction属性值表示的方向。如果flex-direction属性值为row,主轴即为row

交叉轴

flex-direction属性值的垂直方向。如果flex-direction属性值为row,交叉轴即为column

主轴原点和主轴终点

主轴的起始点和结束点。

交叉轴原点和交叉轴终点

交叉轴的起始点和结束点。

注意,除了flex-startflex-end这两个特定用于 flexbox 的值之外,其它值都可以在任何支持对齐的格式化上下文中使用,比如 CSS Grid 布局。

对比 flex-start/flex-end 和 start/end

在下面这个示例中,有一个 flex 容器(对齐容器),内部有两个 flex 项目(对齐对象)。flex-direction初始值为row

通过下拉框切换justify-content属性值。当flex-direction: row时, flex-startstart表现一致,flex-endend也是如此。

然而,将flex-direction切换为row-reverse时,你就会发现不同之处了。此时,主轴原点和主轴终点被交换,原点在右而终点在左。不过这并没有改变文本方向,文本方向仍然是从左到右。

现在试着切换一下justify-content的不同属性值。你会发现flex-end会将 flex 项目移动到左边—— flex 容器的主轴终点。使用end时,flex 项目会移动到右边——容器文档流的终点。

尝试在容器上使用direction:rtl进行演示,看看当文本方向改变时这些属性值是如何工作的。

因此,如果你希望元素与flex-direction定义的终点对齐,使用flex-end属性。如果希望其与对齐容器的终点对齐,则使用end属性。

对比 self-start/self-end 和 start/end

通过上一个示例,我们已经了解到startend是相对于“流”的,与书写模式和脚本方向有关。self-startslef-end同样也是相对于“流”的,但它们与对齐对象(即 flex 项目)的书写模式和方向相关。

要了解它们是如何工作的,请看下面的 demo。容器内部包含三个 flex 项目。容器的flex-direction属性值为column,因此它的交叉轴方向为row。第二个 flex 项目指定了direction: rtl

align-items: start时,所有项目靠左对齐,这是因为容器具有从左到右的方向。然而,将其更改为align-items: self-start,第二个项目会对齐到 flex 容器的终点——其文档流的相对起始位置。

因此,当需要让项目遵循对齐容器的方向或书写模式时,可以使用startend属性。而当需要让项目遵循对齐对象的书写模式或方向时,可以使用self-startself-end属性。

转载自:https://juejin.cn/post/7223710471917142074
评论
请登录