ARIA代表"可访问的富互联网应用程序"。简单来说,ARIA提供了一种与辅助技术(如屏幕阅读器)通信的方式。当你构建自定义下拉菜单或复杂的模态框时,你的代码知道它是什么,但屏幕阅读器不知道。ARIA就是用来填补这个空白的。
举个例子:你用div和css创建了一个漂亮的标签页界面。视觉上很完美,但使用屏幕阅读器的人不知道这些是标签页。加上正确的ARIA属性后,屏幕阅读器就能理解整个交互模式。
全球有超过10亿人患有某种形式的残疾,约占全球人口的15-16%。许多人依赖屏幕阅读器、语音控制、键盘导航或其他辅助技术来使用网络。如果没有正确的ARIA实现,你的网站可能看起来很棒,但对这些人来说完全无法使用。
可访问性不仅仅是合规或避免法律问题(尽管这些是真实存在的担忧)。可访问的网站是更好的网站。它们更具语义,更容易用键盘导航,结构更好,通常在搜索引擎中表现也更好。
在深入了解这个庞大的列表之前,你需要知道:语义化html永远是第一位的。
当<button>存在时,不要使用<div role="button">。当HTML已经能完成工作时,不要用ARIA重新发明轮子。原生元素带有内置的可访问性、键盘支持和预期行为。ARIA是在HTML不够用时填补空白的。
下面按用途分组介绍所有ARIA属性,帮助你理解何时以及为什么使用它们。
定义页面的主要区域:
role="banner" - 主要头部区域
role="navigation" - 导航菜单
role="main" - 主要内容区域
role="complementary" - 侧边栏等辅助内容
role="contentinfo" - 页脚内容
role="search" - 搜索区域
role="form" - 表单区域
role="region" - 值得标识的重要区域
描述内容的组织结构:
role="article" - 自包含的内容
role="document" - 文档内容
role="feed" - 可滚动的文章列表(如社交媒体信息流)
role="figure" - 图片、图表、代码片段
role="img" - 图片容器
role="list" - 项目列表
role="listitem" - 单个列表项
role="math" - 数学符号
role="none" 或 role="presentation" - 移除语义含义
role="note" - 脚注或边注
role="table" - 表格数据
role="row" - 表格行
role="rowgroup" - 行组(thead、tbody、tfoot)
role="cell" - 表格单元格
role="columnheader" - 列标题
role="rowheader" - 行标题
用于所有交互式组件:
role="button" - 按钮
role="checkbox" - 复选框
role="radio" - 单选按钮
role="textbox" - 文本输入
role="searchbox" - 搜索输入
role="switch" - 切换开关
role="slider" - 范围滑块
role="spinbutton" - 数字微调器
role="combobox" - 组合框(输入框+下拉框)
role="listbox" - 选项列表
role="option" - 单个选项
role="menu" - 菜单组件
role="menubar" - 菜单栏
role="menuitem" - 菜单项
role="menuitemcheckbox" - 可勾选的菜单项
role="menuitemradio" - 单选菜单项
role="tab" - 标签控件
role="tablist" - 标签容器
role="tabpanel" - 标签内容面板
role="separator" - 视觉分隔符
role="toolbar" - 带控件的工具栏
role="tooltip" - 上下文弹出信息
role="link" - 链接
role="progressbar" - 进度指示器
role="scrollbar" - 滚动条
role="tree" - 树形视图
role="treeitem" - 树形项
role="grid" - 交互式网格
role="gridcell" - 网格单元格
用于内容动态变化的场景:
role="alert" - 紧急消息
role="log" - 不断追加的日志
role="status" - 状态消息
role="timer" - 计时器和倒计时
用于模态交互:
role="dialog" - 对话框
role="alertdialog" - 警告对话框
aria-checked="true|false|mixed" - 勾选状态
aria-disabled="true|false" - 禁用状态
aria-expanded="true|false" - 展开状态
aria-hidden="true|false" - 对辅助技术是否可见
aria-invalid="true|false|grammar|spelling" - 验证状态
aria-pressed="true|false|mixed" - 按下状态
aria-readonly="true|false" - 只读状态
aria-required="true|false" - 必填字段
aria-selected="true|false" - 选中状态
aria-label="文本" - 直接提供标签文本
aria-labelledby="元素ID" - 引用其他元素的文本作为标签
aria-describedby="元素ID" - 提供额外描述
aria-errormessage="元素ID" - 链接到错误消息
控制变化内容如何向用户播报:
aria-live="off|polite|assertive" - 播报紧急程度
off:不播报
polite:空闲时播报
assertive:立即中断播报
aria-atomic="true|false" - 播报整个区域还是仅变化部分
aria-busy="true|false" - 加载状态
创建元素间的语义关系:
aria-controls="元素ID" - 控制的元素
aria-owns="元素ID" - 拥有的子元素
aria-current="page|step|location" - 当前项指示器
aria-posinset="数字" - 在集合中的位置
aria-setsize="数字" - 集合大小
<button 
  aria-pressed="false"
  onclick="this.setAttribute('aria-pressed', this.getAttribute('aria-pressed') === 'false')">
  深色模式
</button><div role="dialog" 
     aria-modal="true" 
     aria-labelledby="dialog-title"
     aria-describedby="dialog-desc">
  <h2 id="dialog-title">删除项目?</h2>
  <p id="dialog-desc">此操作无法撤销。</p>
  <button>删除</button>
  <button>取消</button>
</div><label for="email">邮箱地址</label>
<input type="email" 
       id="email" 
       aria-required="true"
       aria-invalid="true" 
       aria-describedby="email-error">
<span id="email-error" role="alert">
  请输入有效的邮箱地址
</span><button aria-expanded="false" aria-controls="content-panel">
  显示更多详情
</button>
<div id="content-panel" hidden>
  这里是额外内容...
</div><label for="search">搜索产品</label>
<input id="search" 
       type="search" 
       aria-controls="results"
       aria-describedby="results-count">
<div id="results" 
     role="region" 
     aria-live="polite">
  <span id="results-count">找到12个产品</span>
  <!-- 结果列表在这里 -->
</div><!-- 错误 -->
<div role="button" onclick="submit()">提交</div>
<!-- 正确 -->
<button onclick="submit()">提交</button><!-- 错误 - 状态从不更新 -->
<button aria-expanded="false" onclick="toggle()">菜单</button>
<!-- 正确 - 状态随交互更新 -->
<button aria-expanded="false" 
        onclick="this.setAttribute('aria-expanded', this.getAttribute('aria-expanded') === 'false')">
  菜单
</button><!-- 错误 - 按钮对辅助技术隐藏 -->
<button aria-hidden="true">重要操作</button>
<!-- 正确 - 只隐藏装饰性元素 -->
<span aria-hidden="true">★</span><button>评分5星</button><!-- 错误 - 不必要的aria-label -->
<h1 aria-label="欢迎">欢迎</h1>
<!-- 正确 - 文本内容本身就可访问 -->
<h1>欢迎</h1>不能只是添加ARIA就希望它能工作。以下是验证方法:
浏览器开发者工具:Chrome和Firefox都有内置的可访问性检查器
屏幕阅读器:使用NVDA(Windows)、JAWS(Windows)、VoiceOver(Mac/iOS)、TalkBack(Android)测试
自动化工具:运行axe DevTools、WAVE或Lighthouse审核
键盘导航:尝试只用Tab、Enter、空格和方向键使用你的网站
真实用户:黄金标准是与实际使用辅助技术的用户一起测试
标记元素:
aria-label - 直接标签文本
aria-labelledby - 引用其他元素的文本
aria-describedby - 额外描述
交互状态:
aria-expanded - 用于可展开区域
aria-pressed - 用于切换按钮
aria-checked - 用于自定义复选框
aria-selected - 用于选中选项
错误处理:
aria-invalid - 标记无效字段
aria-errormessage - 链接到错误文本
role="alert" - 立即播报错误
动态内容:
aria-live="polite" - 在方便时播报
aria-live="assertive" - 立即播报
aria-busy="true" - 加载时使用
从简单的开始:先掌握常用的aria-label、aria-expanded、aria-hidden、aria-live
渐进学习:随着项目需求逐渐学习其他属性
理解原理:ARIA存在的意义是让网络对所有人都可用
实际测试:添加ARIA属性后,一定要用屏幕阅读器测试
保持更新:ARIA规范会不断演进,关注最新变化
每次你添加正确的ARIA属性,就是在向更多人开放你的网站。这正是网络应该有的样子。
从小处着手,选择当前项目中的一个组件。添加正确的ARIA属性。用屏幕阅读器测试它。你会惊讶地发现它很快就能成为你的第二本能。
当每个人都能使用时,网络会变得更好。现在你有了实现这一目标的工具。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见,display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;
 
 元素宽高width,min-width,max-width等元素宽度设置百分比,以包含块的宽度为标准进行计算;height,min-height,max-height等元素宽度设置百分比,以包含块的高度为标准进行计算;
readonly 只对 <input> 和 <textarea> 标签有效;disabled 对所有表单元素都有效, 包括:<input>, <textarea>, <button>, <label>, <option>, <select>等
事实上我挺长一段时间都没弄清楚overflow:scroll与overflow:auto的差别,今天测试了一下,总算是明白了。visible: 不剪切内容。hidden: 将超出对象尺寸的内容进行裁剪,将不出现滚动条。scroll: 将超出对象尺寸的内容进行裁剪,并以滚动条的方式显示超出的内容。
这篇文章主要介绍了Vue Prop属性功能与用法,结合实例形式较为详细的分析了vue.js中Prop属性的功能、原理、使用方法及相关操作注意事项,写的十分的全面细致,具有一定的参考价值
 
 层叠顺序的大小比较;层叠顺序级别高的元素覆盖级别低的元素。首先要注意,z-index:auto 虽然可以看作z-index:0 ,但是这仅仅是在层叠顺序的比较上;从层叠上下文上讲,二者有本质差别:auto 不会创建层叠上下文,z-index:0 会创建层叠上下文。
所有的计算属性都以函数的形式写在Vue实例中的computed选项内,最终返回计算后的结果。在一个计算属性中可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果即可。
CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 position 定位 列表/表格 多列属性 可伸缩框属性 列表属性 Grid属性 Table属性 动画属性 Animation 动画属性 Transition 过渡属性
 
 word-wrap正常来说,在一行文本中,如果出现这一行已经放不下的单词,浏览器会自动将该文字转入下一行。white-space规定段落中的文本不进行换行。
 
 border 在一个声明中设置所有的边框属性。 border-bottom在一个声明中设置所有的下边框属性。border-bottom-color设置下边框的颜色。border-bottom-style设置下边框的样式。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!