align-items

CSS 的 **align-items** 属性将 align-self 值设置到所有直接子元素的组上。在 flexbox 中,它控制 横轴 上项目的对齐方式。在网格布局中,它控制项目在其 网格区域 内的块轴上的对齐方式。

试用

下面的交互式示例演示了使用网格和 flex 布局的 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;

Values

normal

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

  • 在绝对定位的布局中,该关键字对替换的绝对定位框的行为类似于start,对所有其他绝对定位框的行为类似于stretch
  • 在绝对定位布局的静态位置中,该关键字的行为类似于stretch
  • 对于 flex 项目,该关键字的行为类似于stretch
  • 对于网格项目,此关键字会导致类似于stretch的行为,但对于具有 纵横比 或固有大小的框,它会表现得像start
  • 此属性不适用于块级框和表格单元格。
center

flex 项目的边距框在横轴上的行内居中。如果项目的横向大小大于 flex 容器,它将在两个方向上溢出相等。

start

项目在相应轴上,紧靠对齐容器的起始边。

end

项目在相应轴上,紧靠对齐容器的结束边。

self-start

项目在相应轴上,紧靠对齐容器的项目起始边。

self-end

项目在相应轴上,紧靠对齐容器的项目结束边。

baseline, first baseline, last baseline

所有 flex 项目都对齐,使得它们的 flex 容器基线 对齐。跨起始边距边和基线之间距离最大的项目与行的跨起始边对齐。

stretch

如果项目小于对齐容器,自动大小的项目将被均匀放大以填充容器,尊重项目的宽度和高度限制。

anchor-center

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

安全

与对齐关键字一起使用。如果选定的关键字意味着项目超出对齐容器导致数据丢失,则项目将根据对齐模式为start进行对齐。

不安全

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

还有两个为 flexbox 定义的值,因为它们基于flex 模型轴的概念,在网格布局中也能工作。

flex-start

仅在 flex 布局中使用,将 flex 项目与 flex 容器的 main-start 或 cross-start 边缘对齐。当在 flex 格式化上下文之外使用时,此值的行为与start相同。

flex-end

仅在 flex 布局中使用,将 flex 项目与 flex 容器的 main-end 或 cross-end 边缘对齐。当在 flex 格式化上下文之外使用时,此值的行为与end相同。

正式定义

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

正式语法

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

<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值,并更改其背景和边框颜色,提供布局已更改的额外指示。六个 flex 项目每个都有不同的背景颜色,第 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 Flexible Box Layout Module Level 1
# align-items-property

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参见