实现此导航菜单布局

时间:2013-10-07 13:05:42

标签: html css width children

enter image description here

我需要实现这种布局,请注意当前项目,

3个子列表是当前项目的子项,

这里的问题是,如果我设置绝对位置和左边:0和宽度:100%;最大宽度将根据父母的宽度确定,

所以,

如何保持列表中的子项并使它们使用整个可用空间?

这是我现在的标记:(我能保留吗?)

<nav>
    <ul class="main">
        <li><a href="<?=base_url('grupo-cabau')?>"><?=lang('grupo-cabau')?></a></li>
        <li class="active">
            <a href="<?=base_url('nuestros-hoteles')?>"><?=lang('nuestros-hoteles')?></a>
            <ul>
                <li>
                    <ul>
                        <li>list
                            <ul>
                                <li><a href="<?=base_url('aquasol')?>">item</a></li>
                                <li><a href="<?=base_url('bahia')?>">item</a></li>
                                <li><a href="#">item</a></li>
                            </ul>
                        </li>
                    </ul>
                    <ul>
                        <li>listt                               <ul>
                                <li><a href="#">item</a></li>
                            </ul>
                        </li>
                    </ul>
                    <ul>
                        <li>list
                            <ul>
                                <li><a href="#">item</a></li>
                                <li><a href="#">item</a></li>
                                <li><a href="#">item</a></li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="<?=base_url('trabaja-con-nosotros')?>"><item</a></li>
        <li><a href="<?=base_url('contacto')?>">item</a></li>
    </ul>
    <ul class="lang">
        <li>ESP
            <ul>
                <li>ENG</li>
                <li>DEU</li>
            </ul>
    </ul>
</nav>

我目前的实施(几乎在那里):

enter image description here

header .wrapper > div nav ul.main > li.active > ul {
    background: none repeat scroll 0 0 #FFFFFF;
    display: block;
    height: 141px;
    left: 0;
    position: absolute;
    top: 60px;
    width: 100%;
}

当我将li.active设置为position:relative(离那里很远)时出现问题:

enter image description here

所以问题是,

位置如何:绝对子项更大(左侧,右侧属性响应布局),父级位置为:relative ???

我唯一有机会从树上取出名单吗?

1 个答案:

答案 0 :(得分:1)

您要做的是根据父母的父级设置宽度。那就是问题所在。但正如您所评论的那样,菜单具有固定的宽度,这使得它更容易。

我清理了HTML:

<ul class="nav">
    <li>item 1</li>
    <li>item 2
        <ul>
            <li>List 2.1
                <ul>
                    <li>item 2.1.1</li>
                    <li>item 2.1.2</li>
                    <li>item 2.1.3</li>
                </ul>
            </li>
            <li>List 2.2
                <ul>
                    <li>item 2.2.1</li>
                    <li>item 2.2.2</li>
                    <li>item 2.2.3</li>
                </ul>
            </li>
            <li>list 2.3
                <ul>
                    <li>item 2.3.1</li>
                    <li>item 2.3.2</li>
                    <li>item 2.3.3</li>
                </ul>
            </li>
        </ul>
    </li>
    <li>item 3</li>
    <li>item 4</li>
</ul>

然后制作了这个CSS:

body, ul, li {
    margin: 0;
    padding: 0;
    list-style: none;
}
.nav {
    list-style: none;
    margin: 0;
    padding: 0;
    width: 500px; /* needs to be a fixed width */
    background: lightblue;
}
.nav > li {
    display: inline-block;
    background: lightblue;
    margin-right: -4px;
    padding: 15px;
}
.nav > li > ul {
    position: absolute;
    display: table;
    width: 500px; /* same width as .nav */
    left: 0;
    margin-top: 15px;
    background: lightgreen;
}
.nav > li > ul > li {
    display: table-cell;
    width: 33%;
}

查看此演示:http://jsfiddle.net/LinkinTED/4a98c/

您可能希望在a:hover效果上显示子菜单,请检查http://jsfiddle.net/LinkinTED/4a98c/2/