(转)http://sofish.de/1688
昨天在 twitter 上说,怎么忍心把页面写得这么难用?是的,这个世界还有一群人等着我们创建出来的东西,可以让他们的生活能过得更容易呢。比如那些需要读屏软件的用户。作为一个前端,我们又怎么会忍心呢。之前就一直想写这样的一篇文章,分享一下如何去创造一个可访问性更好的页面。今天的计划里有一条把 2HTML T2ag 和 WCAG标准结合起来。我推荐你这样去写你的 HTML,让某些人的生活可以更容易。
今天想分享的是如何去使用我们的 HTML Tag, 把 WCAG 的标准和语义网的目标进行代码上的体现:
1. 文档声明:<!Doctype>
其实这跟 WCAG 根本上连不上什么直接关系,但为了一个兼容性更好,特别是向后兼容的页面,我推荐你这样写:
<!Doctype html>
2. 链接:<a>
互联网的联几乎可以说是用 <a> 来实现的,作为一个页面最常见的标签。我们应该如何对待呢?
- 为关键链接添加 accesskey
- 除非万不得已,不要去掉 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上表示强调时,请使用 <b> 标签</del>
HTML上表示强调时,请使用 <strong> 标签
效果是这样的:
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 中相对比较复杂的标签,需要注意的点也比较多:
- 需要给每个表单项添加 <label> 对其进行描述,当不能使用 label 时,为表单项添加 title 属性
- 当表单项是必填项的时候,使用 “*“ 符号来标记
- 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>
网页中一定要包含标题,并且每个标签应该具有辨识性。比如支付宝中是这样体现的:

<title>联系我 -- 幸福收藏夹</title>
20. 总结
好吧。就先写到这里了。WCAG 并不只是这些简单的 HTML Tags 的用法,语义化的网页也不是一两篇文章能够写完的。慢慢来吧。从最常见的做起,养成好的习惯。回到文章前面的那句话,难道你忍心把页面写得这么难用吗?
分享到:
相关推荐
在这个项目中,index.html会包含HTML标签来创建用户界面,以及引用外部CSS和JavaScript文件来实现自适应布局和文字转手写图的逻辑。 **详细知识点** 1. **HTML5**: 该项目可能基于HTML5标准,因为HTML5提供了更...
这个“自己用C#写的Word转Html工具”是一个实例,展示了如何利用C#来处理文档格式的转换,特别是从Microsoft Word的DOCX格式转换为Web友好的HTML格式。下面将详细介绍这一领域的相关知识点。 1. **C#基础**:C#是一...
"Java Excel转HTML"就是这样一个需求,它涉及到使用Java编程语言将Microsoft Excel文件的内容转换成HTML格式,以便在Web环境中方便地展示和分享。Java提供了多种库来实现这样的功能,这些库通常能够处理不同版本的...
7. **自动化工具**:在实际开发中,有些工具如JSP2HTML、JSP2Static等可以自动化地将JSP转换为HTML,这样开发者可以在不失去动态功能的情况下,更容易地进行前端优化。 总的来说,"jsp转html"这个主题涵盖了许多Web...
在HTML转PDF的过程中,QPrinter被用来设置PDF输出的参数,如纸张大小、方向等,QPainter则负责将网页内容绘制到打印机对象上。 4. **C++编程**:这个项目是用C++语言实现的,C++是一种强大的、面向对象的编程语言,...
例如,如果你有一个HTML段落,可以这样操作: ```java Document htmlDoc = Jsoup.parse(htmlContent); Elements paragraphs = htmlDoc.getElementsByTag("p"); for (Element p : paragraphs) { XWPFParagraph ...
实际编程中,你可以创建一个方法,接受Word文档的输入流和HTML输出流,使用Apache POI读取Word,构建HTML结构,并写入到输出流中。这样就可以实现Word到HTML的在线转换服务。 通过以上步骤,我们可以利用Apache ...
### HTML转换为XML的知识点详解 #### 一、HTML与XML的基本概念 1. **HTML (HyperText Markup Language)**:是一种用于创建网页的标准标记语言。...这样的转换对于需要将HTML文档标准化处理的应用场景非常有用。
例如,要设置一个元素的背景色为RGB值`rgb(192, 192, 192)`,HTML代码会这样写: ```html (192, 192, 192);">这是一个灰色背景的元素 ``` 在实际应用中,还有更简洁的十六进制(Hex)颜色表示法,如`#RRGGBB`。...
在IT行业中,处理文档转换是...通过这种方式,你可以创建一个高效的文件转换服务,满足各种场景下的文档处理需求。在实际项目中,可能还需要考虑错误处理、性能优化以及并发处理等多个方面,以确保系统的稳定性和效率。
2. **转换为中间格式**:在Word转PDF或HTML之前,可能需要将Word内容转换为一个通用的中间格式,例如XML或XHTML。这有助于保留格式信息并进行下一步操作。 3. **转换至目标格式**: - **PDF**:可以使用iText或...
在IT行业中,处理数据是日常任务之一,而Excel文件作为数据存储和...通过这样的操作,开发者能够方便地将Excel数据集成到Web应用中,或者以更直观的方式在线展示数据。在处理大量结构化数据时,这种转换技巧尤其有用。
而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。而如果,大家像我这样已经有前人写好了HTML...
这是因为XML对大小写敏感,而在HTML中大小写通常被认为是等效的。例如,`<HTML>`和`<html>`在HTML中被视为相同,但在XHTML中则不同。因此,在转换过程中需要确保所有的标签名称都是小写的。 #### 4. 属性值必须加...
在这个场景中,我们关注的是"notepad++ 写html的最有效自动排版插件",即Tidy2插件。Tidy2是Notepad++的一个重要补充,它专门用于HTML和XML文档的格式化,可以帮助用户实现代码的自动排版,使得HTML代码更加整洁、易...
在转换过程中,POI能够解析这些文件的内部结构,并将其内容转化为HTML格式,这样用户就可以在Web浏览器中方便地查看和预览。 对于Excel文件(.xls或.xlsx)的转换,POI提供了HSSFWorkbook(针对Excel 2003及以下...
示例代码可能会像这样: ```html <div class="swiper-slide">Slide 1 <div class="swiper-slide">Slide 2 <!-- 更多滑块... --> <!-- 如果需要导航箭头或指示器 --> <div class="swiper-pagination"></...
总的来说,Java通过库如Flying Saucer提供了强大的HTML转PDF功能,配合正确的字体和字符集设置,可以有效解决语言支持和乱码问题。在云服务器上部署时,注意配置和安全性,以确保服务的稳定运行。
这样,用户就可以在浏览器中打开HTML文件,实现在线阅读Word文档的功能。这个过程不仅可以应用于单个文档的转换,还可以扩展到批量转换,例如在文档管理系统或者在线协作平台中。 总结起来,"利用POI将word转换成...
"word转html的03跟07兼容版"这个标题表明我们关注的是一个能够处理Microsoft Word 2003和2007版本文档,并将其转化为HTML的解决方案。描述中的“找了好几天终于给我找到了兼容的jar包”提示我们,这是一个Java实现的...