Skip to content

n-theme-provider 主题容器 ​

在自己根节点上挂 .n-theme-light / .n-theme-dark 主题类,为包裹的子树装配完整主题变量集。主题状态是全局单例:容器跟随全局主题同步切换(浅→深时容器内外一起翻转),不是独立作用域,同一页面多个容器共用同一状态。页面级主题已由 n-page 根自带(无需本组件);本组件用于非 n-page 页面、自定义弹层与浮层等没有主题类祖先的容器——小程序组件样式隔离下主题类定义不跨组件生效,本组件自带全套类定义,包一层即得。局部换肤(如页面浅色中嵌一块深色区域)走 custom-style 覆盖主题令牌。

内置跟随系统 + 手动切换:useTheme().setMode("light" | "dark" | "system"),选择持久化

平台兼容性 ​

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

API ​

属性 ​

参数 说明 类型 默认值 可选值
custom-class 追加到根节点的类名 String "" -
custom-style 根节点行内样式字符串(可在此覆盖主题 CSS 变量) String "" 与 css 相同

插槽 ​

插槽名 说明
default 主题作用区域内容

实现说明 ​

能力 常见做法 本组件做法与取舍
主题变量分发 全局样式文件在 App 入口引一次,主题类挂在页面根 全局引一次在小程序组件样式隔离下打不进组件内部节点;本组件根节点绑全局主题类且自带全套类定义(引 styles/theme.scss 一行),任何端、任何宿主配置下子树都拿得到完整变量集
深浅切换 主题类 + 媒体查询跟随系统,App 内不可手动切 useTheme 全局单例三态(跟随系统/浅/深)驱动类名,容器与页面同源同步翻转,手动切换持久化
局部深色域 包一层容器即变深 容器跟随全局主题,不构成独立作用域;局部换肤由 custom-style 覆盖 --n- 中性色令牌实现(组件颜色全部走 var() 令牌,覆盖即生效)
嵌套容器 内外层各自装配 嵌套容器的根重新声明主题类,把外层 custom-style 覆盖的中性色令牌重置回全局主题值(品牌色等不在主题类中的令牌继续从外层继承);需要内层恢复全局中性色时这样用,需要延续中性色覆盖时不要嵌套
页面协作 页面单独处理主题 n-page 根自带同款主题类与类定义;页面已用 n-page 时再包容器属重复装配(同值类重复声明,无害但多余),两者不双算

组件无自有视觉、无事件、无实例方法:纯容器 + 主题类装配。customClass 的类需定义在组件自己的样式表内(样式隔离下页面类打不进组件根节点),外观微调优先用 customStyle。

记录 · 思考 · 创作