关于 styling
这项技能说明如何为 UI5 Web Components 设置样式,适用于构建和定制 UI5 界面的开发者。它按适用场景介绍标签样式、Shadow Parts、自定义状态、CSS 变量及最后手段 addCustomCSS。
主要功能
- 01为组件标签设置样式
- 02使用 CSS Shadow Parts
- 03按组件状态应用样式
- 04覆盖 SAP CSS 变量
- 05通过 addCustomCSS 注入样式
适用场景
- 01调整组件尺寸与间距
- 02修改组件内部特定元素
- 03按组件状态调整外观
- 04定制主题颜色与字体
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ui5/ webcomponents --skill styling安装后在 Claude Code 中输入/styling确认已加载。
详细介绍
设置 UI5 Web Components 的样式
UI5 Web Components 使用 Shadow DOM 进行封装。样式彼此隔离——外部 CSS 不会渗入,但自定义样式需要采用特定技巧。以下五种方式按推荐程度从高到低排列。
1. 在标签级别设置样式
部分组件(Title、Label、Tag、Button、Input 等)的设计支持直接在自定义元素上设置样式。
ui5-input {
width: 150px;
color: yellow;
background: purple;
}
这种方式适用于较简单的组件。对于 DOM 结构较复杂的组件,标签级别的样式不会影响内部元素。
**最佳实践:**始终使用标签级别的样式设置尺寸属性(margin、padding、width、height),以避免设计不一致。
2. CSS Shadow Parts
对于复杂组件,特定内部元素会作为 CSS shadow parts 暴露出来。
ui5-card-header::part(status) {
color: red;
}
**重要:**可用的 shadow parts 列在各组件 API 参考的“Overview”部分。只有文档中说明的 parts 才是稳定的——不要依赖未记录的内部结构。
3. CSS 自定义状态
组件可以通过 CSS 自定义状态伪类暴露自定义状态,让你根据组件的内部状态设置样式。
ui5-toolbar-item:state(overflowed) {
flex-direction: column;
}
**重要:**可用的自定义状态列在各组件 API 参考的“Overview”部分。
4. 覆盖 CSS 变量
UI5 Web Components 使用 SAP CSS 变量(--sap*)设置主题。你可以按组件或作用域覆盖这些变量。
ui5-button {
--sapButton_TextColor: purple;
}
所有全局 SAP CSS 变量都定义在 @sap-theming/theming-base-content 中。覆盖这些变量会改变所有使用它们的组件的外观。
**最佳实践:**如需大范围更改主题,建议使用 UI Theme Designer,以确保一致性。仅在需要有针对性的作用域自定义时,才直接覆盖 CSS 变量。
5. 通过 addCustomCSS 添加自定义 CSS(最后手段)
如果以上方法都不奏效,可以使用 addCustomCSS API 将自定义 CSS 直接注入组件的 shadow DOM。此方法会针对可能随版本变化的内部 DOM 结构。只有在 CSS 变量、标签级样式和 shadow parts 都无法实现预期效果时,才使用此方法。
编写自定义 CSS 前:
- 在 node_modules 中查找组件的模板和现有样式
- 也可以在 DevTools 中检查组件的 shadow DOM,以了解其内部结构
- 只针对所需的最少选择器
必须在创建该组件的任何实例前注册自定义 CSS:
import { addCustomCSS } from "@ui5/webcomponents-base/dist/Theming.js";
addCustomCSS("ui5-select", `
.ui5-select-root {
background-color: red;
}
`);
第一个参数是组件的标签名,第二个参数是要注入每个实例的 shadow DOM 中的 CSS 字符串。
不要这样做
- 不要使用已弃用的
>>>或/deep/选择器穿透 shadow DOM——它们不起作用。 - 不要依赖内部 DOM 结构——它可能会随版本变化。只能使用文档中说明的 shadow parts。
- 不要对 SAP 变量使用
!important——请改为限定覆盖范围。 - 如果存在 SAP CSS 变量,不要覆盖原始颜色——应使用变量以保持主题一致性。
快速选择指南
| 目标 | 技术 |
|---|---|
| 更改宽度、margin、padding | 标签级样式 |
| 重新设置特定内部元素的样式 | ::part(name) |
| 根据组件状态设置样式 | :state(name) |
| 全局更改颜色或字体 | 覆盖 --sap* CSS 变量 |
| 全面自定义主题 | UI Theme Designer |
| 覆盖内部 shadow DOM 样式 | addCustomCSS(最后手段) |