代码之家  ›  专栏  ›  技术社区  ›  DarthVader

跨浏览器兼容性问题

  •  8
  • DarthVader  · 技术社区  · 15 年前

    我看到很多人都有跨浏览器兼容性问题。

    我的问题是为什么浏览器呈现html、css或js的方式不同?

    是因为当家吗?盒子模型?

    当W3C等标准存在时,为什么会出现跨浏览器兼容性问题?

    主要的互联网浏览器显示HTML内容的方式有什么不同吗?为什么Internet Explorer、Firefox(Mozilla)、Opera可能会以不同的方式显示相同的内容?

    在构建跨浏览器兼容的网站时,我应该记住什么?

    5 回复  |  直到 15 年前
        1
  •  4
  •   David Sulc    15 年前

    我相信有人会回答得更好,但这里有一个开始:

    是的,在CSS呈现方面应该遵循一些标准。问题是,有些浏览器编辑器( 咳嗽 微软 咳嗽 )不要把正确地(甚至完全地)实现规范视为优先事项。甚至当布局引擎正在工作以确保兼容性的时候,当混合不同的CSS属性和单元时,它会变得非常糟糕,弄清楚如何正确地呈现事物(参见酸测试)。 http://en.wikipedia.org/wiki/Acid3 )

    要建立一个跨浏览器的网站,你基本上需要检查你网站的所有页面在你的访问者使用的浏览器(或你支持的浏览器)中的呈现是否正确。各种工具,比如Selenium(seleniumhq.org)可以帮助解决这个问题。

    你基本上得决定你要做什么

    • 为最小公分母设计(如果是IE6,你就没什么能力做了)
    • 使用验证CSS和使用hack(例如clearfix)来纠正某些浏览器中的错误行为的设计
    • 决定不支持某些浏览器(IE6是首选)
    • 嗅探浏览器并相应地调整显示(不是首选的方法)

    对于在操作DOM方面的差异,jQuery等库对您隐藏实现差异有很大帮助。

    作为参考,最好至少在以下方面测试您的网站:

    • 基于WebKit的浏览器(Chrome、Safari)
    • 壁虎浏览器(Firefox)
    • 工业工程
    • 歌剧院
        2
  •  5
  •   Hamish    15 年前

    有很多原因或不相容:

    • 规范通常是书面的 作为回应 对于特定供应商的礼节功能的开发,
    • 规范有时可能写得不好,模棱两可,或者不是在预期特定的最终用例时编写的。,
    • 浏览器厂商有时会因为自己的原因而忽略规范。

    其他因素:

    • 很多东西很难实现,更不用说正确的实现了,
    • 它还必须被实现来处理格式不好的HTML、向后兼容性等。浏览器供应商有时为了“互操作性”牺牲“正确性”,
    • 历史、政治和个性。
        3
  •  3
  •   Free Consulting    15 年前

    这是浏览器大战的后果现在Netscape的通信已经是一片废墟,但竞争对手为了超越对方而制造的怪癖仍然存在于浏览器的代码库中,人们仍在开发团队中。考虑看克罗克福德的 lecture ,他在主题上做了一些突出的介绍。(您将希望保存文件,而不是对其进行流式处理)

        4
  •  2
  •   James Kovacs    15 年前

    哈米什所说的一切,加上他提到的另一个主要问题是浏览器如何处理不正确的HTML。例如,在IE4/NS4时代,元素是非常有问题的。如果你不关闭标签,IE4会为你关闭它。Netscape 4会完全无视这个表。

    今天仍然是这样,一个浏览器将以不同的方式修复不正确的标记。是的,应该更正标记,但是浏览器会尽力呈现一些内容。

        5
  •  2
  •   deceze    15 年前

    标准指定了HTML/CSS标记的方式 应该 渲染成 显示为视觉元素。它没有指定 致使 应该特别管用。许多不同的人和公司创建了不同的可视化标记呈现方式。由于HTML呈现是一项极其复杂的任务,当然它们并不是都集中在同一个解决方案上。所有的渲染引擎都是为了同一个目标,但是通常规格足够模糊,允许小的差异(仅仅是像素级),而且bug也是不可避免的。

    再加上过去浏览器厂商不太关心标准,而更关心快速获得市场份额,而且某些公司在转向接受标准方面非常缓慢(你知道你是谁)。

    最后,相当复杂的规范和更复杂的浏览器是由许多不同的 ;你不能指望这个过程会产生绝对的完美。完美也不是HTML的目标;它是一种简单的、独立于供应商和平台的标记语言 信息 在各种各样的设备上,它做得非常好。如果你需要像素完美的结果,你需要使用一种技术来提供这一点,如Adobe Flash(既不是平台独立的,也不是厂商独立的,也不是简单的)。

    试着从半个完整的角度来看待它:成千上万的不同的人已经编写了数百万行代码,在许多不同的平台上做着截然不同的事情,有着许多不同的目标和重点,但最终都呈现了HTML标记 几乎 与通常只有微小的,几乎不相关的差异相同。当然,每个引擎中都有弱点,如果你碰巧一次全部命中,你的网站将以不同的方式进入每个浏览器。但只要有点经验,这是可以避免的。