Skip to content

Toolbar 工具栏 ​

工具按钮组容器:role="toolbar" + aria-label,Tab 进入后方向键在控件间移动(roving tabindex,只聚焦当前项)。配套切换组、分隔符、输入框三个部件,支持纵向布局、循环开关、整栏禁用、尺寸档位、溢出收纳与贴边形态。

基础用法(原生按钮) ​

基础用法(原生按钮)

切换组(编辑器场景) ​

oas-toolbar-toggle 是工具栏的 toggle 组部件:单选(缺省——组内互斥,点已选中项不变更;采用「按压」aria-pressed 切换语义,非 radio)与多选(multiple,每项独立切换);value 受控(单选字符串 / 多选 JSON 数组),点击派发 oas-change。加粗/斜体/下划线用多选组,对齐方式用单选组——编辑器工具栏核心形态。

切换组(加粗/斜体 + 对齐方式)

样式: bold, underline | 对齐: left

子元素声明式通道 ​

除 items JSON 外,可用 <oas-toolbar-toggle-item> 子元素声明式书写切换组选项(items 属性显式设置时优先,未设置时解析子元素收敛到同一渲染路径)。默认插槽文本为 label,属性对齐 ToolbarToggleItem 字段:value / disabled。子元素增删、属性与文本变化会自动重渲染(MutationObserver);aria-pressed 单选/多选语义与 items 通道完全一致,溢出收纳、方向键导航等工具栏集成不受影响。

切换组子元素声明式

加粗斜体下划线左对齐居中右对齐(禁用)动态追加一项样式: bold | 对齐: left

分隔符部件 ​

oas-toolbar-separator 取代旧的 oas-divider + data-toolbar-ignore 组合:自动 role="separator"、自动排除出 roving 导航,线段方向随工具栏横纵自动切换(横向工具栏内是竖线、纵向工具栏内是横线)。

oas-button + 分隔符

剪切复制粘贴撤销重做

纵向工具栏 ​

orientation="vertical":aria-orientation="vertical" + 纵向布局,↑/↓ 随向导航(←/→ 兼容),分隔符自动变横线。

纵向工具栏

循环导航开关 ​

loop 缺省开启(方向键在首尾循环),loop="false" 时在首尾停止(radio 组在边界停住更符合表单直觉)。

loop=false 不循环

尺寸档位 ​

size:small / medium(默认)/ large。作用于工具栏间距、native 按钮与内置部件(切换组/输入框自动跟随)。

size 三档

整栏禁用 ​

disabled 整栏禁用(aria-disabled + inert,子项不参与 roving);叠加 focusable-when-disabled 时子项保持可聚焦(aria-disabled,点击被拦截——适合挂 tooltip 解释禁用原因)。

整栏禁用

禁用项 ​

disabled / aria-disabled 的按钮不参与方向键导航(roving 跳过)。

禁用项

链接项 ​

a[href] 自动参与 roving 并打上 part="link"(统一链接样式与焦点环)。

链接项

帮助中心

分组右对齐(far) ​

子项加 data-toolbar-far:从该项起推到远端(横向工具栏右对齐、纵向工具栏贴底),常用于「主操作靠左、设置/帮助靠右」的布局。

far 右对齐分组

start / end 命名插槽 ​

slot="start" 内容渲染在工具栏前部、slot="end" 渲染在尾端(视觉顺序:start → 默认 → end,roving 与溢出收纳都按此顺序)。推荐用命名插槽做分区;data-toolbar-far 为存量兼容(把项推到远端,与 end 插槽语义接近),新代码优先使用 end 插槽。

start / end 插槽

工具栏内输入框 ​

oas-toolbar-input:参与 roving 的单 Tab 停靠(复合组件特例——焦点在输入框内时方向键由文本编辑消费,Tab 离开继续工具栏导航)。oas-input 输入中、oas-change Enter/失焦提交。

工具栏内输入框

input: -

溢出收纳(窄容器) ​

容器宽度不足时,超出项自动收进末尾「···」弹层(ResizeObserver 监听宽度,点击「···」展开镜像项,镜像项点击派发到原控件;被收纳的选中项会让「···」高亮)。收窄下方容器宽度试试。

溢出收纳

贴边形态(is-attached) ​

is-attached:容器化工具栏外观(边框 + 底色 + 内边距),适合直接贴在其他工具栏/面板边上。

is-attached

过滤药丸行(oas-scope-bar) ​

oas-scope-bar 是过滤药丸行:一排可点击药丸,选中项以低透明度主色「active 填充」表达。单选(缺省——组内互斥,点已选中项不变更;采用「按压」aria-pressed 切换语义,非 radio)或 multiple 多选(每项独立切换);value 受控(单选字符串 / 多选 JSON 数组字符串),点击派发 oas-change。label 提供无障碍组名(role="group" 的 aria-label)。可独立使用,也可放进取 oas-toolbar 作为其中一个 Tab 停靠点(内部方向键自管,不干扰工具栏 roving)。

过滤药丸行(单选)

scope: all

过滤药丸行(多选)

scope: design, code

与 oas-toolbar 搭配

API ​

oas-toolbar ​

属性 ​

属性说明类型默认值
disabled整栏禁用(aria-disabled + inert,子项不参与 roving)boolean—
focusable-when-disabled禁用时子项保持可聚焦(aria-disabled + 点击拦截,适合挂 tooltip 解释禁用原因)boolean—
loop方向键循环导航开关:缺省开启;false 时在首尾停止string—
orientation布局方向:horizontal(默认)/ vertical(纵向,方向键随向导航、分隔符自动变横线)stringhorizontal
size尺寸档位:small / medium(默认)/ largestring—

插槽 ​

名称说明
默认工具栏控件:按钮 / oas-button / 切换组 / 输入框 / 链接 / 分隔符等
end工具栏尾端内容(渲染在默认内容之后,参与 roving 与溢出收纳;与 data-toolbar-far 语义接近,推荐优先使用)
start工具栏前部内容(渲染在默认内容之前,参与 roving 与溢出收纳)

oas-toolbar-toggle ​

属性 ​

属性说明类型默认值
disabled整组禁用boolean—
items选项 JSON(property 赋值单向反射 attribute)ToolbarToggleItem[] | string[]
multiple多选模式(每项独立切换)boolean—
size尺寸档位(small/medium/large),缺省跟随最近 oas-toolbarstring—
value当前值:单选为字符串;多选为 JSON 数组字符串string—

事件 ​

事件说明
oas-change切换,detail: { value: string | string[] }

oas-toolbar-input ​

属性 ​

属性说明类型默认值
disabled禁用boolean—
placeholder占位提示string—
size尺寸档位(small/medium/large),缺省跟随最近 oas-toolbarstring—
value预设值(受控入口;事件不带写回,宿主可监听更新)string—

事件 ​

事件说明
oas-changeEnter 或失焦提交,detail: { value }
oas-input输入中,detail: { value }

CSS 变量 ​

CSS 变量默认值
--oas-toolbar-input-width120px

oas-toolbar-toggle-item ​

属性 ​

属性说明类型默认值
disabled禁用该项(点击不可选,方向键跳过)——
value选项值(子元素声明式通道的数据载体字段)——

插槽 ​

名称说明
默认按钮文案(默认插槽文本)

oas-scope-bar ​

属性 ​

属性说明类型默认值
disabled整组禁用(叠加最近 oas-toolbar 的 disabled)boolean—
items选项 JSON(property 赋值单向反射 attribute)ScopeBarItem[] | string[]
label无障碍组名(role="group" 的 aria-label,按语言由宿主传入)string—
multiple多选模式(每个药丸独立切换)boolean—
size尺寸档位(small/medium/large),缺省跟随最近 oas-toolbar 的 sizestring—
value当前值:单选为字符串;多选为 JSON 数组字符串string—

事件 ​

事件说明
oas-change切换,detail: { value: string | string[] }
  • 宿主 role="toolbar" + aria-orientation,aria-label 走 locale key(toolbar.label,默认「工具栏」)
  • 参与 roving 的子元素:native 控件(button/input/select/textarea/a[href])、交互 role、自定义元素(tag 含 -);oas-toolbar-separator、data-toolbar-ignore、aria-hidden 排除,disabled/aria-disabled 自动跳过(focusable-when-disabled 模式下 aria-disabled 项保持可聚焦)
  • 键盘:Tab 进入(仅当前项可 Tab 到达),←/→(或 ↑/↓)在控件间移动,Home/End 跳转首末;焦点在切换组/输入框内部时方向键由部件接管(Tab 离开继续工具栏导航)
  • 溢出收纳:ResizeObserver 监听宽度,超出项收进「···」弹层(仅横向)

基于 MIT OR Apache-2.0 双许可发布