align-items

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 2015 年 9 月以来,该特性已在各大浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

CSSalign-items 属性将所有直接子元素作为一个整体来设置 align-self 的值。在 Flexbox 布局中,它控制着子元素在交叉轴上的对齐方式。在 Grid 布局中,它控制着子元素在其网格区域内沿块级轴的对齐方式。

试一试

align-items: stretch;
align-items: center;
align-items: start;
align-items: end;
<section class="default-example" id="default-example">
  <div class="example-container">
    <div class="transition-all" id="example-element">
      <div>One</div>
      <div>Two</div>
      <div>Three</div>
    </div>
  </div>
</section>
#example-element {
  border: 1px solid #c5c5c5;
  display: grid;
  width: 200px;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: 80px;
  grid-gap: 10px;
}

#example-element > div {
  background-color: rgb(0 0 255 / 0.2);
  border: 3px solid blue;
}

下面的交互式示例演示了在网格和 Flexbox 布局中使用 align-items 的一些值。

语法

css
/* Basic keywords */
align-items: normal;
align-items: stretch;

/* Positional alignment */
/* align-items does not take left and right values */
align-items: center;
align-items: start;
align-items: end;
align-items: flex-start;
align-items: flex-end;
align-items: self-start;
align-items: self-end;
align-items: anchor-center;

/* Baseline alignment */
align-items: baseline;
align-items: first baseline;
align-items: last baseline;

/* Overflow alignment (for positional alignment only) */
align-items: safe center;
align-items: unsafe center;

/* Global values */
align-items: inherit;
align-items: initial;
align-items: revert;
align-items: revert-layer;
align-items: unset;

normal

此关键字的效果取决于我们所处的布局模式。

  • 在绝对定位布局中,该关键字在可替换的绝对定位盒子上表现得像 start,而在所有其他绝对定位盒子上表现得像 stretch
  • 在绝对定位布局的静态位置上,该关键字的表现行为类似于 stretch
  • 对于弹性盒子元素,该关键字的表现行为类似于 stretch
  • 对于网格项目,这个关键字产生的行为类似于 stretch,但对于具有宽高比或固有尺寸的盒子,它的行为类似于 start
  • 该属性不适用于块级盒子和表格单元格。
center

弹性盒子项目的外边距盒子在交叉轴上居中对齐。如果一个项目的交叉轴尺寸大于弹性容器,它将在两个方向上平均溢出。

start

项目沿相应的轴线,紧挨着对齐容器的起始边缘堆放。

end

项目沿相应的轴线,紧挨着对齐容器的结束边缘堆放。

self-start

项目沿相应的轴线,与对齐容器中项目起始侧的边缘紧密排列。

self-end

项目沿相应的轴线,与对齐容器中项目结束侧的边缘紧密排列。

baselinefirst baselinelast baseline

所有弹性项目都对齐,使其弹性容器基线对齐。交叉轴起始外边距边缘与其基线之间距离最大的项目将与行的交叉轴起始边缘对齐。

stretch

如果项目的交叉轴尺寸为 auto,则使用的大小将被设置为尽可能接近填充容器所需的长度,同时尊重项目的宽度和高度限制。如果项目不是自动调整大小的,则此值回退到 flex-start,如果容器的 align-contentfirst baseline(或 baseline)或 last baseline,则回退到 self-startself-end

anchor-center

对于锚点定位元素,将项目在块方向上与关联的锚点元素中心对齐。请参阅使用 anchor-center 在锚点上居中

safe

与对齐关键字一起使用。如果所选关键字意味着项目会溢出对齐容器导致数据丢失,则项目将改为像对齐模式为 start 一样对齐。

unsafe

与对齐关键字一起使用。无论项目和对齐容器的相对大小如何,以及是否可能发生导致数据丢失的溢出,给定的对齐值都会被遵守。

还有两个为 Flexbox 定义的值,因为它们基于弹性模型轴的概念,在网格布局中也同样有效。

flex-start

仅在弹性布局中使用,将弹性项目与弹性容器的主轴起始侧或交叉轴起始侧对齐。在弹性格式化上下文之外使用时,此值的行为与 start 相同。

flex-end

仅在弹性布局中使用,将弹性项目与弹性容器的主轴结束侧或交叉轴结束侧对齐。在弹性格式化上下文之外使用时,此值的行为与 end 相同。

正式定义

初始值normal
应用于所有元素
继承性
计算值同指定值
动画类型离散

正式语法

align-items = 
normal |
stretch |
<baseline-position> |
[ <overflow-position>? <self-position> ] |
anchor-center |
dialog

<baseline-position> =
[ first | last ]? &&
baseline

<overflow-position> =
unsafe |
safe

<self-position> =
center |
start |
end |
self-start |
self-end |
flex-start |
flex-end

示例

在此示例中,我们有一个包含六个子元素的容器。通过一个 <select> 下拉菜单,可以在 gridflex 之间切换容器的 display 属性。第二个菜单可以更改容器的 align-items 属性值。

CSS

我们对容器和项目进行样式设置,以确保我们有两行或两列项目。我们定义了 .flex.grid 类,它们将通过 JavaScript 应用于容器。它们设置了容器的 display 值,并改变其背景和边框颜色,以额外提示布局已更改。六个弹性项目各有不同的背景颜色,其中第 4 个项目有两行长,第 6 个项目的字体被放大。

css
.flex,
.grid {
  height: 200px;
  width: 500px;
  align-items: initial; /* Change the value in the live sample */
  border: solid 5px transparent;
  gap: 3px;
}

.flex {
  display: flex;
  flex-wrap: wrap;
  background-color: #8c8c9f;
  border-color: magenta;
}

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, 100px);
  background-color: #9f8c8c;
  border-color: slateblue;
}

#item1 {
  background-color: #8cffa0;
  min-height: 30px;
}

#item2 {
  background-color: #a0c8ff;
  min-height: 50px;
}

#item3 {
  background-color: #ffa08c;
  min-height: 40px;
}

#item4 {
  background-color: #ffff8c;
  min-height: 60px;
}

#item5 {
  background-color: #ff8cff;
  min-height: 70px;
}

#item6 {
  background-color: #8cffff;
  min-height: 50px;
  font-size: 30px;
}

HTML

我们包含一个容器 <div>,内有六个嵌套的 <div> 子元素。为了简洁起见,表单的 HTML 和更改容器类的 JavaScript 已被隐藏。

html
<div id="container" class="flex">
  <div id="item1">1</div>
  <div id="item2">2</div>
  <div id="item3">3</div>
  <div id="item4">4<br />line 2</div>
  <div id="item5">5</div>
  <div id="item6">6</div>
</div>

结果

规范

规范
CSS Box Alignment Module Level 3
# align-items-property
CSS 弹性盒子布局模块第 1 级
# align-items-property

浏览器兼容性

另见