IE6渲染bug。一些已解析的<li>元素正在丢失其结束标记</li>

时间:2010-05-04 23:43:42

标签: html internet-explorer-6

我一直在使用IE6多年[sob],但之前从未见过这个特定的错误,我似乎无法在网上找到它的引用。问题似乎在于IE6如何解析嵌套列表的HTML。即使标记是正确的,IE6在解析时会以某种方式对代码进行清除,并删除某些<li>元素的结束标记。

例如,请使用以下代码:

<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<div>
    <ul>
        <li><a href=''>Child A</a>
            <div>
                <ul>
                    <li><a href=''>Grandchild A</a></li>
                </ul>
            </div>
       </li>
       <li><a href=''>The Child B Which Is Not A</a>
            <div>
                <ul>
                    <li><a href=''>Grandchild B</a></li>
                    <li><a href=''>Grandchild C</a></li>
               </ul>
            </div>
      </li>
      <li><a href=''>Deep Purple</a></li>
      <li><a href=''>Led Zeppelin</a></li>
    </ul>
</div>
</body>
</html>

现在看一下IE6在通过IE6渲染引擎运行后如何呈现此代码:

<HTML>
<HEAD>
<TITLE>My Page</TITLE></HEAD>
<BODY>
    <DIV>
        <UL>
            <LI><A href="">Child A</A> 
                <DIV>
                    <UL>
                        <LI><A href="">Grandchild A</A> </LI>
                    </UL>
                </DIV>
            <LI><A href="">The Child B Which Is Not A</A> 
                <DIV>
                    <UL>
                        <LI><A href="">Grandchild B</A> 
                        <LI><A href="">Grandchild C</A> </LI>
                    </UL>
                </DIV>
            <LI><A href="">Deep Purple</A> 
            <LI><A href="">Led Zeppelin</A> </LI>
        </UL>
    </DIV>
</BODY>
</HTML>

请注意,对于某些<li>元素,不再有任何结束标记,即使它存在于源HTML中。

有没有人知道什么可能触发这个bug,如果有可能避免它?它似乎是IE6中一些视觉显示问题的根源。

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

纯HTML(非XHTML)模式中不需要</li>。这同样适用于</p>和更多结束标记。 IE6引擎可能会以某种方式“优化”它们。

以下是W3C spec关于<li>元素的摘录:

<!ELEMENT LI - O (%flow;)*             -- list item -->
<!ATTLIST LI
  %attrs;                              -- %coreattrs, %i18n, %events --
  >
     

开始标记:必需,结束标记:可选

注意最后一行。

您所谈论的视觉显示问题通常与hasLayout bugs有关。