CSS标准是否破裂?

时间:2009-04-09 05:11:36

标签: css web-standards cross-browser

如果不同的浏览器选择以自己喜欢的方式呈现CSS,那么标准是什么意思?

创建适用于所有浏览器的流畅3列布局等简单的东西可能会令人沮丧。你如何处理这个或使跨浏览器兼容的开发不那么痛苦?

9 个答案:

答案 0 :(得分:7)

与往常一样,这背后有一个原因。

标准没有被破坏(标准不能被破坏),只是像IE这样的浏览器不完全遵守它。

这主要是因为IE是在创建任何标准之前开发的,并且在那个时候它是最好的浏览器,几乎没有竞争对手(我读到netscape是另一种选择,而且它比IE差得多)。 / p>

然后人们意识到需要一个标准,他们创建它显然不包括任何IE专有代码和功能。 IE被迫选择与之前版本的向后兼容性,或者坚持这个新的“标准”,他们绝对统治了浏览器市场所以选择是显而易见的。

随着新版本IE的尝试越来越符合标准,并且他们说IE8成功通过了ACID2测试,因此标准的乌托邦(慢慢)变为现实。

同时,请查看此网站 - > quirksmode包含有用的跨浏览器信息。还尝试在线检查任何关于“IE盒子模型”的文章,并远离IE中的填充。如果你也使用第三方javascript库(JQuery,Prototype,Dojo)你应该没问题(或者和我们任何人一样好)。

问候。

答案 1 :(得分:4)

制定标准的一个主要目的是让我们远离另一场浏览器大战。您知道Netscape和Microsoft一直在向浏览器添加尽可能多的专有功能。与当时相比,跨浏览器开发是轻而易举的......

拥有标准的另一个好理由是,您知道浏览器未来版本的发展方向。遵循这些标准是您可以获得未来浏览器如何工作的最佳预测。

您可以在此问题中找到很多跨浏览器的提示:How can I achieve a consistent layout in all browsers?

答案 2 :(得分:4)

标准是紧急的,而不是预先定义的。好吧,至少他们应该。我与之交谈过的许多开发人员似乎都认为我对Web标准的看法有点异端,但请留在这里。

当您尝试在实施之前创建标准时,您有几个问题:

  • 出现有用实现之前的长时间延迟。没有人可以参考,因为没有人使用任何标准功能(因为它还不存在),实际实现它的动力很小。一种鸡和蛋的问题。
  • 无法实施的标准的可能性。在有人真正尝试之前,谁知道肯定? HLA标准就是这种情况的一个很好的例子,国防部必须编写一份“解释”备忘录,试图通过掩盖实际标准中的一些错误来设定事实上的标准。
  • 不符合实际需要的标准的可能性。人们真的想要这个吗?看看XForms的例子,它已经陷入了一个奇怪的,服务器端的利基市场。或者,我想不出任何我认识的人发现CSS“宽度不包括填充”的盒子模型是直观的。
  • 标准的实施者无法将其产品与竞争对手区分开来,导致顽固的渴望以实际或锁定的方式打破标准。参见CORBA的例子。

我认为W3C近年来学到了很多。一些最终用户可见的创新来自新的浏览器大战:例如HTML5(几家供应商),canvas(Apple),XMLHttpRequest(微软的Outlook Web Access团队),输入范围(Safari的内置RSS阅读器)和视频元素(Firefox) - 这些来自专有级别,而不是来自标准塔。这些新的“标准”是通过观察这些过去的个别实现(Firefox将微软主要用于XMLHttpRequest,等等)而形成的,而不是由一些睁大眼睛的智库思考未来。 (ISAPI,Netscape插件API和SQL都是自下而上标准的例子,其中破坏性的变化是以锁步方式逐步完成的。)

标准应该是一个最小的共同点,它可以平滑实现中的基本差异,这是一种适用于所有语言的pidgin语言,而不是关于语言或系统的Robert Lowth式规范规则的枚举,因为那时你最终得到的规则并不总是有意义或应用非现实的理想(比如尝试将基于拉丁语的语法规则应用于基于日语的语言,比如尝试将基于XML的语法规则应用于基于SGML的语言)。哦,这就是我们所拥有的。

此时CSS标准中可能存在的最大缺陷是,确实没有一种好方法可以指定页面是针对特定版本的标准编写的。我们可以为HTML文档指定DOCTYPE,为什么我不能指出为CSS 2.1编写的文档?这将变得更加重要,因为我们开始向CSS添加越来越多奇怪的功能,这些功能会影响页面的实际内容,例如CSS的:伪元素之前。该标准的未来版本有一天会出现错误,可能会破坏兼容性,让文档作者要求某些行为而不是让浏览器试图找出意图是很好的。

从较轻的一面来看,现在IE8和IE7已经出局了,事实上并没有像2005年那样糟糕。具有条件评论的特定IE6样式表在制作方面确实有很长的路要走。基于CSS /标准的实现是可行的。另一个建议是use Google, to take the 3-column fluid layout example,并希望其他人为您完成大部分故障排除。

创建跨浏览器兼容的网站是困难的,标准的或没有标准。如果您接受不同浏览器呈现网站的方式存在一些差异,您可以更轻松地对自己进行操作。不要害怕任何方式的专有扩展(你的非IE用户可以使用CSS3圆角),但是当它们不存在时会有后退(呃,圆角不是使用网站至关重要),让您的用户选择他们想要使用您的内容的方式。

答案 3 :(得分:2)

这个问题的其他答案几乎涵盖了为什么CSS不是问题的细节,但至于如何处理跨浏览器的困难,它通常大约是4步骤进行:

  1. 使用firefox设计网站,因为它有许多有用的扩展(最值得注意的是Firebug,它告诉你正在应用哪些CSS规则,哪些规则被其他规则覆盖等)。
  2. 在Safari和Opera中快速检查网站,确保设计没有任何缺陷。通常,它可以正常工作 - 归功于CSS web标准 - 这些浏览器以几乎相同的方式呈现网页
  3. 在ie7中查看设计并使用* + html css过滤器来纠正错误
  4. 在ie6中查看设计并使用* html css过滤器来纠正错误
  5. 做点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上安装ieu的多个版本:http://www.my-debugbar.com/wiki/IETester/HomePage

答案 4 :(得分:1)

该标准有一些缺点。实施起来也很困难。问题在于实施比标准更多。

使用像YUI这样的东西,许多聪明的人已经做了很多艰苦的工作来使这些东西在各种浏览器中运行。

答案 5 :(得分:1)

标准是公开的,以便不符合标准的浏览器可以查看和学习。该标准很重要,因为这是您可以通过HOPE制作可在所有页面上正确显示的网页的唯一方式。

还要记住,开发的标准永远不会过去,它只适用于未来。如果过去某些浏览器没有确认标准,那并不意味着我们不应该有标准。

事实上,标准诞生了,因为浏览器都在做自己的事情,然后需要标准。

如果您使用标准编码,浏览器将向其确认。

有一个希望的朋友!

答案 6 :(得分:1)

在我看来,你刚刚开始使用CSS。因为即使浏览器没有完全符合CSS规范,也有很多安全的地方可以自信地使用。现在,这个安全的地方比大约十年前要大得多,当时网络编码确实是一种皇家的痛苦。新的浏览器版本越来越多地遵守规范,这正是标准重要的原因。这是一种理论上的理想,浏览器可能永远无法完全实现,但即使90-95%的浏览器在现实世界中也非常有用。

我也希望IE能够更好地实现CSS,但是一旦你学到了一些奇怪的东西,你可以编写大多数常用布局而不会出现重大问题。最常见的布局也已经在网络上的各种CSS论坛中被讨论过死亡,并且总有一些很好的解决方案可供使用,因此您无需自己完成。

CSS标准是IMHO不是问题[至少不是你的问题意义],问题是浏览器市场和软件市场的现实。至于挫折感,在你获得一些经验之后,它应该会消失。限制将永远存在,但有足够的安全空间。

答案 7 :(得分:1)

这似乎是一个不成功的人。仅仅因为一些浏览器蔑视网络标准并不意味着标准本身存在问题。这有点像说安全带被打破是因为有些人选择不戴它们,或者酒后驾车法没有意义,因为有些人不遵守它们。

如果完全没有符合的标准,那么就没有万维网时期。就像一个平等主义社会是一个无法实现的理想,但是为了达到这个无法实现的理想而奋斗已经在几十年中产生了巨大的社会进步,W3C的建议和开放的网络标准也在网络的生命周期中产生了可衡量的进步。如果没有像CSS这样的标准,那么网络所依赖的互操作性就不会存在。

答案 8 :(得分:1)

是的CSS被破坏了 - 虽然在语义上你不能称之为'破坏标准'。但问题并不是语义学。

在80年代末和90年代初帮助定义UNICODE标准的经验是学习如何编写标准井的良好培训。我已经翻了很多次W3C编写标准文档,这些文档在定义中留下了巨大的漏洞,导致浏览器以不同的方式解释事物。 CSS标准中有许多异常独有的部分,即使在v3中也是如此,因为我们仍然必须保持与CSS1之前的兼容性。

在关键方面,CSS有三个令人费解的明显问题,任何计算机科学家都会告诉你这两个问题都是设计不当和不一致。

  1. Box模型 - 即使CSS 3接近,仍然存在巨大漏洞。
  2. '特异性'计算。实施“特异性”是为了修补CSS标准中的一个漏洞,然后再试图支持那些相互冲突的规则。如果样式表是真正级联的,则需要废除“特异性”。直到它应该被称为SWISMCCS(有时候 - 当它适合我的CSS)。当然,为了废弃这个功能,标准中松散语言的所有剩余问题都需要修复 - 这实际上意味着它永远不会发生。
  3. 类,选择器等的命名约定允许使用对动态处理有问题的字符。最明显的是允许在名称中使用' - '符号。如果你不明白我为什么鼓励你阅读和编码语言编译器和编译器语言解析。
  4. 所以答案是CSS标准没有被破坏,前提是合理的,但标准文档(不是浏览器,文档)的实现表明,委员会的征服很少能让你完全符合目的。 我想这是因为CSS不是为训练有素的程序员创建的,它是为网页设计师创建的 - 一个不是真正的程序员而不是真正的设计师的奇怪品种。有真正的网络开发人员不同,但花在漂亮的图形上的时间更少。

    恕我直言:CSS破了。另一方面,替代方案更糟糕。更好的魔鬼 - 我们知道。替代HTML的角色。

相关问题