For AI agents: the complete documentation index is available at https://a3s-lab.github.io/UI/llms.txt, the full documentation bundle is available at https://a3s-lab.github.io/UI/llms-full.txt, and this page is available as Markdown at https://a3s-lab.github.io/UI/components/app-shell.md.

App Shell 应用外壳

App Shell 在开放式产品画布旁提供持久任务上下文。它既可用于有边界的预览,也可独占整个可视视口。

实时预览

设计系统工作区

应用组成预览
实时模式

使用稳定组件组合产品界面。

调整视口大小或折叠导航,内容区域仍保持有界且可滚动。

任务会话运行中 · 2 个工具
配置已验证 · ACL

用法

<div class="app-shell" data-navigation="expanded">
  <aside data-app-navigation>...</aside>
  <main data-app-main>
    <header class="workspace-header">
      <button type="button" data-app-navigation-trigger>切换导航</button>
    </header>
    <div data-app-content>...</div>
  </main>
</div>

HTML 结构

参数可选值默认目的
data-navigationexpanded、collapsed、hiddenexpanded桌面导航状态
data-mobile-navigationopen 或省略省略移动端抽屉是否可见
data-app-navigation-trigger存在或省略省略切换桌面导航或紧凑抽屉
data-viewportwindow 或省略省略让外壳独占 100dvh
--app-shell-navigation-sizeCSS 长度15.5rem展开后的导航宽度
--app-shell-navigation-collapsed-sizeCSS 长度2.875rem与 Office 对齐的图标栏宽度
--app-shell-navigation-max-sizeCSS 长度或百分比38%展开导航最多占用的比例
--app-shell-heightCSS 长度或 autoauto可选的有界外壳高度
--app-shell-min-heightCSS 长度36rem外壳最小高度

JavaScript API

导入 @a3s-lab/ui/all,或者先导入 @a3s-lab/ui/runtime,再导入 @a3s-lab/ui/app-shell。控制器在外壳根元素上提供 expandNavigation()、collapseNavigation()、hideNavigation()、openNavigation()、closeNavigation()、toggleNavigation() 与 refresh()。状态变化后会派发 a3s:app-navigation-change,详情为 { navigation, mobileOpen, mode, source }。可用 data-app-navigation-open-label、data-app-navigation-close-label、data-app-navigation-expand-label 和 data-app-navigation-collapse-label 覆盖本地化标签。

状态与变体

App Shell 支持展开、折叠、隐藏、全视口与移动端打开状态。低于 768px 时,导航会成为限制在外壳内部的浮层。控制器会为关闭状态设置 inert 与 aria-hidden="true",打开后把焦点移到首个控件,并支持 Escape、遮罩和目的地选择关闭。导航与主内容分别拥有自己的滚动区域。宿主应用可以持久化 data-navigation 并与路由协调;程序化修改后若需要立即同步,可调用 refresh()。

可访问性

使用 aside、nav、main 和 header 建立真实地标,并为每个导航区域提供可区分的名称。控制器同步触发器的 aria-expanded 与本地化名称;关闭移动导航时使导航 inert,打开时使主内容 inert,把焦点移入导航并在其中约束 Tab,最后把焦点还给触发器。导航必须是外壳的直接区域,遮罩只能覆盖当前外壳。宿主负责路由、权限与桌面折叠偏好;组件负责断点状态、焦点、Escape 和关闭行为。