7

我有一个像这样编码的简单菜单

<ul id="main-menu" class="container">
    <li><a href="#">About Us</a></li>
    <li><a href="#">Home</a></li>
    <li><a href="#">Villas & Yachts</a></li>
    <li><a href="#">Islands</a></li>
    <li><a href="#">Gallery</a></li>
    <li><a href="#">Blog</a></li>
    <li><a href="#">Get In Touch</a></li>       
 </ul>

看起来像这样 在此处输入图像描述

每个菜单项之间的小点是使用 :after 伪元素创建的。一切工作正常,但我还需要子菜单,这将是嵌套列表。

问题是,当我像这样向菜单添加换行符时

<ul id="main-menu" class="container">
    <li><a href="#">About Us</a></li>
    <li><a href="#">Home</a></li>
    <li><a href="#">Villas & Yachts</a>
    <!-- LINE BREAK -->
    </li>
    <li><a href="#">Islands</a>
    <!-- LINE BREAK -->
    </li>
    <li><a href="#">Gallery</a></li>
    <li><a href="#">Blog</a></li>
    <li><a href="#">Get In Touch</a></li>       
 </ul>

我在 Safari 和 Chrome(但不是 Firefox)中得到了这个结果...... 在此处输入图像描述

在我看来,好像 webkit 将空格视为“前”。:after 元素的 CSS 如下所示

ul#main-menu li:after
{
    content: "\00b7";
    width: 61px;
    float: right;
    text-align: center;
    border: rgba(225,225,225,0.25) 1px solid;
}

我还尝试设置white-space: normal/nowrap不影响任何内容的 ul、li 和 :after 元素。

谁能看到我哪里出错了,或者这是 Webkit/Firefox 的问题?

更新

我在http://jsfiddle.net/zmVbH/创建了一个演示

4

1 回答 1

5

问题是换行符是空白,这使得浮动内容下降了一行。</a>可以通过在和之间添加一个空格来重现该问题</li>。尝试使插入的内容display:inline-block而不是浮动的。

ul#main-menu li:after
{
    content: "\00b7";
    width: 61px;
    display:inline-block;
    text-align: center;
    border: rgba(0,0,0,0.25) 1px solid;
    white-space: normal;        
}

更新了 JSFiddle

由 OP 更新

是的,inline-block 解决了这个问题,但它并不那么简单,因为 inline-block 有一些不完整的浏览器支持。

ul#main-menu li:after
{
    content: "\00b7";
    width: 61px;
    float: right;
    text-align: center;
    border: rgba(225,225,225,0.25) 1px solid;

    /* FIX */
    display:-moz-inline-stack; /* For older versions of Firefox */ 
    display:inline-block; /* Anything that supports inline-block */

    /* IE FIX */
    zoom:1;
    *display:inline; 
} 
于 2011-07-12T13:27:42.340 回答