css – 为什么Internet Explorer需要“hasLayout”标志?

像许多在Internet Explorer网站上工作的开发人员一样,我似乎遇到了臭名昭着的 hasLayout flag引起的很多错误.

我理解这个标志的作用以及它是如何工作的(大多数情况下).我前几天阅读的一个很好的解释(尽管我找不到源代码)是IE中的hasLayout本质上意味着“使这个元素成为一个矩形”.

它显然比那更复杂,但它很好地总结了(在我看来).

我不明白的是浏览器使用此标志的原因.在寻找答案时,我找到了一个听起来合乎逻辑的答案:

Internet Explorer had to deal with very old legacy code from before CSS was really in full swing. As an architectural decision to make the browser easy to add CSS on to it,the hasLayout flag was used to trigger certain CSS properties so the page would be rendered correctly. This dates back to around the time of IE4.

这几乎对我有意义,直到我意识到Firefox(当时的Netscape)必须处理同样的问题. Netscape几乎与Internet Explorer一样长,但据我所知,它不需要任何内部hasLayout标志或类似的东西.

看看hasLayout标志是如何在Internet Explorer中出现如此多的错误,有谁知道为什么IE有这个标志而其他浏览器不需要它?

如果有人有任何理论或碰巧知道答案,我想纯粹出于好奇而知道这件事.我想更多地了解为什么(或为什么不)这个标志是有用的.

解决方法

Netscape渲染器在NS4后完全重写. IE的“Trident”渲染引擎没有这样的爱.这个 made good business sense-IE继续改进,而NS正在重新编写,部分原因在于(部分原因是它的分销安排……)成功占领了市场的巨大份额……

但最终的结果是一个旧的,狡猾的代码库,它让开发人员感到生气,因此他们必须痛苦地意识到应该隐藏的实现细节.

现在,最后一点是关键:浏览器的渲染器是一个抽象,允许您在几行标记中创建需要数百或数千行低级渲染和事件处理代码的东西.和所有编程抽象一样,它有点漏洞……对于IE,Netscape,Firefox,Opera,Webkit来说都是如此……每个浏览器都有developers working feverishly来填充抽象中的漏洞.除了,五年,IE没有.其他泄漏被堵塞,但渲染引擎变得越来越像筛子.

总之,这些因素共同暴露了诸如hasLayout之类的东西.

相关文章

前言 最近项目做完,用户需要兼容IE,于是开展了兼容性的调整工作。边调整边想感叹IE真是个沙雕。。特将...
前言 有些属性不是很常用,但是工作中遇到了,记录一下,方便学习。 1、text-indent text-indent 属性规...
前言 政府网站会遇到公祭日的时候,网站整体颜色变灰的情况。今天正好调了一下。在此把解决方案分享给大...
需求 项目里有个消息中心,当有消息的时候,小铃铛图标可以晃两下,提示当前有信息。 实现过程 书写css...
html代码 css代码 效果图
在一些界面上 , 如果每个icon都去找图片还是相当麻烦的 , 直接使用css画出icon就方便的多了 , 下面两个...