html - 带有显示 block 的 ul 不占用父元素的整个空间

标签 html css

我有一个 <ul><li> 树,可以在其中切换子项的可见性。 :hover 应该显示元素的整个宽度。为了说明问题,这些元素具有 orange 背景色。

现在你会看到最外面的 <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>

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

最佳答案

只需在 ul.tree 上使用 inline-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>

关于html - 带有显示 block 的 ul 不占用父元素的整个空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45675635/

相关文章:

php - 使用 CSS 的 CakePHP 电子邮件

html - Bootstrap 4.00 列不会换行

html - 如果 float 应用于子元素,CSS 样式会删除背景颜色

使用 Internet Explorer 为基于 Blogger 的网站修复 HTML/CSS 高度

javascript - 重置表单/从 jQuery 验证中删除错误类

html - Div 在缩小时向下移动

html - 无法使用没有 html 元素标记的 css 选择文本

html - mozilla 中的滚动条

javascript:如何中止 $.post()

html - 什么是 "data-effect"属性?