Skip to content

n-page 页面骨架 ​

主体滚动区 + 底部常驻操作栏,同时就是页面包装层(根节点自动挂 n-theme-light / n-theme-dark 主题类,CSS 变量沿树继承给内部全部 newui 组件与插槽内容)。适用于表单提交页、商品详情页、列表筛选页等"内容可滚动 + 底部常驻操作栏"的场景。

  1. 零配置:放进去就行。底栏 fixed 钉屏幕底部、自动垫底部安全区,组件自动测量底栏高度并在主体底部预留等高空间,内容不被遮挡
  2. 页面保持原生滚动(性能最优,onReachBottom 等页面事件正常):内容超出视口自动可滚(根节点 grow 撑满短屏 / 不压缩长内容),无需包滚动容器
  3. 主题自带:根节点自动挂主题类,页面无需再包一层主题 view;切换用 useTheme().setMode("light" | "dark" | "system");局部换肤可用 n-theme-provider 的 custom-style 覆盖令牌
  4. 底栏与内容区的分界为上投影(非边框线);投影色令牌 --n-page-footer-shadow-color 可主题覆盖,要改回边框线用 footer-style 覆盖 box-shadow 并补 border-top 三件套

平台兼容性 ​

App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序
√ √ √ × × × ×

根节点与主体默认 overflow:visible,可承载原生 sticky 和跨出内容边界的插槽;需要裁剪的区域应由调用方自己的内容容器承担。

API ​

属性 ​

参数 说明 类型 默认值 可选值
custom-class 根节点自定义类(类需定义在组件样式表内) String "" -
custom-style 根节点行内样式 String "" 与 css 相同
body-style 主体滚动区行内样式(设背景色等) String "" 与 css 相同
footer-style 底栏行内样式(变化后组件自动重测底栏高度) String "" 与 css 相同
safe-area 底部安全区自动垫层(读系统 safeAreaInsets,仅小白条/手势条机型有值,其余机型为 0 不生效):有底栏时垫在底栏内容下方,无底栏时垫在主体末尾;关闭后贴屏幕底缘,用于已自行处理安全区或沉浸式贴底场景 Boolean true -

插槽 ​

插槽名 说明
default 页面主体(常规文档流,底部自动预留底栏等高空间)
footer 底部常驻操作栏(fixed 钉底,自动垫底部安全区)

方法 ​

通过 ref 调用:

方法名 说明
resize() 立即重测底栏高度的兼容入口;组件已自动跟随底栏尺寸,无需在内容变化后调用

实现说明 ​

底栏布局采用内部尺寸监听:App / Web 使用元素尺寸观察器,小程序由库内共享时钟检测;与挂载测量机制相比,异步内容与布局变化也自动更新占位。页面隐藏停止监听,恢复后重测,卸载释放;resize() 保留为立即重测入口。

机制对照(与同类页面容器参考并集逐机制核对) ​

机制 参考做法 本库做法 分歧理由
主体滚动承载 一参考 App 端以 scroll-view 为根接管滚动,另提供 scrollTo/scrollToTop/scrollTop 实例方法操作容器;其余参考为文档流 页面保持原生滚动,不包滚动容器;滚回顶部直接用平台 uni.pageScrollTo 原生滚动性能最优且页面事件(onReachBottom / onPageScroll)全量正常;接管滚动就必须自带一套滚动方法与状态上报,使用者还要学组件 API 才能滚动——平台能力已覆盖,不重复包装
内置回到顶部 一参考提供 backTop 开关在页面容器内挂载回顶按钮 不内置;独立回顶组件支持 scrollTop=null 自动监听页面滚动,且位于本组件内时自动避开底栏(读取底栏实际高度) 回顶是独立能力(形状 / 文字 / 受控滚动值 / 阈值),收进页面骨架只能做成开关退化形态;避让由两组件内部通道完成,使用者零接线
页面背景色 一参考提供 bgColor 专用属性 customStyle / bodyStyle 行内样式通道(背景色只是 CSS 的一种) 专用属性是窄通道(只能改背景色);行内通道可设任意声明(背景、圆角、内边距),且与全库定制三通道一致
主题变量注入 一参考提供 theme / themeVars 属性在页面容器上注入局部主题变量 根节点自动挂全局主题类(跟随 useTheme 三态);局部深色域用独立主题容器组件包裹 全局主题是单例(setMode 即时生效、持久化),不需要每页传值;局部主题域是独立场景,由专门组件承担
主体/底栏样式类 一参考提供 bodyClass / footerClass 类数组属性 bodyStyle / footerStyle 行内样式属性 样式隔离下页面定义的类打不进组件内部节点,类属性形同虚设;行内样式是隔离环境下唯一可靠直达通道
body 内底部插槽 一参考提供 bottom 插槽(主体末尾、底栏之上的内容) 不设;内容直接放 default 插槽末尾即同位置 bottom 插槽与 default 末尾在布局上完全等价,多一个插槽徒增认知
底栏测高开关 一参考提供 autoFooter 开关(关闭后手动写死占位) 恒自动:实时测量底栏实际高度(含安全区)并在主体底部预留 自动测量无失效场景,开关只会引入"忘了开导致内容被遮"的坑;异步内容(图片加载、文案换行)也自动跟随
主体与底栏间距 一参考提供 bodyBottom 间距属性(默认约 5px) 固定 10px 呼吸间距;需要更大间距用 footer-style 加 padding-top(底栏变高、占位自动跟随) 间距是版式常量而非高频定制项;真要调整时通过既有通道即可,不必单设属性

记录 · 思考 · 创作