Home Assistant 前端 `<ha-dropdown>` 下拉菜单组件:组合式用法、源码实现与主题定制
前端智能家居UI组件【免费下载链接】frontend:lollipop: Frontend for Home Assistant项目地址https://gitcode.com/gh_mirrors/frontend149/frontend点击查看免费下载ha-dropdown是 Home Assistant 前端本仓库即 frontend基于 Web Awesomewebawesomedropdown 组件封装的可样式化下拉菜单广泛用于设置菜单、操作菜单、选择器与溢出菜单等交互场景。本文以 gallery 组件文档 为核心骨架结合 组件实现源码 与 菜单项源码系统讲解它的组合式用法composition、ha-dropdown-item的图标/子菜单/复选框/危险变体等能力、事件与主题定制并给出项目内的真实调用案例帮助你直接上手使用。组件定位紧凑、可访问的下拉菜单在组件画廊gallery的 sidebar 分类 中ha-dropdown与ha-dialog、ha-adaptive-popover、ha-tooltip一同归入Overlays浮层分组它的定位是一个紧凑、可访问的下拉菜单用于选择操作或设置项。它由两个配套元素组成ha-dropdown菜单容器负责触发按钮trigger与弹层的定位、显隐与事件分发ha-dropdown-item菜单项支持图标、子菜单、复选框、禁用项与危险destructive变体。组件支持两种使用模式通过slottrigger插槽组合自定义触发按钮官方推荐以及使用placement等属性控制弹层位置。官方文档原文指出该组件基于 webawesome 的 dropdown 组件实现更多底层细节可查阅 Web Awesome 官方文档。组合式用法完整示例官方文档给出的核心示例展示了ha-dropdown的全部组合能力自定义触发按钮、图标菜单项、禁用项、子菜单、复选框菜单项与危险变体。以下为可直接复制使用的完整写法ha-dropdown ha-button slottrigger with-caretDropdown/ha-button ha-dropdown-item ha-svg-icon .pathmdiContentCut sloticon/ha-svg-icon Cut /ha-dropdown-item ha-dropdown-item ha-svg-icon .pathmdiContentCopy sloticon/ha-svg-icon Copy /ha-dropdown-item ha-dropdown-item disabled ha-svg-icon .pathmdiContentPaste sloticon/ha-svg-icon Paste /ha-dropdown-item ha-dropdown-item Show images ha-dropdown-item slotsubmenu valueshow-all-images Show all images/ha-dropdown-item ha-dropdown-item slotsubmenu valueshow-thumbnails Show thumbnails/ha-dropdown-item /ha-dropdown-item ha-dropdown-item typecheckbox checkedEmoji shortcuts/ha-dropdown-item ha-dropdown-item typecheckbox checkedWord wrap/ha-dropdown-item ha-dropdown-item variantdanger ha-svg-icon .pathmdiDelete sloticon/ha-svg-icon Delete /ha-dropdown-item /ha-dropdowngallery 中的 ha-dropdown 演示组件 用同样的结构渲染了该示例并包裹在demo-theme-comparison内做明暗主题对比展示可运行 gallery 开发脚本gallery/script/build_gallery/gallery/script/develop_gallery在浏览器中直接查看效果。菜单项能力逐项拆解结合 ha-dropdown-item 源码 与上述示例ha-dropdown-item支持以下核心特性能力用法说明图标ha-svg-icon sloticon .path...在菜单项左侧渲染图标默认颜色取自--ha-color-on-neutral-normal禁用disabled布尔属性置灰且不可点击子菜单ha-dropdown-item slotsubmenu value...嵌套在父菜单项内形成二级菜单value用于标识选项长列表自动限高滚动复选框typecheckboxchecked渲染勾选图标checked控制选中态危险变体variantdanger图标与文字使用危险色--ha-color-on-danger-quiet用于删除类操作选中高亮selected布尔属性reflect选中项加粗并使用主色--primary-color与浅主色填充背景其中复选框图标由renderCheckboxIcon()渲染选中显示mdiCheckboxMarked未选中显示mdiCheckboxBlankOutline见 ha-dropdown-item.ts。子菜单的限高样式定义在#submenu[popover]规则中max-height: calc(100dvh - var(--ha-space-4)); overflow-y: auto保证手机端标签类长菜单滚动而不溢出屏幕。源码实现基于 Web Awesome 的封装与扩展从源码结构看HaDropdown直接继承home-assistant/webawesome的Dropdown类并通过customElement(ha-dropdown)注册为自定义元素见 ha-dropdown.ts。其封装要点包括1. 自定义标签名映射property({ attribute: false }) dropdownTag ha-dropdown; property({ attribute: false }) dropdownItemTag ha-dropdown-item;它显式指定弹层内使用ha-dropdown与ha-dropdown-item标签确保与项目内的主题样式绑定。2. 支持替代锚点anchor组件通过anchorElement的 getter/setter 允许把锚点指向ha-icon-button等替代元素而不局限于默认slottrigger的按钮。切换锚点时若原锚点是ha-icon-button会先清除其selected选中态避免菜单关闭后图标仍停留在高亮状态ha-dropdown.ts。3. 显隐联动showMenu()在弹层打开后会把ha-icon-button类型的触发器标记为selectedhideMenu()在关闭时还原形成图标按钮按下态的视觉反馈ha-dropdown.ts。4. 主题化样式组件样式由Dropdown.styles与自定义 CSS 合并而成ha-dropdown.ts字体大小遵循--ha-dropdown-font-size缺省回退到--ha-font-size-m弹层面板背景色--wa-color-surface-raised映射到--card-background-color依次回退--ha-dialog-surface-background、--mdc-theme-surface使菜单与卡片外观一致菜单内边距使用设计令牌--ha-space-1并让弹层宽度不超过--safe-width减去--ha-space-5针对 Android 导航条与刘海屏做了安全区适配底部弹出时减去--safe-area-inset-bottom顶部弹出时减去--safe-area-inset-top防止长菜单被系统 UI 遮挡wa-popup::part(popup)的z-index设为 200确保浮层位于页面内容之上。菜单项ha-dropdown-item同样继承 Web Awesome 的DropdownItem其选中态selected样式与--primary-color联动并保持最小高度--ha-space-10与长文本自动换行ha-dropdown-item.ts。事件与常用属性在项目源码中ha-dropdown常用以下事件与属性wa-select菜单项被选中时触发。事件负载event.detail.item即被选中的ha-dropdown-item通过value可读取选项值类型为HaDropdownSelectEventTValue, TDataha-dropdown.ts若菜单项设置了datadetail中会额外携带data字段。wa-show/closed弹层显示/关闭事件常用于打开时同步宽度、记录状态或阻止事件冒泡。placement弹层位置例如placementbottom、placementbottom-end。一个典型的事件处理写法来自 ha-form-optional_actions.tsprivate _handleAddAction(ev: HaDropdownSelectEvent) { const action ev.detail.item.value; this._displayActions [...(this._displayActions ?? []), action]; }项目内的真实应用场景ha-dropdown在 frontend 中已大量落地可作为组件选型的参考更多设置菜单supervisor-app-config.ts 中卡片头部用ha-icon-button slottrigger作为触发按钮菜单内包含在 UI / YAML 间切换编辑普通项与恢复默认设置variantdanger危险项并通过wa-select分发处理函数。表单可选操作ha-form-optional_actions.ts 将超出显示范围的表单动作折叠进下拉菜单触发按钮为ha-button appearancefilled sizes选项由hiddenActions.map()动态生成。相机选择器ha-qr-scanner.ts 在检测到多路摄像头时用ha-dropdown列出相机列表并通过.selected高亮当前相机。侧边栏编辑对话框dialog-edit-sidebar.ts 将恢复默认设置放入slotheaderActionItems的下拉菜单中使用placementbottom-end贴齐头部右侧。溢出菜单封装ha-icon-overflow-menu.ts 在窄屏narrow模式下把多个操作折叠成ha-dropdownha-icon-button(mdiDotsVertical)并支持wa-divider分隔线与危险项。控件级选择菜单ha-control-select-menu.ts 内部同样基于ha-dropdown placementbottom实现配合wa-show在打开时把触发器宽度同步到--control-select-menu-width使弹层宽度与按钮对齐。在画廊中预览与调试想快速预览ha-dropdown在明暗主题下的完整效果可运行 gallery 项目# 开发模式 gallery/script/develop_gallery # 构建 gallery/script/build_gallerygallery 的演示源码位于 gallery/src/pages/components/ha-dropdown.ts对应的文档即 gallery/src/pages/components/ha-dropdown.markdown。此外ha-dropdown是 Web Awesome dropdown 的再封装底层弹层定位、焦点管理与键盘导航能力均继承自上游组件若需了解完整的 API 属性如placement的全部取值、hoist等可直接查阅 Web Awesome 官方组件文档。小结ha-dropdown以组合优于配置的方式让开发者用最少的模板代码搭建出功能完整的下拉菜单自定义触发器用slottrigger富内容菜单项用ha-dropdown-item子菜单、复选框、禁用与危险变体开箱即用同时通过 CSS 变量与设计令牌完全融入 Home Assistant 的主题体系。本文覆盖了它的实现原理、完整示例、事件契约与项目内真实用例可以作为你在前端开发中选用或扩展该组件的直接参考。赞分享前端智能家居UI组件【免费下载链接】frontend:lollipop: Frontend for Home Assistant项目地址https://gitcode.com/gh_mirrors/frontend149/frontend点击查看免费下载相关推荐Ant Design Dropdown 按钮式下拉菜单Button with dropdown menu组合实战指南Ant Design Dropdown 按钮式下拉菜单Button with dropdown menu组合实战指南 本指南围绕 ant design 官方前端UI组件设计系统react-bootstrap下拉菜单高级用法Dropdown组件深度解析react bootstrap下拉菜单高级用法Dropdown组件深度解析 react bootstrap的Dropdown组件是构建交互式导航和操作菜单的核前端UI组件ant-design-vue Dropdown 下拉菜单组件完整指南API、事件与源码实现剖析ant design vue Dropdown 下拉菜单组件完整指南API、事件与源码实现剖析 向下弹出的命令集合菜单是后台系统中最高频的导航交互之一。本文以前端UI组件设计系统上一篇告别动态IP烦恼5分钟搞定DDNS自动域名解析终极指南下一篇3个终极技巧用dr/drei的Bvh和Instances组件大幅提升Three.js性能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Go 指数退避重试库 cenkalti/backoff/v5 实战指南:算法原理、Retry 用法与 boulder 落地实例

Go 指数退避重试库 cenkalti/backoff/v5 实战指南:算法原理、Retry 用法与 boulder 落地实例

网络安全后端微服务 【免费下载链接】boulder An ACME-based certificate authority, written in Go. 项目地址: https://gitcode.com/gh_mirrors/bo/boulder 点击查看 免费下载 本文以 boulder 仓库 vendored 的 github.com/cenkalti/backoff/v5(当前…

2026/10/12 3:14:50 阅读更多 →
PLC边沿触发详解:从幽灵故障到稳定程序的实战指南

PLC边沿触发详解:从幽灵故障到稳定程序的实战指南

1. 从一个现场“幽灵故障”说起前两年帮一个做包装机械的朋友排查过一个特别典型的故障:一台小型设备,操作工反映“偶尔会多动作一次”,有时候一天出现两三次,有时候几天都不出现。程序逻辑翻来覆去看了好几遍,梯形图里…

2026/10/12 3:13:50 阅读更多 →
AnyPS5跨设备串流方案:低延迟编解码与输入映射实战

AnyPS5跨设备串流方案:低延迟编解码与输入映射实战

1. 从“AnyPS5”这个标题说起:它到底想解决什么问题第一次看到“AnyPS5”这个标题,我脑子里蹦出来的第一个念头是:这大概率是一个围绕“跨平台运行”“远程串流”“设备兼容”做文章的项目。为什么这么判断?因为“Any”这个前缀在…

2026/10/12 3:13:49 阅读更多 →

最新新闻

大模型Prompt工程实战:从指令设计到生产部署的系统方法论

大模型Prompt工程实战:从指令设计到生产部署的系统方法论

1. 为什么值得花时间啃透这份实验手册大模型应用开发这件事,真正上手之后你会发现,模型本身的能力其实只是地基,决定最终效果的天花板往往在于你怎么跟它说话。Prompt 工程这个词听起来有点玄乎,但说白了就是一套“如何把需求翻译…

2026/10/12 6:43:54 阅读更多 →
数据分析驱动精准营销:从数据采集到ROI提升的完整闭环

数据分析驱动精准营销:从数据采集到ROI提升的完整闭环

精准营销这四个字,听起来像是大厂市场部门才玩得起的黑魔法。但过去两年我帮三家公司从零搭过营销数据体系,一家做母婴电商,一家做SaaS软件,还有一家做本地生活服务的连锁门店。跑完这几轮之后,我最大的感受是&#xf…

2026/10/12 6:43:54 阅读更多 →
AnyPS5:一个缺乏定义的技术代号解析

AnyPS5:一个缺乏定义的技术代号解析

项目标题为"AnyPS5",但提供的输入内容中:项目正文为空;关键词未给出;摘要描述缺失;网络搜索内容部分为空(仅显示);无实际语义信息支撑“AnyPS5”所指的具体对象、功能、技…

2026/10/12 6:43:54 阅读更多 →
2026项目管理软件选型指南:10款主流工具深度评测与避坑心得

2026项目管理软件选型指南:10款主流工具深度评测与避坑心得

做了十多年项目管理相关的工作,我经手过上百个团队的选型,从三个人凑出来的创业小组,到几百号人的交付部门,看过太多“别人推荐就买”、然后三个月静默弃用的案例。项目管理软件这东西,从来不是功能越全越好&#xff0…

2026/10/12 6:43:54 阅读更多 →
工作日志系统搭建指南:从流水账到个人知识库的持续累加

工作日志系统搭建指南:从流水账到个人知识库的持续累加

1. 从一串加号说起:工作日志到底在记什么第一次看到“Work Log”这个标题,我盯着那串加号看了很久。加号在代码里是拼接,在数学里是累加,在聊天里是“还有还有”。把它放在“Work Log”后面,意思其实很直白——工作日志…

2026/10/12 6:43:54 阅读更多 →
C# WinForm自定义标题栏颜色与边框重绘实战

C# WinForm自定义标题栏颜色与边框重绘实战

简介:本资源是一份面向C# WinForm开发者的进阶实践方案,聚焦于突破系统默认限制、实现标题栏与边框的深度自定义绘制。针对希望提升桌面应用视觉表现力的中高级开发者,提供基于Windows API消息拦截(WM_NCPAINT)与非客户…

2026/10/12 6:42:54 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →