Skip to page content

下拉按钮

QBtnDropdown 组件是一个非常方便的下拉式按钮。与 QList 组件搭配起来非常好用,但不局限于此。

如果您在找一个下拉输入而不是按钮的组件,请看 QSelect 组件。

用法

基础

分割按钮

悬停
v2.26+

hover 属性使下拉框在鼠标悬停按钮时打开(split 模式下:悬停任意一个按钮),鼠标离开按钮和菜单后关闭。点击/触摸和键盘交互仍然像往常一样切换下拉框,因此没有悬停的触摸设备会直接回退到这些方式;这也意味着在悬停打开状态下点击切换按钮会关闭下拉框。悬停打开的下拉框不会将键盘焦点移到自身。hover-delayhover-hide-delay 属性用于调节时间(参见 QMenu 的悬停章节)。

悬停



自定义和插槽

toggle 插槽(v2.25+)用于在下拉切换按钮中(箭头图标旁边)添加内容。在 split 模式下它是唯一能接触到切换按钮的方式——可以在其下方附加一个 QTooltiplabel 插槽覆盖的是主按钮):

其他

下面的示例在 UMD 中不可用,因为它依赖 Vue Router(所以在 Codepen/jsFiddle 中也不能正常运行)。

无障碍
v2.25+

切换按钮遵循 WAI-ARIA 展开/折叠模式:它暴露 aria-expanded(以及弹窗存在时的 aria-controls——引用不能指向不存在的 id)并且故意不声明 aria-haspopup——该属性的值必须命名弹窗的 ARIA role,而下拉内容(没有默认 role)可以是任何东西。当你给内容赋予了实际的 role 时,通过 toggle-aria-haspopup 属性进行镜像——例如在包裹的 QList 上声明 role="menu" 时(参见 QMenu 的无障碍章节):

<q-btn-dropdown label="Actions" toggle-aria-haspopup="menu">
  <q-list role="menu">
    <!-- 可点击的 QItem 会自动变成 menuitem -->
  </q-list>
</q-btn-dropdown>

在两种设计中,该属性都是实现此功能的可靠方式:在 split 模式下,透传属性会落在包裹的按钮组上而非切换按钮上,因此以普通属性设置 aria-haspopup 永远无法到达打开弹窗的控件。

切换按钮还拥有自己的无障碍名称,由 label 属性和当前活跃的 Quasar 语言包 构建并跟随状态——折叠时为 Expand "Actions",展开后为 Collapse "Actions"(没有 label 的下拉框回退为单纯的 Expand/Collapse)。由于它描述的是展开/折叠行为而非其背后的操作,当 label 本身不足以表达意图时,请使用 toggle-aria-label 属性覆盖——注意和 toggle-aria-haspopup 一样,在 split 模式下只有这个属性才能到达切换按钮。