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

前端之家收集整理的这篇文章主要介绍了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之类的东西.

猜你在找的CSS相关文章