CSS in CS
Css.Module 用 C# 构建 stylesheet。类名会带模块作用域,避免不同组件之间的局部 class
冲突;最终 CSS 通过 Window.AttachGlobalStyle 注入到 WebKitGTK render host。
var styles = Css.Module(
"todo",
Css.Class("shell", rule => rule.Display("grid").Gap(14).Padding("24px")),
Css.Class("done", rule => rule.TextDecoration("line-through").Color("#667085")),
Css.Rule("& button", rule => rule.Cursor("pointer")));
var builder = UltimateAppBuilder.CreateDefaultBuilder();
var app = builder.Build();
var window = app.MainWindow = new Window();
window.AttachGlobalStyle(styles);
window.Render(ctx =>
{
var root = new Div { Class = styles["shell"] };
root.Children.Add(new Span("Ship docs") { Class = styles["done"] });
return root;
});
return await app.RunAsync();
生成的 CSS 类名示例:
.uui-todo-shell { display: grid; gap: 14px; padding: 24px; }
.uui-todo-done { text-decoration: line-through; color: #667085; }
.uui-todo button { cursor: pointer; }
API 形状
Css.Module(scope, rules)创建CssModule。Css.Class(localName, build)创建作用域 class rule,通过module["localName"]读取。Css.Rule(selector, build)创建原生 selector;selector 中的&会替换为模块根 class。CssRuleBuilder.Set(name, value)可设置任意 CSS 属性。- 常用快捷方法包括
Display、Gap、Padding、Color、Border、BorderRadius、FontSize、TextDecoration、Cursor。
对于一次性 inline style,仍然可以直接使用 Core 的 UltimateUI.Styles.Style。
CSS-in-CS 更适合组件级 stylesheet 和复用 class。