css - 具有多个嵌套级别的分层列表,水平布局 : have parent accommodate to childres width

标签 css

我有一个极其嵌套的、分层的列表(它包含有关物种排序的生物数据)。请参阅示例,其中我仅选择了可能的 10 个嵌套级别中的三个。

我想水平显示此列表,作为旋转 90 度的组织结构图。

Example of the hierarchical list

当我为每个子 ul 应用宽度时,我可以获得精确正确的布局。幸运的是,树是由 JavaScript 生成的,并且应用内联样式很容易。 (因此:)

                    <ul  class="wrapper" style="width: 120px;">

但是,我真的很想摆脱这些内联样式,因为没有它们,树的整个管理会变得容易得多。 (考虑显示/隐藏子级别甚至删除完整组织级别的可能性)

正如您在 fiddle 中看到的那样,删除内联样式宽度是行不通的。这很奇怪,因为我设置了标签的宽度。 如何让父 div 适应子元素的宽度,无论它们嵌套的深度如何

关于堆栈溢出,已经提出了几个类似的问题。这些建议设置float: leftposition:relative。但是,太糟糕了,它不起作用......

http://jsfiddle.net/ideogram/27kNA/5/ (没有内联样式)

http://jsfiddle.net/ideogram/zFMyZ/2/ (使用内联样式)

基本上,我的问题归结为:在下面的 css/html 中,如何在保持所需布局的同时摆脱内联宽度?

<head>  

    <style type="text/css">
        .label{
            width: 120px;
            text-align: center;
        }

        .wrapper{
            display: inline-block;
            vertical-align: middle;
            padding-left: 0;
        }

        .label, .wrapper{
            display: inline-block;
            vertical-align: middle;
            width: 110px;

        }

        .taxon{
            display: inline-block;
            overflow: hiden;
            outline: 1px dotted #ddd;
            margin: 5px 0;
            text-align: left;
        }
    </style>

<ul class="wrapper" style="width: 360px;">
    <li class="taxon ">
        <div class="label">Balaenopteridae</div>
        <ul class="wrapper" style="width: 240px;">
            <li class="taxon ">
                <div class="label">Balaenoptera</div>
                <ul  class="wrapper" style="width: 120px;">
                    <li class="taxon">
                        <div class="label">Balaenoptera acutorostrata</div>
                    </li>
                    <li class="taxon">
                        <div class="label">Balaenoptera borealis</div>
                    </li>
                    <li class="taxon">
                        <div class="label">Balaenoptera edeni</div>
                    </li>
                </ul>
            </li>
            <li class="taxon">
                <div class="label">Megaptera</div>
                <ul  class="wrapper" style="width: 120px;">
                    <li class="taxon">
                        <div class="label">Megaptera novaeangliae</div>
                    </li>
                    <li class="taxon">
                        <div class="label">Megaptera whatever</div>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

最佳答案

按如下方式更新您的选择器并删除任何定义的宽度。关键点是同族的 display: table-cell et al
fiddle 样本: http://jsfiddle.net/pLUns/

.label{
    border-radius: $taxon-margin;
    text-align: center;
}

.wrapper{
    vertical-align: middle;
}

.label, .wrapper{
    display: table-cell;
    vertical-align: middle;             
}

.taxon{
    display: table-row;
    overflow: hidden;
    outline: 1px dotted #ddd;
    text-align: left;
    border-spacing: 5px;
}

关于css - 具有多个嵌套级别的分层列表,水平布局 : have parent accommodate to childres width,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21877693/

相关文章:

javascript - Chrome 与 IE 中的定位元素

javascript - 如何使用查询更改 tinymce 背景 onchange 的颜色

jquery - 列表子元素上的框阴影行为

html - 响应式设计中 div 的垂直居中

javascript - 如何使网页中的文本在特定时间更改颜色?

javascript - Flex 包装器使 TextInput 在其父级之外呈现

css - 如何避免在主菜单中显示元素符号

html - 如何仅使用 CSS 每两个字母做字母间距?

css - 为什么有时使用高度/行高的垂直居中不起作用?

未应用 CSS 属性