• 通用约定
    • 标签
    • Class 与 ID
    • 属性顺序
    • 引号
    • 嵌套
    • 布尔值属性

    通用约定

    标签

    • 自闭合(self-closing)标签,无需闭合 ( 例如: img input br hr 等 );
    • 可选的闭合标签(closing tag),需闭合 ( 例如:</li></body> );
    • 尽量减少标签数量;
    1. <img src="images/google.png" alt="Google">
    2. <input type="text" name="title">
    3. <ul>
    4. <li>Style</li>
    5. <li>Guide</li>
    6. </ul>
    7. <!-- Not recommended -->
    8. <span class="avatar">
    9. <img src="...">
    10. </span>
    11. <!-- Recommended -->
    12. <img class="avatar" src="...">

    Class 与 ID

    • class 应以功能或内容命名,不以表现形式命名;
    • class 与 id 单词字母小写,多个单词组成时,采用中划线-分隔;
    • 使用唯一的 id 作为 Javascript hook, 同时避免创建无样式信息的 class;
    1. <!-- Not recommended -->
    2. <div class="j-hook left contentWrapper"></div>
    3. <!-- Recommended -->
    4. <div id="j-hook" class="sidebar content-wrapper"></div>

    属性顺序

    HTML 属性应该按照特定的顺序出现以保证易读性。

    • id
    • class
    • name
    • data-xxx
    • src, for, type, href
    • title, alt
    • aria-xxx, role
    1. <a id="..." class="..." data-modal="toggle" href="###"></a>
    2. <input class="form-control" type="text">
    3. <img src="..." alt="...">

    引号

    属性的定义,统一使用双引号。

    1. <!-- Not recommended -->
    2. <span id='j-hook' class=text>Google</span>
    3. <!-- Recommended -->
    4. <span id="j-hook" class="text">Google</span>

    嵌套

    a 不允许嵌套 div这种约束属于语义嵌套约束,与之区别的约束还有严格嵌套约束,比如a 不允许嵌套 a

    严格嵌套约束在所有的浏览器下都不被允许;而语义嵌套约束,浏览器大多会容错处理,生成的文档树可能相互不太一样。

    语义嵌套约束

    • <li> 用于 <ul><ol> 下;
    • <dd>, <dt> 用于 <dl> 下;
    • <thead>, <tbody>, <tfoot>, <tr>, <td> 用于 <table> 下;

    严格嵌套约束

    • inline-Level 元素,仅可以包含文本或其它 inline-Level 元素;
    • <a>里不可以嵌套交互式元素<a><button><select>等;
    • <p>里不可以嵌套块级元素<div><h1>~<h6><p><ul>/<ol>/<li><dl>/<dt>/<dd><form>等。

    更多详情,参考WEB标准系列-HTML元素嵌套

    布尔值属性

    HTML5 规范中 disabledcheckedselected 等属性不用设置值。

    1. <input type="text" disabled>
    2. <input type="checkbox" value="1" checked>
    3. <select>
    4. <option value="1" selected>1</option>
    5. </select>