我看到有/很多人抱怨这个问题,因为这是一个较老的问题,可能有很多人在阅读它时想知道它是否仍然正确,或者最初是否有标准地方。请允许我清除空气。以下是严格的 CSS 评论政策的核心原因:
#1 不标准
至少从 CSS 2.1 开始标准化,cmets 只能封装在 /* 和 */ 中。虽然有些浏览器可以容忍//,但它们不应该这样做,并且距离有人说“哦,是的,那是非标准的”或“嘿!那是非标准的,修复它!”只有一英寸;然后猜猜看,你的 CSS 代码,它可以工作,现在不能为成千上万的人工作(并且可能已经不能为数百人工作)。我要补充一点,<!-- 和 --> 是允许的,但只有(我的意思是仅)它们出现在 HTML 文档中,而不是出现在 .css 源文件中。如果您的浏览器太旧以至于无法跳过 <style> 标签,那么可能是 10 年前换新浏览器的时候了。甚至Lynx 和其他文本浏览器都知道不阅读它们,因此将其注释掉仅在硬件和软件在其当前工作状态下处于内锁状态的非常孤立的情况下才有用。
#2 它不是(非常)跨平台友好
以// 开头的单行注释以“换行符”结尾,它是/不是跨平台标准化字符。更糟糕的是,有些可能有一个换行符或 2 个字符...当这些平台混合在一起时,可能会丢失一个换行符,并且您的终止符出现了...并且您的部分或全部代码现在被注释掉了不应该是这样,您不必是天才就能知道这可能会产生什么后果,尤其是如果您仅通过 CSS 来控制网站的功能,而许多人都这样做。
#3 标准对所有人都友好且统一
/* 和 */ 分隔符在每台计算机上始终是相同的字符,无论架构、操作系统等如何。
#4 换行符是空格
最后一个原因(是的,还有一个),换行符(在 CSS 和许多其他语言中)被认为是空格,*/ 不是空格是吗?如果你在这一点上考虑一下,应该很清楚你不应该使用空格来终止注释,特别是因为空格已经并且可以被许多 HTML/CSS 解析器剥离,或者在你甚至不知道的情况下重新格式化。
#5 CSS != C/C++
现在,如果您要离开座位对我大喊“嘿,但是 C++...”,请记住,这些编译器和 IDE 内置了大量换行检查和检测功能,因此它们可以接受。大多数编译器除非被询问,否则不会重新格式化您的代码,并且如果无法自行猜测,许多 IDE 通常会询问您的文档正在使用哪种换行符。如果我们每次加载时都为最终用户使用 CSS 页面,想象一下它试图绕过的噩梦。此外,C/C++ 代码在运行时不会被解析并被编译,所以很多时候,用户一开始就不会得到有问题的文档。整个世界并没有在数百个平台和许多操作系统以及一百万种不同的浏览器上不断查看源文件。 cmets 在到达最终用户之前就被剥离了。 CSS 源代码直接进入用户的浏览器,并且必须非常有弹性,不知道另一边是什么,所以需要注意的是,它必须为最终用户拥有或所做的任何事情做好准备,而不是开发人员所做或拥有的任何事情!
#6 不方便
不,必须输入额外的*/ 非常烦人,但这主要归咎于不提供自动完成功能的 CSS 编辑软件开发人员。如果您使用可以做到这一点的专业编辑器,最好是开箱即用,那么您会发现它与使用 // 一样简单。养成输入/**/ 然后退格2 的习惯,这将帮助您不要忘记并使其更容易一些。更好的是,您可以设置一个热键来为您放下这些。 Windows 和 Linux 都有强大的工具来实现这一点(KDE 非常适合)。
我希望这可以帮助大家理解“如何”背后的“为什么”,记住仅仅因为某件事对你有用,并不意味着它就是标准,总结一下:
是的,使用它是不好的做法,只需对双斜线说不!!!
如果您需要视觉辅助工具来提醒您这一重要事实,只需将这张图片刻录在您的脑海中(感谢那些除了制作这样的图片之外无事可做的人):
PS:如果你真的想向那些制定/破坏 CSS 标准(W3C、肘部)的人抱怨什么,有人会开始讨论“!important”关键字的冗长和错误!但这不是这个问题的一部分,所以我不会深入探讨。
参考文献
-
W3C:CSS 2.1 工作草案:注释字符。
-
W3C:CSS 语法模块级别 3:解析器到字符解释的铁路图。
-
Stack Overflow:与本文主题几乎相同的各种 Stack Overflow 文章。
-
w3schools:CSS 3 语法标准(反过来引用 W3C)。
-
sitepoint:关于“不使用双斜杠”的 CSS 语法注释。
-
mozilla|mdn:宽松的 CSS 3 处理允许在输入文件中使用双斜杠。