Button 按钮
基础按钮组件,同时也是 ToggleButton、PopupButton、ButtonMenuSelectWidget 等组件的按钮基座。
基本用法
图标与指示器
icon 取图标名(见 Icon),indicator 取四种指示器之一(见 Indicator)。二者分别渲染在标签两端。
标签只用图标时把 invisibleLabel 打开:标签视觉隐藏但仍保留可访问名称,title 未显式给出时以标签文本兜底。
标志与形态
flags 影响配色与图标着色,framed={false} 切换为无边框形态,active 表示已选中/已激活。
带边框的按钮在 primary、激活或禁用时整体反色,此时图标与指示器也随之反色;其余情形按 flags 里的色彩标志着色。可用的色彩标志为 progressive、destructive、invert、error、warning、success。
链接用法
给出 href 后内部 <a> 即成为可跳转链接,target 指定打开位置。rel 默认为 nofollow;带 target="_blank" 时应自行补上 noopener。
本组件不对 href 做 URL 净化(越过原版的 OO.ui.isSafeUrl),React 在运行期也不拦截 javascript: 一类危险协议。来源不可信的链接(如由用户输入拼接)必须先自行校验协议,否则构成 XSS;需要组件层净化时可用导出的方法 sanitizeUrl。
禁用
disabled 输出 oo-ui-widget-disabled 与 aria-disabled(不用原生 disabled),此时按钮不响应点击、tabindex 转为 -1、href 也不再生效。放进 ButtonGroup 时,组级禁用会一并下发给组内按钮。
焦点与键盘
- 可聚焦的是内部
<a>,根元素是不可聚焦的<span>:要手动聚焦按钮请用anchorRef(组件ref指向外层<span>)。 - Enter / 空格触发
onClick,onKeyPress将在存在点击回调时阻止空格滚动页面。 - 按压态(
oo-ui-buttonElement-pressed)由组件用 JS 维护:CSS 没有键盘按压的伪类,键盘按压与松开因此由显式事件处理。pressed属性可与之外取或,用于“关联菜单打开期间按钮保持按压”的场景。 title、accessKey落在内部<a>上;未显式给title且标签隐藏时以标签文本兜底,accessKey存在时title末尾附键位提示(组合键文案可经 OOUIProvider 本地化)。
API
ButtonFlag 为 'progressive' | 'destructive' | 'invert' | 'error' | 'warning' | 'success' | 'primary' | 'safe' | 'back' | 'close',其中前六个决定着色,后四个是按钮专属的形态标志。