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