1

我有许多人使用的标准下拉布局,<ul>元素内的嵌套<li>元素。事情是这样的:我想让那些子<li>元素显示在列中。假设我有 20 个项目,我想要四行,每行五个元素。我一直在通过<span>在每组 5 个列表项周围输出一个标签来做到这一点,只是愚蠢地忘记了 span 不允许作为无序列表的直接子项。例如

<span class="col">
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</span>

从视觉上看,这可以正常工作,但显然无法验证。我已经搜索了很多解决方案,但我被严重卡住了。有谁知道我如何在列中显示这些列表项?我也读过(不知道)<li>元素可能只有<ul>,<ol><menu>作为父元素,目前用处不大。我能想到的最好的是;

<ul>
    <li></li>
    <li></li>
    <li>
        <ul><!--drop down with columns-->
            <li><!--column-->
                <ul>
                    <li></li>
                    <li></li>
                </ul>
            </li>

            <li><!--column-->
                <ul>
                    <li></li>
                    <li></li>
                </ul>
            </li>

            <li><!--column-->
                <ul>
                    <li></li>
                    <li></li>
                </ul>
            </li>

            <li><!--column-->
                <ul>
                    <li></li>
                    <li></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

...这看起来非常浪费 HTML。有任何想法吗..?

谢谢,丹。

4

2 回答 2

1

如果 IE 9 和更早版本不是优先级,您可以使用 CSS 列来实现您想要的:

http://jsfiddle.net/kXDDL/1/

不支持它的浏览器(IE 6,7,8,9)仍然可以很好地显示您的菜单,除了在一个直的垂直列中(这是显示菜单的常用方式,所以应该没问题)。或者,您可以为不支持的浏览器使用 polyfill。

示例代码:

<ul class="parent-list">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Daddy 1
        <ul class="child-list">
            <li>Child 1</li>
            <li>Child 2</li>
            <li>Child 3</li>
            <li>Child 4</li>
            <li>Child 5</li>
            <li>Child 6</li>
            <li>Child 7</li>
            <li>Child 8</li>
            <li>Child 9</li>
            <li>Child 10</li>
            <li>Child 11</li>
            <li>Child 12</li>
            <li>Child 13</li>
        </ul>
    </li>
    <li>Item 4</li>
    <li>Item 5</li>
    <li>Item 6</li>
</ul>

.parent-list > li {
    float: left;
}

.child-list {
    position: absolute;
    width: 400px;
    -webkit-column-width: 100px;
       -moz-column-width: 100px;
}
.child-list > li {
    width: 100px;
}

POLYFILLS:
CSS3MultiColumn
Columnizer

参考:
http ://caniuse.com/multicolumn
http://www.w3.org/TR/css3-multicol/

于 2013-11-12T12:37:37.243 回答
0

s尝试一些CSS。

在行中添加一个类:

<li><!--column-->

就像是:

<li class="column"><!--column-->

然后你可以在某处添加css规则:

.column{
 float:left;
}

这应该可以解决问题。

编辑:我仍然不确定我是否理解问题,但我会再试一次:)

<div class='column'>
<ul>
<li></li>
<li></li>
</ul>
</div>

<div class='column'>
<ul>
<li></li>
<li></li>
</ul>
</div>

.column{
 float:left;
}

使用浮动 div 会减少 html 代码的浪费吗?(因为对我来说,你的嵌套 li 看起来很完美)。

于 2013-11-12T11:07:01.257 回答