拓冰建站拓冰建站
首页 / 资讯中心 / 正文

amis 响应式网格辅助类:Grid Auto Columns(grid-auto-columns)工具类使用与源码解析

amis 响应式网格辅助类Grid Auto Columnsgrid-auto-columns工具类使用与源码解析【免费下载链接】amis前端低代码框架通过 JSON 配置就能生成各种页面。项目地址: https://gitcode.com/GitHub_Trending/am/amis本指南围绕 amis 前端低代码框架 amis-ui 样式库中 grid 辅助类文档 所定义的auto-cols-*工具类展开说明如何用一行类名控制 CSS Grid 隐式列轨道grid-auto-columns的尺寸策略并结合 源码实现 讲解其响应式变体的生成机制。读完本文你将掌握在 amis 页面 JSON 配置中直接使用auto-cols-auto/min/max/fr类名控制网格布局的方法并理解这套工具类与auto-rows-*、grid-flow-*等配套辅助类的配合方式。一、背景什么是 grid-auto-columnsCSS Grid 布局中轨道的来源有两类显式轨道由grid-template-columns/grid-template-rows明确声明的轨道隐式轨道网格容器内项目数量超出显式轨道数量时浏览器自动创建的额外轨道。grid-auto-columns正是用来控制这些隐式列轨道尺寸的属性默认值为auto即按内容自动计算尺寸。amis-ui 将其封装成了一套即用型工具类开发者无需手写 CSS直接在组件className中声明即可。二、工具类速查表继承原文档原文档 定义的类名与对应 CSS 属性完整罗列如下与 源码 中的规则一一对应ClassPropertiesauto-cols-autogrid-auto-columns: autoauto-cols-mingrid-auto-columns: min-contentauto-cols-maxgrid-auto-columns: max-contentauto-cols-frgrid-auto-columns: minmax(0, 1fr)使用示例HTML 层面等价于 amis 渲染出的 DOMdiv classgrid grid-cols-2 auto-cols-fr div项目 1/div div项目 2/div div项目 3/div !-- 第 3 列属于隐式轨道尺寸由 auto-cols-fr 决定 -- /div三、四个取值的语义差异与选型建议虽然这四个类都作用于grid-auto-columns但取值语义差别很大直接影响隐式列的宽度表现auto浏览器自动计算通常表现为内容尺寸等价于min-content与max-content之间的自适应取值。适合对宽度没有强约束、希望内容自然撑开的场景。min-content取该轨道内所有项目的最小内容宽度如单词最长长度隐式列会尽可能窄适合列内容为短文本或图标列表。max-content取不换行时内容的最大宽度隐式列会被内容完全撑开适合需要完整展示长文本如表格注释列且允许横向溢出的场景。minmax(0, 1fr)上界为1fr下界为0使隐式列像显式fr轨道一样均分剩余空间同时允许收缩到 0 以避免内容把轨道撑爆。这是实现隐式列与显式列等高权重均分最实用的取值也是 源码 中唯一带minmax包装的变体与grid-cols-*系列repeat(n, minmax(0, 1fr))的策略保持一致。需要说明的是只有当网格容器出现超出显式轨道数量的项目时这些类才会产生实际效果若项目数恰好等于显式列数隐式轨道不会生成。四、源码实现解析mixin 与响应式变体生成工具类并非手写四行 CSS而是由 packages/amis-ui/scss/helper/grid/_auto-columns.scss 中的 mixin 统一生成mixin make-grid-auto-columns($prefix: .) { #{$prefix}auto-cols-auto { grid-auto-columns: auto; } #{$prefix}auto-cols-min { grid-auto-columns: min-content; } #{$prefix}auto-cols-max { grid-auto-columns: max-content; } #{$prefix}auto-cols-fr { grid-auto-columns: minmax(0, 1fr); } } include make-grid-auto-columns(); each $deivce in map-keys($devices) { include media-device($deivce) { include make-grid-auto-columns(. selector-escape($deivce :)); } }这段代码包含两层设计基础类默认以.为前缀生成auto-cols-auto等四个类设备变体遍历$devices映射中的每个断点名通过selector-escape($deivce :)拼出形如.m:auto-cols-fr的带命名空间类名再包进media-device媒体查询中。$devices映射定义在 packages/amis-ui/scss/_variables.scss$devices: ( m: (max-width: 768px), pc: (min-width: 769px) ) !default;而media-devicemixin 位于 packages/amis-ui/scss/_mixins.scss其作用是把$devices中的媒体条件字符串展开为media块mixin media-device($name, $devices: $devices) { $n: map-get($devices, $name); media #{$n} { content; } }因此最终产物除了基础类外还包括m:auto-cols-auto≤768px 生效与pc:auto-cols-auto≥769px 生效等全套断点变体。整套 grid 辅助类通过 packages/amis-ui/scss/helper.scss 中的import ./helper/grid/auto-columns;等语句统一引入编译。五、在 amis 页面中的应用amis 是 JSON 配置驱动的前端低代码框架任何组件的className属性都可以直接引用这些工具类。例如在 Table 或 Grid 类容器上声明显式列数与隐式列策略{ type: grid, className: grid grid-cols-2 auto-cols-fr, columns: [ { type: container, body: 左列显式轨道 }, { type: container, body: 右列显式轨道 } ] }当网格需要动态追加列如each渲染数量不定的卡片列表时隐式轨道策略就派上用场{ type: each, className: grid grid-cols-3 auto-cols-fr, items: { type: container, body: 动态项 } }配合响应式前缀可以在移动端收紧列数、桌面端展开列数{ type: grid, className: grid grid-cols-1 pc:grid-cols-3 auto-cols-fr }六、与配套网格辅助类的组合使用auto-cols-*属于 amis-ui grid helper 体系中的一员同目录packages/amis-ui/scss/helper/grid/还提供了一组互补工具类均遵循相同的 mixin 设备变体生成模式辅助类族类名示例对应 CSS 属性auto-rowsauto-rows-auto / -min / -max / -frgrid-auto-rowsauto-flowgrid-flow-row / grid-flow-col / grid-flow-row-dense / grid-flow-col-densegrid-auto-flowcolumnsgrid-cols-1 … grid-cols-12、grid-cols-nonegrid-template-columnsrowsgrid-rows-*grid-template-rowsgapgap-、gap-x-、gap-y-*gap / column-gap / row-gap定位col-start-* / col-end-、row-start-/ row-end-*grid-column / grid-row例如要做一个显式定义两行、剩余行等高均分、列自动流式排布的网格可以组合使用div classgrid grid-cols-2 auto-rows-fr grid-flow-row-dense !-- 项目将按行优先方向自动放置隐式行高均分剩余空间 -- /div其中auto-rows-fr对应 packages/amis-ui/scss/helper/grid/_auto-rows.scss 中的grid-auto-rows: minmax(0, 1fr)grid-flow-row-dense对应 _auto-flow.scss 中的grid-auto-flow: row dense。七、注意事项工具类仅当网格项目溢出显式轨道时才生效且auto类与min-content、max-content的差异在窄容器与长文本场景下才会明显体现建议在真实数据量下验证minmax(0, 1fr)允许轨道收缩到 0可避免长内容如 URL、长单词撑破网格但若确实希望内容完整展示可改用auto-cols-max断点前缀以$devices映射为准当前为m:/pc:对应 768px 分界如需调整阈值应在 packages/amis-ui/scss/_variables.scss 层面覆盖而不是修改单个工具类文件本文所述类名均来自 amis-ui 的 SCSS 辅助类体系需要在编译产物中包含 helper.scss 的引入链路即 amis 默认样式才能生效。【免费下载链接】amis前端低代码框架通过 JSON 配置就能生成各种页面。项目地址: https://gitcode.com/GitHub_Trending/am/amis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门