【问题标题】:Stretching treeview items width to parent container in CSS/HTML在 CSS/HTML 中将树视图项的宽度拉伸到父容器
【发布时间】:2016-02-05 02:06:26
【问题描述】:

我正在开发左侧菜单的树视图组件(见截图):

树形视图中的所有项目都必须是可选择的。我为项目设置了 100% 的宽度,当我在突出显示区域的树宽度小于左侧面板中选择项目时:

但突出显示区域的宽度等于左侧面板的宽度。我知道它可以通过对突出显示区域进行边距和填充操作来实现,例如:

{
margin: 0 -400px;
padding: 0 400px;
} 

但是会导致水平滚动条:

是否有任何“聪明”的方法可以使突出显示的区域延伸到容器(左侧面板)?

【问题讨论】:

  • 你有你尝试过的代码吗?
  • @cakan 这是一个例子 jsfiddle.net/gf2pa4qn 。这很混乱,因为我从页面复制并粘贴标记,但问题在这里可见。如果问题不能解决,我会尝试稍后准备简单的小提琴

标签: javascript html css treeview


【解决方案1】:

width: 100% 和/或max-width: 100% 某些人(例如 LI)不适合时,每个孩子都应该适合其父母。

要得到你想要的结果,每个项目都需要规则:

  • white-space: nowrap(所以它不会换到下一行)
  • overflow: hidden(剪掉多余的文字)
  • width: 100%(延伸到父母)

以下 sn-p 有两个示例:使用 UL/LI 和 DIV

html,
body {
  /*UPDATE*/
  box-sizing: border-box;
  height: 100%;
  width: 100%;
  overflow: hidden
}
*,
*:before,
*:after {
  box-sizing: inherit
}
/* { outline: 1px dotted red } /* for debug */

ul,
li {
  list-style: none;
  margin: 0;
  padding: 0;
}
.side-panel {
  max-width: 200px;
  padding: 4px;
  border: 1px solid rgba(0, 0, 0, .2)
}
ul,
.treeview {
  max-width: 100%;
  text-align: right;
}
li,
.item {
  height: 23px; /*ADD*/
  width: 100%;
  white-space: nowrap;
  overflow: hidden;
  margin: 5px 0; /*ADD*/
}
li:hover,
.item:hover { /*ADD*/
  height: 23px;
  text-align: left;
  border: 1px dashed cornflowerblue;
  cursor: pointer
}
li:nth-child(even),
.item:nth-child(odd) {
  background: rgba(0, 255, 0, 0.1)
}
li:nth-child(odd),
.item:nth-child(even) {
  background: rgba(0, 0, 255, 0.1)
}
<div class="side-panel">
  <h3>example with UL/LI</h3>
  <ul>
    <li>some item 1</li>
    <li>some item 2</li>
    <li>some item 3</li>
    <li>some item 4fgdfg g</li>
    <li>some item 5 sad d fd</li>
    <li>some item 6 sdtresertg zdf dfsfd</li>
    <li>some item 7</li>
  </ul>
</div>
<div class="side-panel">
  <h3>example with DIV's</h3>
  <div class="treeview">
    <div class="item">some item 1</div>
    <div class="item">some item 2</div>
    <div class="item">some item 3</div>
    <div class="item">some item 4fgdfg g</div>
    <div class="item">some item 5 sad d fd</div>
    <div class="item">some item 6 sdtresertg zdf dfsfd</div>
    <div class="item">some item 7</div>
  </div>
</div>

【讨论】:

  • 感谢您的回复,但我真的不明白您的解决方案在这种情况下有何帮助。我已经使用 div 的jsfiddle.net/yzqLgrjb 自定义了您的示例:添加了嵌套树视图并稍微增加了填充以使其更清晰。现在我们为侧面板设置了 10px 的内边距,为每个树视图设置了 10px 的内边距。您会看到树视图项的宽度小于侧面板的宽度,但我需要让它相等。
  • 当我做对了,你需要删除 .treeview 填充(无论如何,只是为了演示)或更改为 padding: 0(在 UL 的情况下),我会调整我的回答反映了这一点......默认大多数开发人员添加UL,LI {list-style: none; margin: 0; padding: 0 } 以防止不需要的HTML默认行为。
  • 当您从具有子项的项目中删除 .item 类时,您的小提琴和我的新代码将起作用。例如“某些项目 7”。检查我的小提琴 (jsfiddle.net/renevanderlende/yzqLgrjb/7)
  • 实际上我需要填充树视图内容 - 它显示了层次结构,这是主要问题。如何将树视图项目宽度拉伸到侧面板宽度并保存视觉层次结构?请记住一个文件资源管理器的示例(例如在 Windows 中),当文件夹相互嵌套并且每个级别都向右移动一点时。我需要同样的screencast.com/t/j7omGZSKD679。注意:我希望宽度完全等于侧面板宽度,仅适用于悬停/选定的项目,但它不应该破坏树视图层次结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2012-12-22
  • 1970-01-01
  • 2012-03-08
  • 2014-08-15
  • 1970-01-01
  • 2013-07-29
相关资源
最近更新 更多