是否有必要拥有有效的 CSS?我正在使用 Twitter Bootstrap 进行快速 Web 开发,在通过 W3C CSS Validator 运行两个主要的 Bootstrap 样式表后,我注意到大约 600 个错误。
我的问题是,我的网站看起来不错,为什么 CSS 的有效性如此重要?
是否有必要拥有有效的 CSS?我正在使用 Twitter Bootstrap 进行快速 Web 开发,在通过 W3C CSS Validator 运行两个主要的 Bootstrap 样式表后,我注意到大约 600 个错误。
我的问题是,我的网站看起来不错,为什么 CSS 的有效性如此重要?
是的,拥有有效的 CSS 是绝对必要的。CSS 是一种编程语言,因此,您必须遵循其语言规则。仅仅因为浏览器倾向于接受无效的 HTML 并尝试呈现它,它并不能使生成格式错误的 HTML 成为一种好习惯。CSS 也是如此,尽管 - 幸运的是 - CSS 规则比 HTML 规则要严格得多。
另一个原因是有效的 CSS 有保证的行为 - 如果您编写规则,您可以期望该规则以某种方式运行。(有缺陷的浏览器,除了所有版本的 IE。)如果您的 CSS 无效,您获得的任何行为都是未定义的,并且当您用于测试的任何浏览器发布补丁版本时,它可能会中断。您的 CSS 不一定会中断,但是当您编写无效的 CSS 时,您无法保证任何行为 - 您只是得到一些对您来说似乎正确但可能随时改变的行为。
如果您将正确的 CSS 与不正确的 CSS 混合在一起,浏览器往往会忽略无效部分(就像规范告诉它们的那样),但每个浏览器的处理方式略有不同。同样,虽然许多人建议使用 CSS hack,但出于上述原因,我会说不要。
CSS 不一定要有效才能工作。浏览器会简单地忽略它们不理解的 CSS。
验证 CSS 是一种测试它是否遵循规范的方法。如果是这样,任何与所用规范保持同步的浏览器都将理解 CSS。
这确实是一个有争议的话题。W3C 工具当然很好用,但它们往往无法解释很多现代代码。自然,他们不仅很难推进标准,而且很难确保他们提供的工具对新的和创造性的代码负责。
为了让网站在所有浏览器和所有平台上看起来都很好,要求人们可能会超出“有效”的规范。即使CSS不是100%一尘不染,也很难反对一个完美的跨浏览器和平台的网站。那是我的两分钱。
你的 CSS 不需要是有效的(取决于你问谁),但如果它是无效的,你应该有一个无效的原因:
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
由于属性开头的星号,验证器在此处出现解析错误。这是针对 Internet Explorer 的一个晦涩但公认的黑客攻击。其他浏览器会忽略它无法识别的属性,但 IE6/7 会读取带有星号的属性。
input:-moz-placeholder,
textarea:-moz-placeholder {
color: #999999;
}
input:-ms-input-placeholder,
textarea:-ms-input-placeholder {
color: #999999;
}
input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
color: #999999;
}
这里的验证器错误是特定于供应商的伪类的结果。请注意,与无法识别的属性不同,如果浏览器无法识别选择器,则整个规则将被忽略,因此供应商占位符扩展需要是单独的规则。即使使用逗号运算符也会发生这种情况:
input::-moz-placeholder,
input::-ms-input-placeholder,
input::-webkit-input-placeholder, {
color: #999999;
}
除非它们识别所有三个供应商前缀,否则在所有浏览器中都将被忽略。
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
这是用于渐变的老式 IE 扩展。即使 IE 跟随它并且其他浏览器不会悄悄地忽略它,它也会在验证器中产生涟漪并导致许多错误。
width: auto\9;
\9 是另一个针对 IE<=8 的 IE hack
最重要的是,如果您正在做一些非标准的事情,请确保您知道为什么要这样做。
现在有不同数量的浏览器有不同数量的版本。有些支持很多,但有些不支持。所以当你包含样式时,总是不可能100%完美。如果你的样式没有任何问题就可以了。但是当如果你遇到与 CSS 相关的问题,它会转到不同的浏览器,你必须小心,否则没问题。
是的,重要的是,大多数浏览器在加载 html 页面时都遵循 w3c 标准。如果您的页面没有有效的 css,在不同的浏览器中它可能会以不同的方式出现。旧的 Internet Explorer 没有遵循 W3c 标准,这对开发人员来说成本很高,导致开发人员总是需要额外的 css 来让 IE 正确显示页面。