Communitygithub.com

媒体播放器UI系统

设计一套系统性、高可访问性且响应式的自定义音视频媒体播放器视觉UI框架,确立空间布局、控制栏层级、时间轴进度控制、画中画/粘性浮窗过渡以及键盘/屏幕阅读器无障碍支持。

媒体播放器UI系统 是什么?

该技能为构建自定义视频和音频播放器UI提供了一个标准化的、可访问且响应式的视觉设计框架。它解决了原生浏览器媒体控件在跨浏览器样式不一致、品牌化不足、触控目标间距不佳以及移动端控制密度不理想等方面的严重局限性。该技能涵盖了从空间布局和宽高比容器、中心大播放按钮和加载状态,到底层控制栏层级、可访问的时间轴进度条和音量滑块,以及画中画(PiP)和滚动驱动的粘性浮窗过渡等完整的实现蓝图。此外,该技能还包括完整的键盘快捷键映射(例如空格键、J、K、L、F键)、ARIA实时区域状态公告以及符合WCAG AA标准的对比度合规性,确保所有用户都能通过键盘和屏幕阅读器完全控制播放器。它适用于在线学习平台、SaaS产品演示、播客应用以及企业设计系统组件库等多种场景。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/coastdigitalgroup/coastai-skills/tree/HEAD/website-design/media-player-ui-system

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

媒体播放器UI系统 是做什么的?

目的

媒体播放器UI系统为嵌入自定义视频和音频播放器界面提供了标准化、可访问且响应式的视觉设计框架。标准的浏览器原生HTML <video> 和 <audio> 控件存在严重局限性:跨浏览器视觉样式不一致、外观无品牌感、触控间距不良、在移动视口上控制密度不佳以及键盘焦点不可预测。

设计一个有效的自定义媒体播放器需要在视频画布构图、渐变叠加保护、控制栏空间层级(播放/暂停触发器、时间轴、音量滑块、播放速度、画质、字幕、画中画、全屏)、响应式浮窗过渡以及完全符合WCAG AA无障碍标准之间取得平衡。该技能连接了设计与技术实现,定义了布局规则、交互状态、触控人体工程学以及面向Web视频和音频体验的屏幕阅读器键盘控制。

用例

  • 在线视频学习与课程平台: 构建带有播放速度选择器、章节标记、隐藏式字幕开关、键盘快捷键和同步文稿的自定义视频播放器。
  • SaaS营销产品演示与英雄视频: 设计轻量级、品牌化的内联视频播放器,带有浮动叠加触发器、循环/静音控制以及在滚动时粘性画中画浮窗。
  • 播客与音频流媒体平台: 构建持久底部音频播放器浮窗、内联音频卡片播放器、波形可视化器以及快进/快退跳跃控制。
  • 媒体门户与编辑新闻网站: 展示带有画质选择器、画中画选项、相关视频叠加和可访问字幕的响应式英雄视频播放器。
  • 设计系统组件库: 为企业设计系统建立标准化、可主题化的媒体播放器视觉蓝图和无障碍模式。

何时不使用

  • 原始无样式浏览器控件: 对于快速内部工具或简单原型,标准原生浏览器控件(controls 属性)已足够,使用标准HTML标记即可。
  • 完整视频编辑或Canvas时间轴工作站: 对于需要时间轴进度轨道、关键帧操作和WebGL Canvas渲染的多轨非线性Web视频编辑器,请使用专门视频编辑应用。
  • 纯背景装饰动画: 对于没有音频、进度控件或用户播放控件的环境CSS或Canvas动画,请使用 interface-motion-system 或标准静音背景循环。
  • 静态图片灯箱与画廊: 用于展示静物照片或幻灯片,无需基于时间的媒体播放,请使用 image-gallery-and-lightbox-system。

输入

  1. 媒体类型与宽高比: 音频与视频格式,原生宽高比(16:9宽屏,9:16竖屏视频,1:1方形,或灵活音频高度)。
  2. 控制密度要求: 所需的媒体控件(例如,播放/暂停,时间轴进度条,当前时间/持续时间,音量,播放速度,CC/字幕,画质选择器,PiP,全屏,跳转10秒)。
  3. 主题与品牌令牌: 控制栏背景叠加、主品牌播放高亮、进度条进度、焦点环和排版的颜色令牌(来自 accessible-color-system、focus-indicator-design-system 和 fluid-typography-system)。
  4. 布局环境: 放置环境(嵌入式内联卡片、全宽部分英雄、底部持久粘性浮窗、模态叠加对话框)。

输出

  1. 空间布局与宽高比容器: CSS架构,建立响应式框架、宽高比保持和叠加层级上下文。
  2. 控制栏层级蓝图: 媒体控制工具栏的视觉空间布局(左侧播放控件,中央时间轴进度条,右侧辅助控件/全屏)。
  3. 进度条与音量滑块规格: 可访问的范围控件,带有悬停时间预览工具提示、已加载缓冲区指示器和视觉进度填充。
  4. 粘性画中画浮窗过渡: 当用户滚动经过主视口容器时,将视频播放器折叠为浮动的底部角落迷你播放器的响应式规则。
  5. 可访问的ARIA与键盘导航映射: 完整的键盘快捷键规范(空格键、K、J、L、M、F、C、方向键),ARIA实时区域状态公告以及WCAG AA对比度合规性。

工作流

1. 建立空间容器和宽高比框架

构建基础容器以防止媒体加载时的布局偏移(CLS):

  • 宽高比盒子: 将视频元素包裹在使用CSS宽高比的容器中(aspect-ratio: 16 / 9; width: 100%; position: relative; background: #000; border-radius: 8px; overflow: hidden;)。
  • 媒体层堆叠:
    • z-index: 1:填充容器的原生 <video> 或 <canvas> 媒体元素(width: 100%; height: 100%; object-fit: contain;)。
    • z-index: 2:保护控制栏可读性的深色渐变叠加(background: linear-gradient(to top, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.3) 40%, transparent 100%); pointer-events: none;)。
    • z-index: 3:居中播放/暂停大按钮叠加或加载骨架状态。
    • z-index: 4:底部(和可选的顶部)控制栏工具栏容器。

2. 设计居中大播放触发器和加载状态

为初始播放互动提供突出的视觉提示:

  • 大播放按钮叠加: 在精确视觉中心放置一个突出的64x64px(桌面端)或56x56px(移动端)圆形按钮(top: 50%; left: 50%; transform: translate(-50%, -50%);)。
    • 样式: background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(8px); border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; color: #FFFFFF;。
    • 悬停/焦点: scale(1.1); background: var(--brand-primary); border-color: transparent;。
    • 行为: 播放开始后淡出(opacity: 0; pointer-events: none; transition: opacity 0.25s ease;),暂停时重新出现。
  • 缓冲/加载旋转器: 当媒体缓冲低于播放阈值时,在视频画布上显示一个高对比度的圆形不定旋转器叠加。

3. 构建底部控制栏层级

将控件组织成一个三部分弹性布局,锚定在媒体框架底部:

  • 容器定位: position: absolute; bottom: 0; left: 0; right: 0; padding: 12px 16px; display: flex; flex-direction: column; gap: 8px; z-index: 4;。
  • 主要进度条行(第1行): 将交互式时间轴进度条放置在控制栏顶部全宽或水平布局中内联。
  • 控制栏操作行(第2行):
    • 左侧组(播放与音量):
      1. 播放/暂停按钮: 40x40px图标按钮(aria-label="播放" / aria-label="暂停")。
      2. 快退/快进(可选): 36x36px按钮,用于“后退10秒”/“前进10秒”。
      3. 音量组: 静音切换图标按钮 + 悬停/焦点可展开的范围滑块(width: 0 -> 80px 平滑过渡)或持久滑块。
      4. 时间显示: 文本计数器 02:14 / 10:45,使用等宽数字(font-variant-numeric: tabular-nums; font-size: 0.8125rem; color: #FFFFFF;)。
    • 右侧组(设置与屏幕模式):
      1. 隐藏式字幕(CC)开关: 图标按钮,激活时带有视觉激活徽章高亮(border-bottom: 2px solid var(--brand-primary))。
      2. 播放速度菜单触发器: 显示当前速率的下拉或弹出按钮(例如,1.0x,1.5x,2.0x)。
      3. 画中画(PiP)触发器: 启动浏览器PiP模式的图标按钮。
      4. 全屏切换: 切换全窗口/全屏显示的图标按钮(aria-label="进入全屏" / aria-label="退出全屏")。

4. 构建可访问的时间轴进度条和音量滑块

时间轴进度条必须完全触控友好、精确且键盘可访问:

  • 范围输入架构: 使用 <input type="range" min="0" max="100" step="0.1"> 或自定义ARIA滑块(role="slider",aria-valuemin="0",aria-valuemax="100",aria-valuenow="23",aria-valuetext="2分钟14秒 / 10分钟45秒")。
  • 轨道分层:
    1. 背景轨道: 基础灰色轨道(height: 4px; background: rgba(255,255,255,0.3); border-radius: 2px;)。悬停/焦点时,将轨道高度扩展到 8px。
    2. 缓冲条: 显示预加载缓冲视频的辅助条(background: rgba(255,255,255,0.5);)。
    3. 已播放填充条: 显示播放进度的鲜艳主色条(background: var(--brand-primary, #3B82F6);)。
    4. 进度条滑块: 14x14px的圆形滑块手柄(background: #FFFFFF; box-shadow: 0 2px 4px rgba(0,0,0,0.4);)。悬停/拖动时扩展到 18x18px。
  • 悬停时间预览工具提示: 在进度条轨道上光标悬停位置上方显示浮动的时戳框(background: #000; padding: 4px 8px; border-radius: 4px; font-size: 0.75rem;)。

5. 实现画中画(PiP)和滚动驱动的粘性浮窗

防止用户在滚动长文章或产品页面时丢失视频上下文:

  • 滚动观察器(IntersectionObserver): 跟踪主媒体容器何时滚动出活动视口阈值(<20%可见)。
  • 浮动迷你播放器状态:
    • 将播放器过渡到浮动的固定角落浮窗(position: fixed; bottom: 24px; right: 24px; width: 320px; aspect-ratio: 16/9; z-index: 1000; box-shadow: var(--shadow-xl); border-radius: 12px; border: 1px solid var(--border-subtle); animation: slideInUp 0.3s ease;)。
    • 在迷你播放器上添加右上角关闭/展开按钮(aria-label="关闭粘性播放器" / aria-label="返回视频位置")。
    • 在粘性模式下简化控制栏为主要播放/暂停、关闭和静音触发器。

6. 实现键盘快捷键和ARIA无障碍

确保无需鼠标或指针交互即可完全键盘控制:

  • 全局/焦点键盘快捷键:
    • 空格键 或 K:切换播放/暂停。
    • J:后退10秒。
    • L:快进10秒。
    • 左箭头 / 右箭头:后退/快进5秒。
    • 上箭头 / 下箭头:增加/减少音量10%。
    • M:切换静音/取消静音。
    • F:切换全屏模式。
    • C:切换隐藏式字幕开/关。
    • 0 到 9:跳转到视频总时长的0% - 90%。
  • 屏幕阅读器状态公告:
    • 向不可见的 aria-live="polite" 区域发送状态更新(例如,“在2分14秒处暂停”,“音量设置为80%”,“字幕已启用”)。

决策规则

媒体控制栏布局配置

媒体类型与放置位置控制栏空间模式推荐关键控件
英雄视频/课程视频(>640px)全浮动叠加栏完整控件:中央大播放按钮、完整进度条、时间、音量、CC、速度、PiP、全屏。
紧凑内联视频卡片(<480px)精简浮动栏基本控件:播放/暂停、内联进度条、时间、静音切换、全屏。
持久底部音频浮窗(全局)粘性三列栏左侧:曲目信息(缩略图+标题);中央:播放/暂停+跳转10秒+进度条;右侧:音量+播放列表。
内联音频播客卡片水平嵌入式框播放/暂停圆形按钮、曲目标题+进度进度条、当前时间/总时长、速度菜单。

视频叠加自动隐藏策略

  • 播放时: 在视频画布内指针无活动 2.5秒 后自动隐藏叠加控制栏(opacity: 0; cursor: none; transition: opacity 0.3s ease;)。
  • 暂停或焦点时: 保持控制栏 永久可见(opacity: 1),使控件始终可立即触及。
  • 键盘焦点时: 每当键盘焦点进入播放器内的任何控制按钮时,立即保持控件可见(:focus-within { opacity: 1; })。

约束

  • 无障碍(WCAG 2.1 AA):
    • SC 1.2.2 字幕(预录): 必须为带有音频语音的同步视频媒体提供隐藏式字幕按钮。
    • SC 1.4.3 对比度(最小): 控制图标、文本计数器和进度条进度轨道必须与控制叠加背景保持至少 4.5:1 的对比度。
    • SC 2.1.1 键盘: 每个播放器功能(播放、暂停、搜索、音量、CC、速度、全屏)必须完全可通过键盘导航访问。
    • SC 2.4.7 焦点可见: 聚焦的播放器控制按钮必须显示未裁剪的高对比度焦点指示器(outline: 2px solid #FFFFFF; outline-offset: 2px;)。
    • SC 2.5.8 目标尺寸: 交互式控制按钮和滑块手柄必须提供至少 24x24px 的最小点击目标(移动/触控视口至少 44x44px)。
  • 防止布局偏移: 必须使用CSS aspect-ratio 或padding-top hack声明宽高比包装器,以防止视频加载期间页面布局重新计算。
  • 触控手势人体工程学: 在移动触控设备上,视频画布左右区域的双击应触发10秒后退/快进,并伴有可视的涟漪反馈。

常见失败模式

  • 不可访问的原生自定义包装器: 隐藏原生浏览器控件,同时未能提供键盘快捷键或自定义HTML <div> 按钮上的ARIA属性,完全阻止键盘和屏幕阅读器用户访问。
  • 闪烁的叠加控件: 在鼠标主动靠近进度条滑块时,没有延迟或过渡就立即隐藏控制栏。
  • 未约束的全屏缩放: 在全屏模式下未能保持正确的宽高比,导致视频比例拉伸或变形。
  • 浅色视频帧上的低对比度控件: 在没有底层深色渐变叠加(rgba(0,0,0,0.7))的情况下呈现纯白色控制图标,使得控件在白色/浅色视频内容上不可见。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for progressive disclosure using accordions, ensuring structural integrity, visual affordances, and accessibility across different content densities and devices.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for long-form content, managing readability, vertical rhythm, and information density to ensure a superior reading experience.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for informational elements that communicate state (Badges) and categorization (Tags) with clarity and accessibility.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for non-overlay notifications, managing global announcements and contextual inline alerts to communicate system states without interrupting the user's flow.

coastdigitalgroup/coastai-skills

Design and implement a systematic, asymmetrical bento-grid layout framework to organize diverse content types cohesively while maintaining strict visual hierarchy, logical focus order, and responsive flexibility.

coastdigitalgroup/coastai-skills

Design a responsive, mobile-first bottom navigation bar and persistent action dock system for mobile websites and web applications, establishing spatial anchors, tab bar anatomy, badge indicators, thumb-zone ergonomics, safe area inset handling, active/inactive state contrast, and desktop responsive adaptation rules.

coastdigitalgroup/coastai-skills

Design a mobile-first bottom sheet overlay system with configurable detents, drag affordances, safe area padding, responsive desktop modal/popover adaptation, and WCAG AA accessibility compliance.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for secondary navigation trails that provide orientation, context, and one-click access to parent levels in deep information architectures.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for buttons and interactive triggers, managing visual hierarchy, variant logic, and action grouping to ensure clear intent and accessible interaction.

coastdigitalgroup/coastai-skills

Design a systematic framework for date and time selection, managing calendar grids, range pickers, and scheduling interfaces to ensure precision and accessibility.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for modular content containers that maintain hierarchy, structural integrity, and action alignment across variable content and responsive viewports.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for horizontal discovery components, managing navigation affordances, scroll behavior, and accessibility to ensure effective content density without compromising usability.

coastdigitalgroup/coastai-skills

Design a systematic, highly accessible, and developer-friendly UI layout framework for code blocks, snippet showcases, multi-file code tabs, line-highlighting, diff views, and syntax token contrast in technical documentation and developer platforms.

coastdigitalgroup/coastai-skills

Design a systematic framework for global command menus (Cmd+K panels) that combines keyboard-driven navigation, command execution, and shortcut discovery into an accessible, responsive overlay.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for threaded conversations, managing nesting depths, action hierarchies, and community signaling to foster engagement and readability.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for side-by-side comparison interfaces, managing high attribute density and responsive complexity to support informed decision-making.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for user privacy, managing consent banners, preference centers, and persistent privacy controls to balance legal compliance with user trust.

coastdigitalgroup/coastai-skills

Design and implement a systematic, highly accessible, and responsive visual layout framework for conversational chat widgets, live chat boxes, and chatbot panels that ensures clear message scannability, native focus flow, and seamless mobile keyboard adaptation.

coastdigitalgroup/coastai-skills

Design a systematic, accessible, and high-conversion framework for custom select dropdowns and comboboxes, defining anatomy, states, search-filtering, and responsive mobile-adaptive patterns.

coastdigitalgroup/coastai-skills

Design and implement a systematic color palette that ensures WCAG 2.2 accessibility compliance. Trigger this skill when asked to define brand colors, create UI themes, or establish a visual system for a website.

相关技能