2017-08-14 50 views
0

我有一个<ul><li>树,其中可以切换子级的可见性。 :hover应显示元素的整个宽度。为了说明问题,这些元素具有orange背景色。ul与显示块没有占用父元素的整个空间

现在你会看到最外面的<ul class="tree">不会占用父母的整个空间。

.tree在现实生活中有一些原因,.tree位于可调整大小的区域内。这也是使用overflow-x: scroll;的原因和

padding-left: 2000px; 
margin-left: -2000px; 

再次获取与背景颜色装饰整个元素的原因。

此外,我需要使用white-space: nowrap;原因每个<li>应该只占用一条线,并占用足够的空间宽度,因为它需要。

.grid { 
 
    width: 200px; 
 
} 
 

 
.box { 
 
    width: 100%; 
 
    height: 100%; 
 
    overflow-x: scroll; 
 
    border: solid 1px fuchsia; 
 
} 
 

 
ul.tree { 
 
    display: block; 
 
    width: 100%; /* makes nothing */ 
 
    border: solid 1px lime; 
 
} 
 

 
ul.tree, 
 
ul.tree ul, 
 
ul.tree li { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 

 
ul.tree ul { 
 
    margin: 0 0 0 20px; 
 
} 
 

 
ul.tree a { 
 
    white-space: nowrap; 
 
    display: block; 
 
    padding: 5px; 
 
    padding-left: 2000px; 
 
    margin-left: -2000px; 
 
    margin-bottom: 5px; 
 
    color: #000; 
 
    background-color: orange; 
 
}
<div class="grid"> 
 
    <div> 
 
    <div class="box"> 
 
     <ul class="tree"> 
 
     <li> 
 
      <a href="#">xxx</a> 
 
      <ul> 
 
      <li> 
 
       <a href="#">xxx xxx</a> 
 
       <ul> 
 
       <li> 
 
        <a href="#">xxx xxx xxx</a> 
 
        <ul> 
 
        <li> 
 
         <a href="#">xxx xxx xxx</a> 
 
         <ul> 
 
         <li> 
 
          <a href="#">xxx xxx xxx xxx 123456 7890</a> 
 
         </li> 
 
         </ul> 
 
        </li> 
 
        </ul> 
 
       </li> 
 
       </ul> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    </div> 
 
</div>

所以我需要的是橙色走一路的紫红色边框,而不是停止石灰边界结束的地方。我怎样才能做到这一点?

回答

2

只需使用上ul.treeinline-blockmin-width 100%(它会在IE浏览器一样)

.grid { 
 
    width: 200px; 
 
} 
 

 
.box { 
 
    width: 100%; 
 
    height: 100%; 
 
    overflow-x: scroll; 
 
    border: solid 1px fuchsia; 
 
} 
 

 
ul.tree { 
 
    display: inline-block; 
 
    min-width: 100%; 
 
    border: solid 1px lime; 
 
} 
 

 
ul.tree, 
 
ul.tree ul, 
 
ul.tree li { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 

 
ul.tree ul { 
 
    margin: 0 0 0 20px; 
 
} 
 

 
ul.tree a { 
 
    white-space: nowrap; 
 
    display: block; 
 
    padding: 5px; 
 
    padding-left: 2000px; 
 
    margin-left: -2000px; 
 
    margin-bottom: 5px; 
 
    color: #000; 
 
    background-color: orange; 
 
}
<div class="grid"> 
 
    <div> 
 
    <div class="box"> 
 
     <ul class="tree"> 
 
     <li> 
 
      <a href="#">xxx</a> 
 
      <ul> 
 
      <li> 
 
       <a href="#">xxx xxx</a> 
 
       <ul> 
 
       <li> 
 
        <a href="#">xxx xxx xxx</a> 
 
        <ul> 
 
        <li> 
 
         <a href="#">xxx xxx xxx</a> 
 
         <ul> 
 
         <li> 
 
          <a href="#">xxx xxx xxx xxx 123456 7890</a> 
 
         </li> 
 
         </ul> 
 
        </li> 
 
        </ul> 
 
       </li> 
 
       </ul> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    </div> 
 
</div>

+0

@caramba'inline-block'是更好的解决方案,您应该选择此解决方案。 –

+0

谢谢你@AbhishekPandey,谢谢你Karthik! – caramba

1

你可以通过简单地使树解决这个问题,以适应内容宽度

.grid { 
 
    width: 200px; 
 
} 
 

 
.box { 
 
    width: 100%; 
 
    height: 100%; 
 
    overflow-x: scroll; 
 
    border: solid 1px fuchsia; 
 
} 
 

 
ul.tree { 
 
    display: block; 
 
    width: fit-content; 
 
    border: solid 1px lime; 
 
} 
 

 
ul.tree, 
 
ul.tree ul, 
 
ul.tree li { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 

 
ul.tree ul { 
 
    margin: 0 0 0 20px; 
 
} 
 

 
ul.tree a { 
 
    white-space: nowrap; 
 
    display: block; 
 
    padding: 5px; 
 
    padding-left: 2000px; 
 
    margin-left: -2000px; 
 
    margin-bottom: 5px; 
 
    color: #000; 
 
    background-color: orange; 
 
}
<div class="grid"> 
 
    <div> 
 
    <div class="box"> 
 
     <ul class="tree"> 
 
     <li> 
 
      <a href="#">xxx</a> 
 
      <ul> 
 
      <li> 
 
       <a href="#">xxx xxx</a> 
 
       <ul> 
 
       <li> 
 
        <a href="#">xxx xxx xxx</a> 
 
        <ul> 
 
        <li> 
 
         <a href="#">xxx xxx xxx</a> 
 
         <ul> 
 
         <li> 
 
          <a href="#">xxx xxx xxx xxx 123456 7890</a> 
 
         </li> 
 
         </ul> 
 
        </li> 
 
        </ul> 
 
       </li> 
 
       </ul> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    </div> 
 
</div>

+0

谢谢!就是这样,只要我可以 – caramba

+1

,这将无法在IE和Edge中工作。请参阅[我可以使用](https://caniuse.com/#search=fit-content) –