阅读更多

Web前端
博文推荐 这样去写你的 HTML  

2011-05-31  作者 justjavac  编辑 ITeye管理员 有18995人浏览

昨天在 twitter 上说,怎么忍心把页面写得这么难用?是的,这个世界还有一群人等着我们创建出来的东西,可以让他们的生活能过得更容易呢。比如那些需要读屏软件的用户。作为一个前端,我们又怎么会忍心呢。之前就一直想写这样的一篇文章,分享一下如何去创造一个可访问性更好的页面。今天的计划里有一条把 2HTML T2ag 和 WCAG标准结合起来。我推荐你这样去写你的 HTML,让某些人的生活可以更容易。

今天想分享的是如何去使用我们的 HTML Tag, 把 WCAG 的标准和语义网的目标进行代码上的体现:

1. 文档声明:<!Doctype>

其实这跟 WCAG 根本上连不上什么直接关系,但为了一个兼容性更好,特别是向后兼容的页面,我推荐你这样写:

<!Doctype html>

2. 链接:<a>

互联网的联几乎可以说是用 <a> 来实现的,作为一个页面最常见的标签。我们应该如何对待呢?

  1. 为关键链接添加 accesskey
  2. 除非万不得已,不要去掉 focus 时虚线框
<a href="" title="" accesskey="M" rel="" hidefocus>Link</a>

3. 缩写: <abbr>

对于用 HTML Tag 的正确使用,也是非常重要的,这有利于读屏软件使用者对于页面结构的理解。特别是在 H1,H2,H3 等这些标签的使用,滥用非常容易造成结构费解。当然,使用一般的标签,再利用 CSS 来使视觉上形成对比这也是常人能辨识的。但读屏软件用户呢。当然,这里只是顺带提起需要注意页面标签的使用方法,而 abbr 最重要的应该是应该添加一个 title 属性对缩写进行描述。比如:

<abbr title="Web Developer" >WD</abbr>

4. 大段引用: <blockquote>,一般引用: <cite>

 有大段引用的时候,使用 <blockquote>,而行内引用则使用 <cite>,让你的结构更加易读:

<blockquote>
    之前就一直想写这样的一篇文章,分享一下如何去创造一个可访问性更好的页面。今天的计划里有一条把 2HTML T2ag 和 WCAG标准结合起来。我推荐你这样去写你的 HTML,让某些人的生活可以更容易。
</blockquote>
<p>某A给我印象最深刻的一句话是,<cite>“做前端要有爱。不要动不动就有朩有地对各种人使用咆哮体”</cite>。</p>

5. 删除:<del>

在纸上写东西不能像在计算机上写东西一样,可以用撤销键可以按,但当我们想要强调某些东西是被删除的怎么办?那就是使用 <del> 标签了。比如这样:

<del>HTML上表示强调时,请使用 &lt;b&gt; 标签</del>
HTML上表示强调时,请使用 &lt;strong&gt; 标签

效果是这样的:

HTML上表示强调时,请使用 <b> 标签
HTML上表示强调时,请使用 <strong> 标签

6. 定义列表:<dl>

去年带着新人做支付宝前端博客的时候,他们给我印象最深刻的是很喜欢用 <dl>。当时在想,这些同学挺不错的,对语义化的理解还不错。我们还是比较少用到定义列表的。而是使用一般的 <ul> <ol> 这两个。<dl> 也是应该慎用的,最好只使用在某些有“定义”意义的条目,如 w3school 的这个例子,对咖啡和牛奶的定义:

<dl>
  <dt>Coffee</dt>
    <dd>- black hot drink</dd>
  <dt>Milk</dt>
    <dd>- white cold drink</dd>
</dl>

7. 无序/有序列表 <ul>/<ol>

列表,这个对于每个前端来说,都熟悉不过了。因为结构可以非常灵活地进行应用,在导航、列表、Tab 等,都经常要要用到。这个就无须多说了。但有一点还是需要明白的,不要相信什么 <ul>/<ol> 是 <table> 的替代品。在我们常用的 HTML Tags 中,每个标签都有自己的作用,谁都不是谁的替代品。

<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>

8. 表格: <table>

如果是一个表格,那就,就不要用段落来替代,更不要用列表。除非万不得已,并且他们是可以转换的。另外,表格中还有一些需要注意的点:

  • 给 <table> 添加 summary 属性,有些表格非常大,并不需要去读完整个
  • 添加 <tbody>,如果我没记错,如果没添加的话,浏览器会自动为你添加
  • 必要时使用 <col> <colgroup> 来控制表示的栏
<table summary="sofish's blog status">
    <thead>
        <tr>
            <th>DATE</th>
            <th>IP</th>
            <th>PV</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>2011.3.11</td>
            <td>3000</td>
            <td>8000</td>
        </tr>
    </tbody>
</table>

9. 格式化片段 <code>/<pre>

<code> 是指 computer code text, 而 <pre> 是指 preformatted text。<pre> 的范围更广,并且是块状元素,可能被使用来格式化各种文本,特别是代码。使用没有需要特别注意的,主要是语义上的正确使用,比如不要用 <pre> 来代替一般的 <p>。

<code>text-align:center</code>
<pre>
{ ( 1 * 102 ) + ( 9 * 101 ) + ( 3 * 100 ) }
</pre>

10. 换行: <br>

在现代网页中,使用 <br> 的情况是非常少的。网页中的留白,一般都是使用 CSS 的 padding 和 margin 来实现。这样更精准,并用更容易控制。现在推荐的用法是,使用到一般的段落 <p> 中做简单的换行,而不是用来控制页面留白。

<p>我是一个段落。<br />
诗歌都会用换行的。
</p>

11. 分割线: <hr>

<hr> 具有非常好的语义作用。但他的视觉效果很难控制。之前就写过这样的文章关于<hr />在各浏览器中的问题。一般也都很少用。如果专门为读屏软件使用者提供单独页面的话,或许 <hr> 会大有用处。

<h3>标题一</h3>
<p>Lorem Ipsum is ...</p>
<hr />
<h3>标题二</h3>
<p>This is the entry of... </p>

12. 无语义标签:<div>/<span>

其实 <div>/<span> 这两个标签是有语义的,都是 defines a section in a document。是的,和 HTML5 中的 <section> 其实是一样的。只是,因为搜索引擎的的原因,搜索引擎认为它们是无语义标签,因此他们成了 “无语义” 标签。推荐用法是尽量使用其他来做为页面框架的容器,比如布局、添加额外的视觉效果,而不是段落等的替代品。

<div id="container">
    <div id="content">
    </div>
    <div id="sidebar">
        <ul>
            <li><span>God</span>, oh my zsh</span></li>
        </ul>
    </div>
</div>

13. 段落/标题: <p>,<h1>/<h2>/<h3>…

这几个标签几乎可以说是一个页面标签等级结构中最重要的标签。我们可以用一本书的结构来说明这几个标签,而我们构建一个页面的时候,也应该有这样的一种思想在脑中:

  • 书的名称:H1
  • 书的每个章节标题: H2
  • 章节内的文章标题: H3
  • 章节的段落: P
  • 小标题/副标题: H4/H5/H6

是的,当然还有引用 <blockquoute>,技术类书中提供的代码 <pre class="code">,一些需要注意点的列表 <ul>,一些方便比较的表格 <table> 等。

<h1>LOGO</h1>
<h2>Title</h2>
<div class="entry">
    <h3>Summary:</h3>
    <p>lorem ipsum is ...<em>emphasize</em></p>
</div>

14. 强调: <em>/<strong>

<em> emphasize 的缩写。而 <strong> 是 strong emphasize。可能很多刚入门前端的同学会对 <em>、<strong>、<cite> 、<i>、<b> 这几个标签的使用拿捏不准。<i> 和 <b> 基本上是被废置的,相当于现在的 <em> 和 <strong>,一般情况下他们对于内容重要性的排序是这样的:strong > em ≈ cite。 

<strong>注意:</strong>别使用老掉牙的标签,比如<cite>FONT、CENTER</cite>等,特别是 <em>FONT</em>。

15. 表单项: <input>/<textarea>/<select>

表单项是 HTML 中相对比较复杂的标签,需要注意的点也比较多:

  1. 需要给每个表单项添加 <label> 对其进行描述,当不能使用 label 时,为表单项添加 title 属性
  2. 当表单项是必填项的时候,使用 “*“ 符号来标记
  3. Flash 创建表单项一般是不会生成 <label> 的,请勾上 auto label 那个选项
<form method="post" action="http://sofish.de">
    <fieldset><legend>My Form</legend>
      <label for="firstname">* First name:</label> <input type="text" id="firstname" />
      <label for="speech">Say something:</label>
      <textarea id="speech" />
      </textare>
      <input type="submit" value="submit" title="submit button" />
    </fieldset>
</form>

16. 图片: <img>

对于图片,盲人看不到。提供 alt 来表示替代文本。告诉他们这是一张什么样的图。

<img src="http://sofish.de/favicon.ico" alt="幸福收藏夹的 favicon" />

17. 框架: <iframe>

尽量避免 <iframe>框架的使用,但当你需要使用的时候,最好提供一个 title 属性对其进行描述。

<iframe src="http://sofish.de" title="幸福收藏夹" /></iframe>

18. 流媒体:<video>/<audio>/<object>/<embed>

媒体也是比较复杂的格式,处理起来比较麻烦。通常我们可以这样做:

  • 为视听媒体提供相应的文本,包括相应的场景,比如演讲中的鼓掌等有利有阅读者感知现在气氛的,都应该体现在演讲文本中。其他的依此类推。
  • 如果像交响乐这种不能提供具体描述的,可以进行简单的说明
  • 如果文本较长,不能在当前页面展示,可以在媒体后提供一个链接到相应替代文本的链接
  • 如果媒体中有可能会引起癫痫发作的,应做相应的说明
<audio src="mozart.mp4">莫扎特39号交响曲</audio>

19. 网页标题:<title>

网页中一定要包含标题,并且每个标签应该具有辨识性。比如支付宝中是这样体现的:

alipay web page title

<title>联系我 -- 幸福收藏夹</title>

20. 总结

好吧。就先写到这里了。WCAG 并不只是这些简单的 HTML Tags 的用法,语义化的网页也不是一两篇文章能够写完的。慢慢来吧。从最常见的做起,养成好的习惯。回到文章前面的那句话,难道你忍心把页面写得这么难用吗?



相关推荐

  • coco.names

    使用 Python Opencv 实现 Yolo v3,讲清每一步,每一行代码,包含 jupyter-notebook效果以及 matplotlib 与 OpenCV 之间的图像差异,博客地址:https://blog.csdn.net/qq_39567427/article/details/105451962 所需下载文件

  • __int64 类型(VC中)与long long 型(gcc中,C99标准)

    <br /> <br />int64 是有符号 64 位整数数据类型,也就是 C# 中的 long 和 SQL Server 中的 bigint,范围为 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807),存储空间占 8 字节。用于整数值可能超过 int 数据类型支持范围的情况。 <br />c#中:<br />Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,37

  • 关于__int64

    关于__int64  (2012-01-12 10:23:18) 转载▼ 标签:  杂谈 分类: c 找了一天的bug竟然是两个int乘积超了int的范围,悲催!!将int转为了__int64吧!! 1.各整型范围: unsigned   int   0~4294967295    int   2147483648~21

  • 关于 URL 中的哈希符号 (#)

    右侧任何的字符都会被当做是锚点的标识符,这也意味着这些数据不会被发送到服务端。右侧的内容,浏览器只会滚动到目标位置,并不会触发页面重新加载,也就是说不会发出任何网络请求。右侧的内容,浏览器的访问历史就会增加一条记录。的含义就是页面中的某个特定的位置,这个位置可以被快速找到,很类似于在该位置抛了一个锚。下面的例子是如何在 html 中创建一个锚点,首先创建一个超链接,指向该锚点。大多数的浏览器都支持这一事件,例如下面的代码,是 HTML 5 中定义的一个新的事件,当。右侧的部分,是这个锚点的唯一标志,例如。

  • Matplotlib 安装教程

    Matplotlib是一个Python的绘图库,可以用来制作各种类型的图表和图形展示。它是Python数据可视化中最常用的工具之一,无论是数据分析还是图像处理,Matplotlib都是必不可少的。然而,对于初学者而言,Matplotlib的安装却可能会成为一道难题。下面,本文将从多个角度分析,为小白提供最简单的Matplotlib安装教程。

  • 魔百盒九联UNT402A_S905L3_线刷固件包_语音蓝牙正常

    1、修改dns,三网通用; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、无开机广告,无系统更新,不在被强制升级; 4、大量精简内置的没用的软件,运行速度提升30%以上,多出大量的存储空间;......

  • 基于改进RoI Transformer的遥感图像多尺度旋转目标检测

    源自:应用光学 作者:刘敏豪, 王堃, 金睿蛟, 卢天, 李璋 “人工智能技术与咨询” 发布 摘 要 旋转目标检测是遥感图像处理领域中的重要任务,其存在的目标尺度变化大和目标方向任意等问题给自动目标检测带来了挑战。针对上述问题,提出了一种改进的RoI Transformer旋转目标检测框架:首先,利用RoI Transformer检测框架获取旋转的感兴趣区域特征(rotated region of interest, RRoI)用于鲁棒的几何特征提取;其次,在检测器中引入高分辨率网络(high-r

  • YOLOv5在无人机/遥感场景下做旋转目标检测时进行的适应性改建详解(踩坑记录)...

    作者丨略略略@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/358441134编辑丨极市平台文章开头直接放上我自己的项目代码:https://github.com/hukaixuan19970627/YOLOv5_DOTA_OBBgithub.com/hukaixuan19970627/YOLOv5_DOTA_OBB(以下为最初版本代码,最...

  • 弱监督论文解读:CADN- 用于表面缺陷检测的基于弱监督学习的分类感知对象检测网络

    Article history: 2020年1月26日收到,2020年6月17日修订,2020年7月31日接受,2020年8月1日网络上线 Keywords: Weakly supervised learning ,Automated surface inspection,Defect detection,Knowledge distillation 1.Abstract: 本文提出了一种称为类感知对象检测网络(CADN)的弱监督学习方法,仅接受图像标签注释训练,执行图像分类和缺陷定位。通过在分类pipe.

  • CSDN快速涨粉秘笈---涨粉速度提升30倍

    首先,必须要强调的是,这篇文章所述的CSDN快速涨粉秘笈,是合法合规的,也是CSDN官方博客专门发文推送过的,而不是所谓的违规刷粉。你没有看错,就是如下的CSDN官方博客。既然是快速涨粉秘笈,那我们先来看一下效果吧。现在还是国庆假期期间,大家没上班,涨粉效果尚且如此显著(10-20倍左右的效果)。

  • 如何增加访问量、阅读量

    玩博客有一段时间了,有时候看见自己那少得可怜的博客访问量和博文阅读数,心想怎么样才能提高自己的博客访问量博文阅读数呢,结合自身搞过web方面的经历发现:这个博文阅读量就是当你打开对应博文的网址,后端程序会记录刷新进行加1操作,并记录到数据库中,而博客访问量很大一部分是所有博文阅读量之和。(个人见解) 那如何提高博客访问量、博文阅读量? 通过上面我们可以知道,可以手动点击博文然后就可以提高博客访...

  • coco-names.zip

    coco.names文件

  • 免费的 PPT 模版资源

    1. 第一 PPT 第一PPT站内资源以免费下载为基础,本着开放的共享为原则,服务于国内广大国内PPT爱好者。目前第一PPT站内的所有PowerPoint资源(PPT模板,PPT背景,PPT 素材,PPT教程,PPT软件)均是免费下载,所以请大家在支持本站的同时也要尊重PPT资源的作者,是他们将这些优秀的PPT 资源免费分享给大家,供PPT爱好者下载学习研究!网址如下: http://...

  • python3爬取图片

    对http://code.py40.com/42.html的爬虫代码进行改造,添加多线程,多进程下载,图片完整性判断,爬取百度图片分析 import multiprocessing import re import os import requests import time from multiprocessing import Process, Queue, cpu_count #使用P...

  • CSDN博客新手使用方案

    在CSDN上写博客,总是遇到很多问题,虽然这些问题很简单,但是对于新手来说,缺经常遇到,因此写篇博客记载。 一、CSDN的博客如何上传图片               如果有现成的 图片就选择文件路径,没有是截图的话,可以先截图粘贴到QQ聊天窗口,然后复制到本地              ps:如果是直接复制图片到博客上来,发表文章的时候是不显示的(被这个坑了好久)

  • ffmpeg采集视频+压缩转码成h264+实时播放。

    转自:http://blog.csdn.net/bjcic/article/details/5438070 感谢bjcic!         http://blog.csdn.net/cherayliu/article/details/8175150 感谢秋兔子!       ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以

  • ffmpeg 转码(mp4--h264)标准操作,直接按命令粘贴即可

    需要软件:X264:http://download.videolan.org/x264/snapshots/ffmpeg:http://www.ffmpeg.org/download.htmlyasm:http://yasm.tortall.net/Download.html调试了近一下午时间,各种错误,以排查完成,并总结出一套盲操作手册,希望可以帮助大家1. 解压缩并安装插件tar -xvzf ...

Global site tag (gtag.js) - Google Analytics