Toolbar 工具栏
工具按钮组容器:role="toolbar" + aria-label,Tab 进入后方向键在控件间移动(roving tabindex,只聚焦当前项)。配套切换组、分隔符、输入框三个部件,支持纵向布局、循环开关、整栏禁用、尺寸档位、溢出收纳与贴边形态。
基础用法(原生按钮)
基础用法(原生按钮)
切换组(编辑器场景)
oas-toolbar-toggle 是工具栏的 toggle 组部件:单选(缺省,radio 语义——组内互斥,点已选中项不变更)与多选(multiple,每项独立切换);value 受控(单选字符串 / 多选 JSON 数组),点击派发 oas-change。加粗/斜体/下划线用多选组,对齐方式用单选组——编辑器工具栏核心形态。
切换组(加粗/斜体 + 对齐方式)
分隔符部件
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 右对齐分组
工具栏内输入框
oas-toolbar-input:参与 roving 的单 Tab 停靠(复合组件特例——焦点在输入框内时方向键由文本编辑消费,Tab 离开继续工具栏导航)。oas-input 输入中、oas-change Enter/失焦提交。
工具栏内输入框
溢出收纳(窄容器)
容器宽度不足时,超出项自动收进末尾「···」弹层(ResizeObserver 监听宽度,点击「···」展开镜像项,镜像项点击派发到原控件;被收纳的选中项会让「···」高亮)。收窄下方容器宽度试试。
溢出收纳
贴边形态(is-attached)
is-attached:容器化工具栏外观(边框 + 底色 + 内边距),适合直接贴在其他工具栏/面板边上。
is-attached
API
oas-toolbar
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
disabled | 整栏禁用(aria-disabled + inert,子项不参与 roving) | boolean | — |
focusable-when-disabled | 禁用时子项保持可聚焦(aria-disabled + 点击拦截,适合挂 tooltip 解释禁用原因) | boolean | — |
loop | 方向键循环导航开关:缺省开启;false 时在首尾停止 | string | — |
orientation | 布局方向:horizontal(默认)/ vertical(纵向,方向键随向导航、分隔符自动变横线) | string | horizontal |
size | 尺寸档位:small / medium(默认)/ large | string | — |
| 名称 | 说明 |
|---|---|
| 默认 | 工具栏控件:按钮 / oas-button / 切换组 / 输入框 / 链接 / 分隔符等 |
oas-toolbar-toggle
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
disabled | 整组禁用 | boolean | — |
items | 选项 JSON(property 赋值单向反射 attribute) | ToolbarToggleItem[] | string | [] |
multiple | 多选模式(每项独立切换) | boolean | — |
size | 尺寸档位(small/medium/large),缺省跟随最近 oas-toolbar | string | — |
value | 当前值:单选为字符串;多选为 JSON 数组字符串 | string | — |
| 事件 | 说明 |
|---|---|
oas-change | 切换,detail: { value: string | string[] } |
oas-toolbar-input
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
disabled | 禁用 | boolean | — |
placeholder | 占位提示 | string | — |
size | 尺寸档位(small/medium/large),缺省跟随最近 oas-toolbar | string | — |
value | 预设值(受控入口;事件不带写回,宿主可监听更新) | string | — |
| 事件 | 说明 |
|---|---|
oas-change | Enter 或失焦提交,detail: { value } |
oas-input | 输入中,detail: { value } |
- 宿主
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监听宽度,超出项收进「···」弹层(仅横向)