SuperAPI AI 工具集

textual-layout-styling

前端与建站

查看项目

更新于 10-16 04:23

技能介绍

用途

Textual Layout and Styling 用于掌握 Textual 的 CSS 式样式系统,构建响应式、视觉精致的 TUI(终端用户界面)应用。Textual 的样式系统支持为终端环境适配的 CSS 概念。

主要能力

CSS 属性

文档列出了可用于 Textual 的 CSS 属性,包括:

  • 布局属性:width、height(支持 100%、固定值、1fr、auto),layout: vertical | horizontal | grid。
  • 间距:padding、margin,支持单值、双值(垂直 水平)、四值(上 右 下 左)写法。
  • 边框:border、border-left、border-right、border-top、border-bottom,样式可选 solid、dashed、double、thick、tall、wide。
  • 背景与前景色:background、color,支持主题变量、十六进制、rgb()。
  • 文本样式:text-style: bold | italic | underline | dim,可组合。
  • 对齐:align、align-horizontal、align-vertical、content-align。
  • 透明度:opacity(0.0 到 1.0)。
  • 显示:display: block | none。
  • 偏移:offset(x y)。
  • 文本溢出:text-overflow: fold | crop | ellipsis,overflow: auto | hidden。
  • 层级:layer、z-index。

内联 CSS

可在组件中通过 DEFAULT_CSS 字符串定义样式,也可使用独立的 .tcss 文件(通过 CSS_PATH = "file.tcss" 加载),或在 App 类中定义全局样式。可使用后代选择器(如 FormWidget Input)和类选择器(如 FormWidget .label)。

颜色与主题

通过 THEME 选择内置主题,文档列出的主题包括:nord、dracula、monokai、solarized-dark、solarized-light、one-dark、one-light、gruvbox、nord-deep 等。可用颜色变量包括 $primary、$secondary、$accent、$success、$error、$warning、$info、$surface、$boost、$panel、$text、$text-muted。可用 python -m textual 预览演示应用。

响应式布局

通过媒体查询实现自适应布局,条件包括 (max-width: N)、(min-width: N)、(max-height: N)、(min-height: N)、(width: N)、(height: N),N 以终端字符单元计。示例在小于 80 列时改为垂直堆叠布局,大于等于 80 列时改为水平并排布局。

网格布局

使用 layout: grid,配合 grid-size(列 行)、grid-gutter(垂直 水平)、grid-column / grid-row(起止位置与跨格)构建复杂布局,支持跨列跨行。

类与伪类

可用 CSS 类定义样式变体,并从 Python 通过 add_class、remove_class、toggle_class、has_class 操作。伪类包括 :focus、:hover、:disabled、:dark、:light。

使用方式

文档按步骤组织:第一步理解 Textual 的 CSS 属性;第二步在组件中定义内联 CSS;第三步使用颜色与主题;第四步实现响应式布局;第五步创建网格布局;第六步使用类与伪类。随后提供两个完整示例:一个是带侧边栏、内容区和统计框、含响应式媒体查询的仪表盘布局;另一个是带校验反馈样式(含隐藏/显示错误提示)的登录表单。

适用场景

适用于使用 Textual 框架构建终端 TUI 应用时需要实现响应式布局、CSS 样式、配色方案、间距调整等场景。

限制与要求

文档要求 Textual >= 0.45.0(含 CSS 支持),并需要理解 CSS 概念(width、height、padding、borders)。最佳实践建议使用主题变量而非硬编码颜色、逻辑组织 CSS、避免不适应终端的固定宽度而改用分数单位。文档还提及参见 textual-widget-development.md 与 textual-app-lifecycle.md。