我有一个html树,主要由嵌套的无序列表组成。
我需要为每个叶子创建一个全宽度悬停效果,类似于Windows文件菜单树悬停效果。
悬停效果是<div/>
,背景颜色和边框。
我制作了一个模拟全宽的黑客,但侧面边框不再可见。
我是否可以使用CSS技巧以保持悬停效果的横向边界并且仍具有全宽?
我制作了一个jsfiddle示例,因此更容易理解。
注意: 我无法更改html树结构或css,因为它是由第三方插件(kendo ui treeView)创建的,所以我需要找到一个使用我所拥有的解决方案。
CSS:
h6 { font-size: 16px; font-weight: normal; margin-bottom: 10px; margin-top: 0; }
.tree { width: 300px; border: 1px solid #000; padding: 10px; margin-bottom: 15px; }
.tree ul { margin: 0; padding: 0; list-style-type: none; }
.tree ul li { padding-left: 16px; }
.tree li .item { position: relative; }
.tree li .item .overlay
{ position: absolute; left: 0; top: 0; width: 100%; height: 100%;
background-color: #C5E7E6; display: none; border: 1px solid red; }
.tree li .item:hover .overlay { display: block; }
/*Full width hack*/
.tree.fullWidth { overflow: hidden; }
.tree.fullWidth li .item .overlay { left: -100px; width: 1000px; }
HTML
<h6>Normal overlay - not full width</h6>
<div class="tree">
<ul>
<li>
<div class="item">
Node 1
<div class="overlay"></div>
</div>
<ul>
<li>
<div class="item selected">
Node 2
<div class="overlay"></div>
</div>
</li>
</ul>
</li>
</ul>
</div>
<h6>Full width overlay (but side borders aren't visible anymore)</h6>
<div class="tree fullWidth">
<ul>
<li>
<div class="item">
Node 1
<div class="overlay"></div>
</div>
<ul>
<li>
<div class="item selected">
Node 2
<div class="overlay"></div>
</div>
</li>
</ul>
</li>
</ul>
</div>
答案 0 :(得分:0)
前几天我遇到了类似的情况。
这是接近它的一种方法(假设您已完全控制HTML)
<强> HTML 强>
<div class="tree relative">
<ul>
<li>
<div class="item">
<div class="overlay"></div>
<span class="relative">Node 1</span>
</div>
<ul>
<li>
<div class="item selected">
<div class="overlay"></div>
<span class="relative">Node 2</span>
</div>
</li>
</ul>
</li>
</ul>
</div>
<强> CSS 强>
.relative {
position:relative;
}
.tree {
width: 300px;
border: 1px solid #000;
padding: 10px;
margin-bottom: 15px;
}
.tree ul { margin: 0; padding: 0; list-style-type: none; }
.tree ul li { padding-left: 16px; }
/*.tree li .item { position: relative; }*/
.tree li .item .overlay {
position: absolute;
left: 0;
right:0;
/*
top: 0;
width: 100%;
height: 100%;
*/
height:26px; /* well, thats a bummer */
background-color: #C5E7E6;
display: none;
border: 1px solid red;
}
.tree li .item:hover .overlay { display: block; }
答案 1 :(得分:0)
解决方案只改变了#34; hack&#34;下的CSS部分。 我认为至少你可以改变
CSS
/*Full width hack*/
.tree.fullWidth { overflow: hidden; }
.tree.fullWidth li .item .overlay { right: -8px; width: 314px; left: auto !important; }
如果树的宽度可变,则更好:
.tree.fullWidth li .item .overlay {
right: -8px;
width: 300px;
padding-left: 14px;
left: auto !important;
}
它的工作方式与其他版本完全相同,但现在宽度与树宽度相同,因此Javascript不需要设置魔法宽度(您不需要&#39)不知道它来自哪里:
答案 2 :(得分:0)
我遇到了和你一样的问题,经过一些尝试和测试后,我想出了这个问题。它允许您添加滚动条并将填充放在内部。
<强> HTML 强>
<div class="tree" style="width:256px; height:256px;">
<div>
<ul>
<li>
<div><span>Lorem ipsum dolor sit amet, consectetur adipisicing elit</span></div>
</li>
<li>
<div><span>Lorem ipsum dolor sit amet, consectetur adipisicing elit</span></div>
<ul>
<li>
<div><span>Lorem ipsum dolor sit amet, consectetur adipisicing elit</span></div>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<强> CSS 强>
.tree {
position:relative;
display: block;
overflow: auto;
border: 1px solid #8B9097;
background-color: #fff;
margin-left:200px;
/*! margin-left: just for testing */
}
.tree > div {
display:block;
position:absolute;
min-width:100%;
}
.tree * {
white-space: nowrap;
}
.tree ul {
margin:0;
list-style-type: none;
padding-left: 20px;
}
.tree li > div {
position:relative;
margin-left:-100000px;
padding-left:100000px;
border: 1px solid transparent;
display:block;
}
.tree li div:hover {
background-color: #B6BABF;
color: #fff;
}
.tree li.collapsed > ul {
display:none;
}
.tree li.expanded > ul {
display:inherit;
}