HTML中的双连字符注释

时间:2019-06-21 14:38:26

标签: html css bem

我在HTML注释中看到矛盾的文档和意见,关于“-”是否仍然无效。我在此看到的大多数文档都有5-10年或更久的历史。考虑以下使用CSS类名的BEM语法的HTML简化代码。

<html>
    <head>
        <meta charset="utf-8">
        <title>Page</title>
    </head>
    <body>
        <div>
            <header>
                <div>
                    <div>
                        <div><a href="/">link</a></div>
                        <!-- <div class="block__element--modifier"></div> -->
                        <div></div>
                        <div></div>
                    </div>
                </div>
            </header>
        </div>
    </body>
</html>

我正在考虑使用一个解析器,该解析器读取此内容并自动关闭我的标头,从而产生此结果输出。通过查看代码,它将注释类中的“-”标识为注释的结束,注释结束的div标签被使用,然后确定该级别要求关闭标头。

<html>
    <head>
        <meta charset="utf-8">
        <title>Page</title>
    </head>
    <body>
        <div>
            <header>
                <div>
                    <div>
                        <div><a href="/">link</a></div>
                        <!-- <div class="block__element--modifier"></div> -->
                        <div></div>
                        <div></div>
                    </div>
                    </header>
                </div>
            </header>
        </div>
    </body>
</html>

尽管留下注释的代码不是最好的,但这在典型的开发周期内是完全正常的事情。在我们的例子中,此输出导致此页面的显示非常混乱。

此输出显然是不正确的,但是我想了解什么是正确的。根据{{​​3}}和其他文章的说法,HTML中不应使用“-”或双连字符,因为XML不允许使用。确实是this,但它似乎是HTML4 spec discourages this。我一直很了解HTML5 doesn't make this same distinction。实际上,当我沿着那条路走时,我从未感到过快乐?。

这里的影响是BEM是一个通用约定,如果当前的HTML规范禁止这样做,我们可能要避免BEM或对其进行修改以供将来使用。尽管默认情况下HTML和解析器是相当宽容的,但是遵守规范通常是实现未来稳定性的最佳实践。有想法吗?

1 个答案:

答案 0 :(得分:0)

这就是为什么原始BEM命名方案不同的原因:

block-name__elem-name_mod-name_mod-val

  • 姓名用小写拉丁字母书写。
  • 单词之间用连字符(-)隔开。
  • 块名称为其元素和修饰符定义了namespace
  • 元素名称与块名称之间用双下划线(__)隔开。
  • 修饰符名称与块或元素名称之间用单个下划线(_)隔开。
  • 修饰符值与修饰符名称之间用单个下划线(_)隔开。
  • 对于布尔值修饰符,该值不包括在名称中。

有关更多信息,请参见https://en.bem.info/methodology/naming-convention/