• Web前端开发最佳实践(5):正确闭合HTML标签,停止使用不标准的标签和属性


    正确闭合HTML标签

    HTML元素的内容模型定义了元素的结构,表明元素可以包含哪些内容以及元素可以有哪些属性。元素可以包含的内容包括其他元素和字符,但是也有一些元素是空元素,即不能包含任何内容,这些元素对应的HTML标签也称之为自闭合标签,下面列出了HTML中所有的自闭合标签:

    area、base, br, col, command, embed, hr, img, input, keygen, link, meta, param, source, track, wbr
    

    W3C制定了多个版本的HTML规范,目前流行的HTML规范有XHTML1.0、HTML4.01和HTML5。规范中规定了所有HTML标签的语法,其中规定非自闭和标签必须有开始标签和结束标签,而自闭合标签没有闭合标签。示例代码如下:

    <!-- 非自闭合标签必须有开始和结束标签 -->
    <a href="demo.html" title="demo">simple</a>
    <!-- 自闭合标签必须没有结束标签 -->
    <img src="demo.png" alt="demo" />
    

    有关自闭合标签中是否应该添加符号“/”,在XHTML1.0、HTML4.01和HTML5的规范中稍有不同。XHTML的规范最严格,必须在自闭合标签中添加“/”来表明标签的结束。在HTML4.01的规范中,不推荐在自闭合标签中添加“/”。而HTML5最宽松,自闭合标签添加“/”和不添加“/”都符合规范,在自闭合标签中添加符号“/”是可选的。示例代码如下:

    <!-- 如下写法符合XHTML1.0、HTML4.01和HTML5的规范,但在HTML4中不推荐 -->
    <img src="demo.png" alt="demo" />
    <!-- 如下写法不符合XHTML1.0规范,但符合HTML4.01和HTML5的规范 -->
    <img src="demo.png" alt="demo">
    

    如下的这几种写法不符合规范,应该严格禁止:

    <!-- 错误:非自闭合标签没有结束标签 -->
    <a href="demo.html" title="demo">simple
    <!-- 错误:非自闭合标签使用自闭合标签的语法 -->
    <a href="demo.html" title="demo" />
    <!-- 错误:自闭合标签使用非自闭合标签的语法 -->
    <img src="demo.png" alt="demo"></img>
    

    当元素的起始标签和结束标签不在同一个元素的内容中时,则会出现交叉嵌套。应该严格禁止标签之间的交叉嵌套。
    下面的例子中起始标签“<span>”在元素div的内容中,而结束标签“</span>”则在div元素的内容之外:

    <!-- 错误: 起始标签“<span>”在元素div的内容中,结束标签“</span>”则在div元素的内容之外 -->
    <div>foo <span>bar</div> baz</span>
    

    一般通过编写层次缩进良好的HTML代码能够最大化避免出现这样交叉嵌套的错误代码。

    停止使用不标准的标签和属性

    W3C在制定的HTML4和HTML5标准中有添加独立的章节来说明那些是不被推荐的标签和属性,这些标签和属性是Web互联网发展早期HTML标准混乱和浏览器各自为政的产物,有些标签甚至使用率颇高,比如marquee滚动效果标签,尽管在现在看来其效果丑陋无比,但在当时几乎所有的网站都会使用这样的效果,风靡一时。但是随着Web互联网的飞速发展,人们对Web的认识也逐渐提高,也开始关注如何让网页HTML代码更统一、更简洁、更易理解等等,不在局限于单纯的外观。在此过程中,一些标签和属性逐渐被更好的方案代替,这些标签也不被标准所推荐,甚至是从标准规范中移除,有些特性在浏览器中也不被继续支持。从这些标签和属性的作用来看,导致不被推荐的原因主要有如下几个:

    1. 标签没有实际的语义,仅仅是用于设置样式

    不推荐使用单纯设置样式的标签,如:basefont、big、center、font等。应该通过CSS设置样式,让HTML标签功能更单一。不推荐的示例如下:

    <!--不推荐代码:不推荐使用单纯设置样式的标签,应该通过CSS设置样式-->
    <font color=blue>don't use it!</font>
    <big>don't use it!</big>
    <center>don't use it!</center>
    

    不推荐在HTML标签中添加样式属性,如:iframeimginputdiv等标签中的align属性,body标签上的background属性,tdtr标签上的heightwidthnowrapbgcolorvalign等属性,iframe标签中的framebordermarginheightscrolling等属性。此类属性应该废弃,并通过添加CSS样式来实现相同的效果。不推荐的示例如下:

    <!—不推荐代码:标签中添加border、width、height等样式属性-->
    <img src=”#” alt=”demo” border=”1” width="194" height="37" />
    <div id="focusViwer" align=center> </div>
    

    不推荐使用 <blink><marquee> (闪动,滚动)。这两个标签的职能已经超出了HTML本身,并且也存在浏览器的兼容问题。以如今的审美来说,这两个标签实现的效果丑陋无比,如果一定要这样的效果,可以通过JavaScript代码来实现,并且效果会更好,如:可以使用jQuery Marquee插件 。不推荐的示例如下:

    <!--不推荐代码:效果丑陋,并且存在浏览器兼容问题,不推荐使用,如果需要实现这样的效果,可以通过JavaScript代码来实现,并且效果会更好-->
    <blink>don't use it!</blink>
    <marquee scrollamount=3 scrolldelay=100 >don't use it</marquee>
    

    2. 让HTML标签具有更好的语义

    不推荐使用<b><i>显示黑体字和斜体,推荐使用更具有语义的如 <strong><em>,如果单纯是为了样式,推荐用CSS样式定义font-weightfont-style,让页面更简洁。类似的不推荐标签还有<S><strike>,这两个标签是给文字添加删除线的,可以用 <del><ins>来代替。

    不推荐示例:

    <!--不推荐代码:误语义的标签,单纯设置样式-->
    <b>don't use it!</b>
    <i>don't use it!</i>
    <s> don't use it!</s>
    <strike> don't use it!</strike>
    

    推荐示例:

    <!--推荐代码:使用具有语义的标签,如果单纯为了样式,则应该通过CSS来设置-->
    <strong>important</strong>
    <em>emphasize</em>
    <del>deleted</del>
    <ins>insert</ins>
    

    3. 移除不常用的HTML标签

    此类标签包括acronymappletdir等,废弃的原因是使用率极低或者是语义有歧义,并且有其他更好代替方案可以使用。如:表达缩写的标签<acronym>,其语义模糊,开发者更常用<abbr>来代替;开发者更喜欢使用<ul>而不是<dir>

    附录

  • 相关阅读:
    Hbase学习02-API操作
    Hbase学习01-shell操作
    09 | 普通索引和唯一索引,应该怎么选择?
    08 | 事务到底是隔离的还是不隔离的?
    07 | 行锁功过:怎么减少行锁对性能的影响?
    06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
    05 | 深入浅出索引(下)
    04 | 深入浅出索引(上)
    03 | 事务隔离:为什么你改了我还看不见?
    02 | 日志系统:一条SQL更新语句是如何执行的?
  • 原文地址:https://www.cnblogs.com/dangjian/p/4238150.html
Copyright © 2020-2023  润新知