随着不同的浏览器选择以自己喜欢的方式呈现 CSS,拥有标准的意义何在?
像创建适用于所有浏览器的流畅 3 列布局这样简单的事情可能会让人感到沮丧。你如何处理这个问题或让跨浏览器兼容的开发不那么痛苦?
随着不同的浏览器选择以自己喜欢的方式呈现 CSS,拥有标准的意义何在?
像创建适用于所有浏览器的流畅 3 列布局这样简单的事情可能会让人感到沮丧。你如何处理这个问题或让跨浏览器兼容的开发不那么痛苦?
与往常一样,这一切都是有原因的。
标准没有被打破(一个标准不能被打破),只是像IE这样的一些浏览器没有完全遵守它。
这主要是因为 IE 是在创建任何标准之前开发的,并且在那个时候它是最好的浏览器,几乎为零的竞争对手(我读到 netscape 是另一种选择,它比 IE 差得多)。
然后人们意识到需要一个标准,他们创建的标准显然不包括任何 IE 专有代码和功能。IE 被迫选择向后兼容它以前的版本,或者坚持这个新的“标准”,他们绝对统治了浏览器市场,所以选择是显而易见的。
随着新版本的推出,IE 试图越来越多地符合标准,他们说 IE8 成功通过了 ACID2 测试,因此标准的乌托邦正在(慢慢地)变为现实。
同时,检查这个站点 ->包含有用的跨浏览器信息的 quirksmode 。也尝试在网上查看有关“IE框模型”的任何文章,并远离IE中的填充。如果您还使用 3rd 方 javascript 库(JQuery、Prototype、Dojo),您应该没问题(或者像我们任何人一样好)。
问候。
拥有标准的一个主要目的是让我们远离另一场浏览器战争。您知道 Netscape 和 Microsoft 一直在为浏览器添加尽可能多的专有功能。与那时相比,今天的跨浏览器开发轻而易举……
制定标准的另一个很好的理由是您知道未来版本的浏览器将走向何方。遵循标准是对未来浏览器如何工作的最佳预测。
你可以在这个问题中找到很多跨浏览器提示:如何在所有浏览器中实现一致的布局?
标准是新兴的,而不是预先定义的。好吧,至少他们应该是。与我交谈过的许多开发人员似乎都觉得我对 Web 标准的看法有点异端,但请与我同在。
当您尝试在实施之前创建标准时,您会遇到几个问题:
我认为 W3C 近几年来很难学到这一点。一些对最终用户最明显的创新来自一场新的浏览器大战:例如 HTML5(多家供应商)、canvas(Apple)、XMLHttpRequest(Microsoft 的 Outlook Web Access 团队)、输入范围(Safari 的内置 RSS 阅读器) ,以及视频元素(Firefox)——它们来自专有级别,而不是来自标准塔。而这些新的“标准”是通过查看这些过去的单个实现(Firefox 在很大程度上复制了 Microsoft 的 XMLHttpRequest 等),而不是通过思考未来的一些睁大眼睛的智囊团而形成的。(ISAPI、Netscape 插件 API 和 SQL 都是自下而上标准的示例,在这些标准中,破坏性更改以锁步方式逐渐完成。)
标准应该是消除实现中基本差异的最小公分母,是一种适用于所有这些差异的 pidgin 语言,而不是关于语言或系统的 Robert Lowth 风格的规定性规则的枚举,因为那样你最终会得到规则并不总是有意义或应用不切实际的理想(例如尝试将基于拉丁文的语法规则应用于基于日耳曼语的语言,例如尝试将基于 XML 的语法规则应用于基于 SGML 的语言)。哦,这就是我们所拥有的。
在这一点上,CSS 标准中最大的缺陷可能是确实没有一种好的方法来指定页面是针对特定版本的标准编写的。我们可以为我们的 HTML 文档指定 DOCTYPE,为什么我不能指出一个文档是为 CSS 2.1 编写的?随着我们开始向 CSS 中添加越来越多影响页面实际内容的奇异功能,例如 CSS 的 :before 伪元素,这只会变得更加重要。该标准的未来版本有一天会出现可能破坏兼容性的错误,让文档作者要求某些行为而不是让浏览器试图找出意图会很好。
不过,在较轻的方面,既然 IE8 和 IE7 都出来了,事情确实不像 2005 年那样糟糕。带有条件注释的特定 IE6 样式表对于制作 CSS/ 真的有很长的路要走。基于标准的实施可行。另一个建议是使用谷歌,以 3 列流畅布局为例,希望其他人为您完成大部分故障排除。
创建一个跨浏览器兼容的网站很困难,标准或没有标准。如果您接受不同浏览器呈现您的网站的方式会有一些差异,您可以让自己更轻松。无论如何不要害怕专有扩展(对于非 IE 用户来说,CSS3 圆角是可以的),但是当它们不存在时有一个后备(嗯,圆角不是使用该网站至关重要),并让您的用户选择他们希望如何使用您的内容。
这个问题的其他答案几乎涵盖了为什么 CSS 不是问题的来龙去脉,但至于我如何处理跨浏览器的困难,通常分为大约 4 个步骤:
要做第 3 点和第 4 点,你会有这样的事情
.box {css rules}
*+html .box {css rules to override in ie7}
* html .box {css rules to override in ie6}
在所有这一切结束时,您仍然会得到适用于主要浏览器的有效 css。
希望这可以帮助
*编辑 - 忘了添加 ietester 是一个很棒的软件,它允许您在 windows xp 或 vista 上安装多个版本的 ie:http ://www.my-debugbar.com/wiki/IETester/HomePage
该标准有一些不足之处。实施起来也是一件相当困难的事情。问题在于实施而不是标准。
使用像 YUI 这样的东西,很多聪明的人已经做了很多努力,以使这些东西在各种浏览器上工作。
标准是公开的,不符合标准的浏览器可以查看和学习。该标准很重要,因为它是您希望制作能够在所有页面上正确显示的网页的唯一方法。
还要记住,制定的标准绝不是为了过去,而只是为了未来。如果过去有些浏览器没有确认标准,并不意味着我们不应该有标准。
事实上,标准的诞生是因为浏览器都在做自己的事情,然后就需要标准。
如果您按照标准编码,浏览器将对其进行确认。
有希望的朋友!
在我看来,您只是从 CSS 开始。因为即使浏览器不完全遵守 CSS 规范,也有很多安全的基础可以让您放心使用。现在这个安全的地方比大约十年前要大得多,当时为网络编码确实是一种皇家痛苦。新的浏览器版本越来越遵守规范,这正是标准很重要的原因。这是一种浏览器可能永远无法完全实现的理论理想,但即使是其中的 90-95% 在现实世界中也非常有用。
我也希望 IE 有更好的 CSS 实现,但是一旦你学会了一些奇怪的东西,你就可以编写大多数常见的布局而不会出现重大问题。大多数常见的布局也已经在网络上的各种 CSS 论坛上被讨论到死,而且总是有一些很好的解决方案可供您使用,这样您就不必自己编造了。
恕我直言,CSS 标准不是问题[至少在你的问题的意义上不是],问题是浏览器市场和软件市场的现实。至于挫败感,在你获得一些经验后应该会消失。限制永远存在,但有足够的安全空间。
这似乎是不合逻辑的。仅仅因为一些浏览器蔑视网络标准并不意味着标准本身有问题。这有点像说安全带坏了是因为有些人选择不系,或者说酒驾法律没有意义是因为有些人不遵守。
如果绝对没有要遵循的标准,那么就不会有万维网时期。就像一个平等的社会是一个无法实现的理想,但为这个无法实现的理想而奋斗在过去的几十年里已经产生了巨大的社会进步,W3C 的建议和开放的网络标准也在网络的整个生命周期内产生了可衡量的进步。如果没有 CSS 等标准,Web 赖以发展的互操作性将不复存在。
是的,CSS 已损坏 - 尽管从语义上讲您不能将其称为“损坏的标准”。但问题并不是真正的语义问题。
在 80 年代末和 90 年代初帮助定义 UNICODE 标准的经验是学习如何编写标准的良好培训。W3C 编写的标准文档让我翻白眼很多次,这些文档在定义中留下了巨大的漏洞,导致浏览器以不同的方式解释事物。CSS 标准有许多相互排斥的部分,即使是在 v3 中,这些部分已经出现,因为我们仍然必须保持与 pre-CSS1 的兼容性。
在关键方面,CSS 有三个令人费解的明显问题,任何计算机科学家都会告诉你,这些问题既设计不当又前后矛盾。
所以答案是 CSS 标准没有被破坏,前提是合理的,但是标准文档(不是浏览器,文档)的实现表明,委员会的征服很少会让你得到完全符合目的的东西。我想这是因为 CSS 不是为受过训练的程序员创建的,它是为网页设计师创建的——一个奇怪的品种,他们不是真正的程序员,也不是真正的设计师。有些真正的 Web 开发人员与众不同,但在漂亮的图形上花费的时间更少。
恕我直言:CSS 坏了。另一方面,替代方案要糟糕得多。最好是我们所知道的魔鬼。在替换 HTML 上的作用。