HTML树全宽度悬停效果

时间:2014-01-30 08:03:29

标签: html css css3

我有一个html树,主要由嵌套的无序列表组成。

我需要为每个叶子创建一个全宽度悬停效果,类似于Windows文件菜单树悬停效果。

enter image description here

悬停效果是<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>

3 个答案:

答案 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; }

小提琴:http://jsfiddle.net/Varinder/5fKP4/2/

答案 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; }

demo

如果树的宽度可变,则更好:

.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;
}

http://jsfiddle.net/WknDZ/17/