html - 将嵌套 ul 放置在右侧

标签 html css

我目前正在构建一个自定义导航下拉菜单,为此我想将由父 li 包装的 ul 放在其父级旁边。

导航将在第一个级别周围有一个边框,该边框还应包含其他级别。 将 ul absolute 定位到下一个级别 ul 会做一些工作,但不是按照要求。 fiddle 在底部。

Default view:

- Level 1
- Level 1
    - Level 2
        - Level 3
        - Level 3
    - Level 2
    - Level 2
    - Level 2
- Level 1

Desired output:

- Level 1    - Level 2    - Level 3
- Level 1    - Level 2    - Level 3
- Level 1    - Level 2
             - Level 2

Example:

-------------------------------
| Level 1 | Level 2 | Level 3 |
| Level 1 | Level 2 | Level 3 |
| Level 1 | Level 2 |         |
|         | Level 2 |         |
-------------------------------

基本语法:

<ul>
    <li>Level 1</li>
    <li>
        Level 1
        <ul>
            <li>
                Level 2
                <ul>
                    <li>Level 3</li>
                    <li>Level 3</li>
                </ul>
            </li>
            <li>Level 2</li>
            <li>Level 2</li>
            <li>Level 2</li>
        </ul>
    </li>
    <li>Level 1</li>
</ul>

Minified current solution

最佳答案

如果不使用 JavaScript 或修改 DOM 结构,我认为这是不可能的。

您想要它做的是删除布局,以便所有 LI 彼此相邻,但是您还想保留它,以便保持整个容器的高度。

因此,这是一个有效的 JavaScript 解决方案:http://jsfiddle.net/w8oe59rp/8/

var arrUL = document.querySelectorAll('ul'),
    MaxHeight = 0;
for (var i = 0; i < arrUL.length; i++) {
    var intHeight = arrUL[i].offsetHeight;
    if (intHeight > MaxHeight) {
        MaxHeight = intHeight;   
    }
}
document.querySelector('.main').style.height = MaxHeight + 'px'
* {
    box-sizing:border-box;
}
ul {
    list-style: none;
    padding: 8px 16px;
    margin-top: -1px;
    width: 15em;
    margin-bottom: 0;
}
li {
    width: 5em;
}
.main {
    float:left;
    position:relative;
    border: 1px solid;
}
.main:before {
    content:"";
    border-left:1px solid;
    top:0;
    left:33.33%;
    height:100%;
    position:absolute;
}
.main:after {
    content:"";
    border-left:1px solid;
    top:0;
    right:33.33%;
    height:100%;
    position:absolute;
}
ul ul {
    position:absolute;
    top:0;
    left:33.33%;
    width:5em;
}
ul ul ul {
    left:100%;
}
<ul class="main">
    <li>Level 1</li>
    <li>Level 1
        <ul>
            <li>Level 2
                <ul>
                    <li>Level 3</li>
                    <li>Level 3</li>
                </ul>
            </li>
            <li>Level 2</li>
            <li>Level 2</li>
            <li>Level 2</li>
        </ul>
    </li>
    <li>Level 1</li>
</ul>

关于html - 将嵌套 ul 放置在右侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31264235/

相关文章:

html - 如何防止屏幕阅读器在不暂停的情况下阅读列表项的全部内容?

jquery - 单选按钮切换功能

html - 并排视差图像,同时保持纵横比

html - 我应该在 HTML 中使用 % 还是 'px'

javascript - 尽管使用了 on(),但在将元素添加到 DOM 后,Jquery 单击事件不会触发

html - 盒子里面的 bool 玛水平溢出

CSS - IE 中的渐变

html - border-radius 在 MacOS/-webkit- 中不工作

php - Bootstrap 导航、旋转木马和页脚中出现的垂直滚动条

css - django 添加样式表到站点