align-items: stretch 默认生效但需容器有明确高度约束,否则因无参照高度而失效;子项设height/max-height等会优先于stretch,且absolute定位项不参与拉伸。
align-items: stretch 是默认值,但经常不生效?
因为
只在**容器有明确高度约束**时才起作用。如果 Grid 容器本身高度由内容撑开(比如没设
或
),子项就无法“拉伸”到一个可参照的高度——它连“拉到哪”都不知道。
常见错误现象:
写了,但所有网格项还是按内容高度堆叠,垂直方向毫无变化。
确保父容器有明确高度:比如
、
,或被 flex/grid 父级约束住
检查子项是否设置了
—— 它会覆盖
,单个项写
或删掉就能恢复继承
注意
:子项内容超长时,
仍生效,但可能触发滚动或裁剪,不是失效
Grid 中哪些情况 stretch 会被忽略?
对某些尺寸声明“让步”,不是无条件拉满。
使用场景:你希望某列里的所有
高度一致,但其中一项写了
,另一项写了
。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
子项设置了
、
或
:以这些值为优先,
只在无冲突时补足剩余空间
子项内部是 flex 容器且设了
:不影响 grid 层的拉伸,但可能让内容看起来没居中
子项含
:脱离文档流,不参与
计算
和 flex 的 align-items 有什么关键区别?
CSS Grid 的
作用于**每个网格区域(grid area)内的块级盒子**,而 Flex 的作用于**直接子元素**。这点容易混淆,尤其当 Grid 子项本身是 flex 容器时。
参数差异:
Grid 支持
/
,对应子项自己的
起始/结束边,Flex 没这俩值
Grid 的
在多行轨道(
)中,是对**每一行内所有项分别拉伸**;Flex 的
是对整行所有子项统一拉伸到容器高度
兼容性上,
在 Grid 和 Flex 中都支持 IE10+,但
等新值需 Chrome 64+/Firefox 61+
实际调试时怎么快速验证是否拉伸成功?
别只看视觉,用 DevTools 直接查计算后的 height 值最可靠。
性能影响很小,但容易被忽略的一点是:拉伸行为发生在 layout 阶段,如果子项里有大量重排敏感操作(比如频繁读取
),可能放大 layout thrashing。
在 Chrome DevTools 的 Elements 面板中选中子项,看 Styles 里
标签页下的
是否等于容器可用高度减去 gap
临时加
到子项,能立刻暴露是否真正撑满(比 background 更准,不受背景裁剪干扰)
如果用 JS 动态改了
,记得触发一次 relayout(比如读取
),否则
可能延迟应用
拉伸看着简单,真正卡住人的往往是容器高度来源不明确,或者子项悄悄加了 height/max-height —— 这些地方一漏,
就彻底静音。
stretchheightmin-heightalign-items: stretchheight: 100vhmin-height: 400pxalign-selfalign-itemsalign-self: autooverflowstretchstretchdivheight: 200pxmax-height: 150pxheightmin-heightmax-heightstretchalign-items: flex-startposition: absolutestretchalign-itemsself-startself-endalign-selfstretchgrid-template-rows: repeat(3, 1fr)stretchalign-items: stretchself-startoffsetHeightComputedheightoutline: 1px solid redgrid-template-rowsoffsetHeightstretchstretch