菜单

主题系统

相关源文件

Semantic UI 中的主题系统是一个强大的框架,能够实现 UI 组件的统一样式和定制。它使用结构化的变量和覆盖层级,允许开发者在不修改核心组件文件的情况下对 UI 进行主题化。本文档将解释主题系统的架构和用法,重点关注主题的结构、继承和定制方式。

有关构建和编译主题的信息,请参阅 构建系统 文档。

主题系统架构

Semantic UI 的主题系统围绕着一套由 LESS 处理以生成 CSS 输出的主题文件层级构建。这种架构在保持组件间一致性的同时,提供了对样式的精细控制。

关键组件

  • theme.config:将 UI 组件映射到特定主题的中央配置文件
  • 变量文件:定义颜色、间距、尺寸等样式参数
  • 覆盖文件:为特定组件提供直接的 CSS 注入
  • LESS 文件:使用变量和覆盖文件进行组件样式定义

来源

主题配置

theme.config 文件作为选择哪个主题应用于每个组件的控制点。它包含在编译过程中决定使用哪个主题的变量和覆盖的映射。

这种配置允许为不同组件混合搭配主题,从而创建统一的自定义外观,同时保持 UI 的一致性。

来源

主题结构

Semantic UI 中的主题以递增特性的层级结构组织

复杂度描述文件路径模式目的
网站全局变量themes/{theme}/globals/site.variables设置 UI 范围内的默认值
元素基本 UI 元素themes/{theme}/elements/{element}.variables样式化基本元素
集合元素组themes/{theme}/collections/{collection}.variables样式化元素集合
模块复杂组件themes/{theme}/modules/{module}.variables样式化交互式组件
视图内容显示themes/{theme}/views/{view}.variables样式化内容呈现

这种层级结构确保了全局样式决策能够正确地应用于特定组件,从而保持视觉一致性。

来源

变量和覆盖文件

变量文件

每个组件都有一个 .variables 文件,通过 LESS 变量定义其可定制的方面。例如,从图标组件变量开始

这些变量控制组件外观的各个方面,包括不透明度、尺寸、间距和大小选项。

来源

覆盖文件

具有 .overrides 扩展名的覆盖文件(Override files)为组件提供直接的 CSS 注入,允许进行仅通过变量无法实现的更复杂的定制

这些覆盖文件将特定的 CSS 规则直接插入到编译后的样式表中。

来源

组件 LESS 文件

组件 LESS 文件通过导入主题配置并使用定义的变量来引用主题系统

@import 语句会导入 theme.config 文件,该文件随后根据主题配置导入相应的变量和覆盖文件。

来源

主题继承

Semantic UI 的主题系统利用继承来实现高效定制

继承过程

  1. 默认主题为所有组件提供完整的基线样式
  2. 自定义主题选择性地覆盖特定变量和 CSS 规则
  3. 在编译过程中,LESS 合并这些值和规则
  4. 结果是编译后的 CSS 文件应用了自定义样式

这种继承模式意味着您只需要在自定义主题中指定要更改的变量,而无需重新创建整个主题。

来源

创建自定义主题

创建自定义主题

  1. src/themes/ 下创建一个新文件夹(例如 src/themes/myTheme/
  2. 为要定制的组件创建必要的文件夹结构
    myTheme/
    ├── elements/
    │   └── icon.variables
    ├── collections/
    │   └── message.variables
    └── globals/
        └── site.variables
    
  3. 为特定组件创建 .variables 和/或 .overrides 文件
  4. 更新 theme.config 以便为所需组件使用您的主题

您的自定义主题文件只需要包含您要更改的变量。所有其他变量将继承自默认主题。

实际示例:定制组件

这是一个定制消息组件的实际示例

在此示例中

  1. theme.config 为消息指定了“custom”主题
  2. 自定义主题仅定义了两个变量:background 和 borderRadius
  3. 默认主题为所有其他变量提供了值
  4. 最终编译的 CSS 包含自定义的 background 和 borderRadius,但使用了所有其他属性的默认值

来源

变量命名约定

主题系统使用一致的变量命名约定

前缀示例目的
@@colorLESS 变量
@default...@defaultBorderRadius全局默认值
@ + component@iconWidth组件特定变量
@ + variation@linkOpacity变体特定变量
@ + size@mini, @huge尺寸变体

理解这些约定有助于阅读和修改主题变量。

来源

结论

Semantic UI 主题系统为 UI 组件的样式化提供了一种结构化且灵活的方法。通过其层级变量系统、覆盖能力和主题继承,它可以在不修改核心文件的情况下实现一致的样式和强大的自定义选项。

主要优势

  • 一致性:全局变量确保组件间样式的一致性
  • 定制性:通过组件特定变量进行精细控制
  • 效率:主题继承意味着只需定义更改的部分
  • 可维护性:核心组件文件保持不变,而主题可以不断演进

有关创建自定义主题的更多信息,请参阅 创建自定义主题