跳到主要内容

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 属性。
  • 常用快捷方法包括 DisplayGapPaddingColorBorderBorderRadiusFontSizeTextDecorationCursor

对于一次性 inline style,仍然可以直接使用 Core 的 UltimateUI.Styles.Style。 CSS-in-CS 更适合组件级 stylesheet 和复用 class。