zoukankan      html  css  js  c++  java
  • 【html】这样去写你的 html

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

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

    1. 文档声明:doctype

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

    1 <!Doctype html>

    2. 链接:a

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

    1、为关键链接添加 accesskey

    2、除非万不得已,不要去掉 focus 时虚线框

    1 <a href="" title="" accesskey="M" rel="" hidefocus>Link</a>

    3. 缩写:abbr

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

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

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

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

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

    5. 删除:<del>

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

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

    效果是这样的:

    6. 定义列表:dl

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

    1 <dl>
    2   <dt>Coffee</dt>
    3     <dd>- black hot drink</dd>
    4   <dt>Milk</dt>
    5     <dd>- white cold drink</dd>
    6 </dl>

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

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

    1 <ol>
    2   <li>Coffee</li>
    3   <li>Tea</li>
    4   <li>Milk</li>
    5 </ol>

    8. 表格:table

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

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

    9. 格式化片段:code/pre

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

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

    10. 换行:br

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

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

    11. 分割线:hr

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

    1 <h3>标题一</h3>
    2 <p>Lorem Ipsum is ...</p>
    3 <hr />
    4 <h3>标题二</h3>
    5 <p>This is the entry of... </p>

    12. 无语义标签:div/span

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

    1 <div id="container">
    2     <div id="content">
    3     </div>
    4     <div id="sidebar">
    5         <ul>
    6             <li><span>God</span>, oh my zsh</span></li>
    7         </ul>
    8     </div>
    9 </div>

    13. 段落/标题:p、h1/h2/h3…

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

    • 书的名称:h1
    • 书的每个章节标题:h2
    • 章节内的文章标题:h3
    • 章节的段落:p
    • 小标题/副标题:h4/h5/h6

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

    1 <h1>LOGO</h1>
    2 <h2>Title</h2>
    3 <div class="entry">
    4     <h3>Summary:</h3>
    5     <p>lorem ipsum is ...<em>emphasize</em></p>
    6 </div>

    14. 强调:em/strong

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

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

    15. 表单项:input/textarea/select

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

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

    16. 图片:img

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

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

    17. 框架:iframe

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

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

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

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

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

    19. 网页标题:title

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

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

    20. 总结

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

    原文地址:http://sofish.de/1688

  • 相关阅读:
    利用阻止冒泡解决点击页面除去本身触发事件
    vijos p1304 回文数
    vijos p1484 ISBN号码
    vijos p1449 字符串还原
    vijos p1217 乒乓球
    vijos P1911 珠心算测验
    vijos p1001 谁拿了最多奖学金
    vijos P1848 记数问题
    Catalan公式
    【HDOJ】2104 hide handkerchief
  • 原文地址:https://www.cnblogs.com/yjzhu/p/2757260.html
Copyright © 2011-2022 走看看