html - ul 上的 CSS 渲染不一致,Firefox 是奇怪的球

标签 html css debugging

背景

我正在使用带有 anchor 和标题的嵌入式无序列表创建二级导航菜单。使用 CSS 重置表,所有标题和 anchor 都设置为“显示: block ”。当设置 list-style-position: inside 时,Firefox 和 Camino 会在元素符号下方呈现标题和 anchor ,而 Safari、Camino 和 IE 会内联呈现它。

示例屏幕截图

Firefox and Camino rendering
(来源:michaelgrace.org)
Safari, Opera, and IE rendering
(来源:michaelgrace.org)

示例代码

<html>
<head>
  <style type="text/css">
    /* css reset */
    h1, h2, h3, h4, h5, h6, a { display: block; }

    /* list styling */
    ul { list-style-position: inside; }
  </style>
</head>
<body>
<ul>
  <li>
    <h3>Primary</h3>
    <ul>
      <li>
        <h4>Secondary</h4>
        <ul>
          <li>
            <h5>Tertiary</h5>
            <ul>        
              <li><a href="#">Tertiary Link</a></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
<ul>
</body>
</html>

为了让 Firefox 和 Camino 与其他浏览器呈现相同的效果,我将无序列表、标题和链接设置为“显示:内联”,但我仍然想知道...

问题

为什么 Firefox 和 Camino 会在 Safari、Opera 和 IE 呈现为“正常”时呈现列表元素符号下方的列表项?

最佳答案

更新

这实际上是坏的,从 2000 年就开始了。仍然没有修复。我以为我已经弄明白了,但这是我的一个错误。还是坏了! :(

回答

将“list-style”的 CSS 属性设置为“disc”将导致 Firefox 和 Camino 渲染引擎 Gecko 将无序列表中的标题渲染为“正常”。

答案背景

在遵循@o.k.w 深入研究渲染引擎的建议后,我发现我的问题已于 2000 年 4 月 22 日在 bugzilla.mozilla.org 上报告! (*咳咳* 嗯,Mozilla...错误仍然存​​在。)报告的错误在 https://bugzilla.mozilla.org/show_bug.cgi?id=36854讨论 Mozilla 的渲染引擎 Gecko , 在显示内部列表项标记时在无序列表中显示标题时出现问题。它还说了这个问题:

"This actually seems to be a major CSS1 compliance issue..." - David Baron

在错误报告线程的底部有一个 w3c.org 文档链接,它引导我找到我的修复:

"There is a description in a CSS 2.0 recommendation: http://www.w3.org/TR/CSS2/generate.html#q11 which tell us that Gecko behavior is faulty." - Listy Blaut

在该文档的底部,建议将 CSS list-style 设置为 disc:

ul        { list-style: disc }

将无序列表 list-style 设置为“disc”已经“修复”了 Gecko 渲染引擎浏览器、Firefox 和 Camino 中的渲染问题,同时在其他浏览器中保持列表不变。 *注:虽然“光盘”是list-style-type property ,如果使用“list-style-type:disc”而不是“list-style:disc”,则无法解决问题。

解决方案示例代码

<html>
<head>
    <style type="text/css">
        /* css reset */
        h1, h2, h3, h4, h5, h6, a { display: block; }

        /* list styling */
        ul { list-style-position: inside; list-style: disc;}
    </style>
</head>
<body>
     <ul>
        <li>
          <h3>Primary</h3>
          <ul>
             <li>
                <h4>Secondary</h4>
                <ul>
                  <li>
                     <h5>Tertiary</h5>
                     <ul>            
                        <li><a href="#">Tertiary Link</a></li>
                     </ul>
                  </li>
                </ul>
             </li>
          </ul>
        </li>
     <ul>
</body>
</html>

找到自己问题的答案的感觉

alt text
(来源:michaelgrace.org)

我终于可以 sleep 了; )

关于html - ul 上的 CSS 渲染不一致,Firefox 是奇怪的球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142314/

相关文章:

css - 如何将多个转换声明应用于一个元素?

java - 如何限制ScrollPane的滚动量

debugging - 如何使用自定义 Sprite 解释器调试程序?

html - 5 个固定的 div,上面有相对的 div

出现在主菜单下方的 jQuery 幻灯片菜单

html - 将图像大小调整为 div

css - 绝对在 2 个 div 之间叠加图像

python - 在 IntelliJ 中调试 Crossbar.io 应用程序

ruby - 使 Ruby 控制台执行更加冗长

javascript - 使用 JQuery 将列表元素从一个无序列表移动到另一个无序列表