amis 低代码框架 Height 高度工具类全解析:从 h-1 到 h-screen 的间距体系与响应式用法
2026/9/14 3:23:13 网站建设 项目流程

amis 低代码框架 Height 高度工具类全解析:从 h-1 到 h-screen 的间距体系与响应式用法

【免费下载链接】amis前端低代码框架,通过 JSON 配置就能生成各种页面。项目地址: https://gitcode.com/GitHub_Trending/am/amis

本指南聚焦 amis 前端低代码框架内置的高度(Height)工具类体系,系统梳理 h-* / min-h-* / max-h-* 完整类名清单、各类的实际像素换算、rem与百分比取值规则,并结合 amis-ui 的 SCSS 变量与混合宏实现,讲清楚这些类是如何被生成、如何作用于 JSON 配置生成的页面,以及如何在移动端与桌面端断点下做响应式高度控制。读完本文,你将能在自己的 amis 页面与主题定制中熟练使用全部高度工具类。

一、Height 工具类是什么:amis 的原子化高度能力

在 amis 低代码框架中,页面由 JSON 配置描述、由 amis 渲染器渲染,而布局与尺寸的微调并不需要每次都写自定义 CSS。amis-ui 提供了一套与 Tailwind 风格对齐的原子化 CSS 工具类(helper class),其中高度工具类就是通过h-*min-h-*max-h-*前缀快速为任意元素设置heightmin-heightmax-height属性的能力。

这套体系定义在 packages/amis-ui/scss/helper/sizing/ 目录下,包含两份配套文件:

  • _height.md:完整的类名 → CSS 属性对照表(即官方文档,可直接查阅);
  • _height.scss:实际的 SCSS 实现,负责把变量表展开生成全部类。

同时,helper.scss作为 amis-ui 工具类样式的统一入口,在第 58~59 行通过@import './helper/sizing/width';@import './helper/sizing/height';把高度工具类打进最终样式包,也就是说只要你的项目引入了 amis-ui 的样式,这些类就开箱即用。

二、完整类名清单与属性对照表

以下表格完整继承了 官方文档 的全部内容,分为「定高」「最小高度」「最大高度」三组。

2.1 固定高度h-*

ClassProperties
h-pxheight: 0.0625rem
h-0height: 0
h-noneheight: 0
h-0.5height: 0.125rem
h-1height: 0.25rem
h-1.5height: 0.375rem
h-2height: 0.5rem
h-2.5height: 0.625rem
h-3height: 0.75rem
h-3.5height: 0.875rem
h-4height: 1rem
h-5height: 1.25rem
h-6height: 1.5rem
h-7height: 1.75rem
h-8height: 2rem
h-9height: 2.25rem
h-10height: 2.5rem
h-11height: 2.75rem
h-12height: 3rem
h-14height: 3.5rem
h-16height: 4rem
h-18height: 4.5rem
h-20height: 5rem
h-24height: 6rem
h-28height: 7rem
h-32height: 8rem
h-36height: 9rem
h-40height: 10rem
h-44height: 11rem
h-48height: 12rem
h-52height: 13rem
h-56height: 14rem
h-60height: 15rem
h-64height: 16rem
h-72height: 18rem
h-80height: 20rem
h-96height: 24rem
h-autoheight: auto
h-1/2height: 50%
h-1/3height: 33.333333%
h-2/3height: 66.666667%
h-1/4height: 25%
h-2/4height: 50%
h-3/4height: 75%
h-1/5height: 20%
h-2/5height: 40%
h-3/5height: 60%
h-4/5height: 80%
h-1/6height: 16.666667%
h-2/6height: 33.333333%
h-3/6height: 50%
h-4/6height: 66.666667%
h-5/6height: 83.333333%
h-fullheight: 100%
h-screenheight: 100vh

2.2 最小高度min-h-*

ClassProperties
min-h-0min-height: 0px
min-h-fullmin-height: 100%
min-h-screenmin-height: 100vh

2.3 最大高度max-h-*

ClassProperties
max-h-pxmax-height: 0.0625rem
max-h-0max-height: 0
max-h-nonemax-height: 0
max-h-0.5max-height: 0.125rem
max-h-1max-height: 0.25rem
max-h-1.5max-height: 0.375rem
max-h-2max-height: 0.5rem
max-h-2.5max-height: 0.625rem
max-h-3max-height: 0.75rem
max-h-3.5max-height: 0.875rem
max-h-4max-height: 1rem
max-h-5max-height: 1.25rem
max-h-6max-height: 1.5rem
max-h-7max-height: 1.75rem
max-h-8max-height: 2rem
max-h-9max-height: 2.25rem
max-h-10max-height: 2.5rem
max-h-11max-height: 2.75rem
max-h-12max-height: 3rem
max-h-14max-height: 3.5rem
max-h-16max-height: 4rem
max-h-18max-height: 4.5rem
max-h-20max-height: 5rem
max-h-24max-height: 6rem
max-h-28max-height: 7rem
max-h-32max-height: 8rem
max-h-36max-height: 9rem
max-h-40max-height: 10rem
max-h-44max-height: 11rem
max-h-48max-height: 12rem
max-h-52max-height: 13rem
max-h-56max-height: 14rem
max-h-60max-height: 15rem
max-h-64max-height: 16rem
max-h-72max-height: 18rem
max-h-80max-height: 20rem
max-h-96max-height: 24rem
max-h-fullmax-height: 100%
max-h-screenmax-height: 100vh

三、取值背后的换算规则:rem、百分比与视口单位

高度类只输出一个 CSS 属性,但它背后有一套统一的数值体系,理解它才能真正用好这些类。

3.1 rem 刻度来自全局 spacing 变量

h-1对应0.25remh-4对应1remh-96对应24rem,这些刻度并不是硬编码在_height.scss里,而是来自 packages/amis-ui/scss/_variables.scss 中的$spacing表。该表以「1 单位 = 4px」的 Tailwind 风格递增(px: 1px0.5: 2px1: 4px1.5: 6px……直到96: 384px),并且所有值都通过px2rem()函数从像素换算为 rem。例如:

  • 4px2rem(16px)1rem,因此h-4输出height: 1rem
  • 10px2rem(40px)2.5rem,因此h-10输出height: 2.5rem
  • 96px2rem(384px)24rem,因此h-96输出height: 24rem

因为使用的是 rem 而非固定 px,页面根字号变化时(如用户调整浏览器字号或设置主题根字号),所有高度会等比缩放,这保证了整体比例的一致性。需要注意表中没有h-13h-15等中间值,只有明确列出的档位才可用。

3.2 高度变量表$heights$maxHeights的组装

$heights变量 通过map-merge$spacing与百分比/视口档位合并而来:

$heights: map-merge( $spacing, ( auto: auto, '1/2': 50%, '1/3': 33.333333%, '2/3': 66.666667%, // …… 1/4、1/5、1/6 等 full: 100%, screen: 100vh ) ) !default;

$maxHeights只合并了fullscreen两项(因为auto本身是max-height的默认值,不需要额外类)。这正是h-autoh-fullh-screenmax-h-fullmax-h-screen这些特殊类的来源:它们不是数字刻度,而是对 CSS 关键字(auto100%100vh)的工具类封装。

3.3 百分比高度与视口高度

  • h-full(100%):父容器必须显式设置了高度,百分比才有意义;
  • h-screen(100vh):直接等于视口高度,常用于撑满整个浏览器可视区域;
  • h-1/2h-1/3h-2/3等分数档位提供精细的百分比控制,其中h-2/4h-1/2同值 50%,h-3/6h-1/2也同值 50%,属于同一数值的多别名。

四、源码实现:类是如何生成的

4.1 三个 mixin 的分工

_height.scss 的编译逻辑非常清晰,由三个 mixin 协作完成:

@mixin height-sizing($map: $heights, $prefix: '.') { @each $name, $value in $map { @if $name == default { #{$prefix}h { height: $value; } } @else { #{$prefix}h-#{'' + selector-escape($name)} { height: $value; } } } } @mixin max-height-sizing($map: $maxHeights, $prefix: '.') { @each $name, $value in $map { @if $name == default { #{$prefix}max-h { max-height: $value; } } @else { #{$prefix}max-h-#{'' + selector-escape($name)} { max-height: $value; } } } } @mixin make-heights($prefix: '.') { @include height-sizing($heights, $prefix); #{$prefix}min-h-0 { min-height: 0px; } #{$prefix}min-h-full { min-height: 100%; } #{$prefix}min-h-screen { min-height: 100vh; } @include max-height-sizing($maxHeights, $prefix); }
  • height-sizing():遍历$heights映射表,把每个name → value生成.h-{name} { height: value }
  • max-height-sizing():遍历$maxHeights,生成.max-h-{name} { max-height: value }
  • make-heights():整合以上两者,再手工补齐三个min-h-*类(min-height档位较少,直接写死三行)。

其中selector-escape()的作用值得注意:类名中的小数点与斜杠(如h-0.5h-1/2)是 CSS 选择器的特殊字符,必须转义后才能写出合法的选择器,最终编译出的选择器形如.h-0\.5.h-1\/2,这也解释了文档表格中类名为什么要写成h-0\.5h-1\/2

4.2 默认前缀与响应式断点扩展

文件末尾的两段代码决定了这些类的最终形态:

@include make-heights(); @each $deivce in map-keys($devices) { @include media-device($deivce) { @include make-heights('.' + selector-escape($deivce + ':')); } }
  • 第一行用默认前缀.生成基础类,即.h-4.min-h-full等;
  • 第二行遍历$devices断点表:
$devices: ( m: '(max-width: 768px)', pc: '(min-width: 769px)' ) !default;

并通过 media-device mixin 包一层@media查询,同时把前缀替换为.{断点名}:,从而生成响应式变体类:.m:h-4(仅在宽度 ≤ 768px 时生效)与.pc:h-4(仅在宽度 ≥ 769px 时生效)。也就是说,高度工具类天然支持移动端 / PC 断点的条件覆盖。

五、在 amis 页面中的实际用法

5.1 在 JSON Schema 中直接使用

amis 的 样式说明文档 介绍了 helper class 的使用约定:可以在 schema 的任意节点上通过className属性挂载工具类。例如让一个容器占满父容器高度:

{ "type": "container", "className": "h-full", "body": { "type": "tpl", "tpl": "该容器将占满父元素高度" } }

给图片、媒体区域设置固定高度的典型写法:

{ "type": "image", "src": "/static/photo/0d338744ebf81a4cff2f4cd6de2a6059252da694.jpg", "className": "h-40", "title": "固定 10rem 高的图片" }

配合响应式断点类实现不同设备下高度不同:

{ "type": "container", "className": "h-64 pc:h-96", "body": "手机端 16rem 高,PC 端 24rem 高" }

5.2 常用组合建议

  • 撑满父容器:h-full(父级需有确定高度);
  • 撑满视口:h-screen/min-h-screen,适合整页级布局;
  • 限制超长内容:max-h-96+ 配合溢出隐藏或滚动;
  • 弹窗 / 抽屉内部滚动区域:外层h-screen,内部列表用max-h-*兜底;
  • 数字刻度优先使用 4px 倍数档位(h-4h-8h-12……),需要更细粒度时再用h-0.5h-1.5等半步档。

六、与 Width 工具类的对照

同目录下还有一份 width 文档 和 width 实现,宽度体系在结构上高度相似:w-*同样基于$spacing生成数字刻度,且多了w-1xw-3x(基于 em 的字体相对单位)与w-1/12w-11/12(十二等分栅格)以及min-w-*/max-w-*的 xs~7xl 容器档位。两者的差异主要体现在:

维度h-*(高度)w-*(宽度)
数字刻度$spacing完全一致(px→rem)$spacing完全一致(px→rem)
特殊档位auto、1/2~5/6、full、screenauto、1x/2x/3x、1/2~11/12、full、screen
百分比精度最小 1/6(83.333333% 封顶)支持 1/12 十二等分
min-* / max-*仅 0 / full / screen含 xs~7xl 容器尺寸档位

需要同时控制元素宽高时,把w-*h-*写在同一个className上即可,例如className="w-64 h-40"表示宽 16rem、高 10rem。

七、总结与查阅指引

amis 的高度工具类是一套完整、可组合、可响应式的原子化能力:数字档位遵循 4px 基准并自动换算为 rem,百分比与视口档位覆盖常见布局诉求,min-h-*max-h-*补充上下界约束,m:/pc:前缀则提供了移动端与桌面端的条件化覆盖。

需要继续深入时,可以按以下路径在仓库中查阅:

  • 类名完整对照表:packages/amis-ui/scss/helper/sizing/_height.md
  • 生成逻辑与响应式扩展:packages/amis-ui/scss/helper/sizing/_height.scss
  • 数值体系与断点定义:packages/amis-ui/scss/_variables.scss
  • 断点媒体查询 mixin:packages/amis-ui/scss/_mixins.scss
  • 工具类统一入口:packages/amis-ui/scss/helper.scss
  • amis 样式使用约定:docs/style/index.md

【免费下载链接】amis前端低代码框架,通过 JSON 配置就能生成各种页面。项目地址: https://gitcode.com/GitHub_Trending/am/amis

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询