3

我已经检查了这个大约两天了。

例子

这是一个相当复杂的设计,所以为了减少粘贴在这里的代码,我在这个 jsfiddle 上重新创建了主要结构,并在这篇文章的末尾包含了简化的代码:

http://jsfiddle.net/rwone/zwxpG/10/

设想

我有一个容器,<li>其中包含多个 div(包含来自数据库的动态内容),最初具有属性 display: none。

然而,在将鼠标悬停在这些图像上<li>时,我希望显示 div。

它正在工作,但是 div 似乎位于容器中具有固定高度和溢出-y:auto 的其他元素下方。

我试过的

我已经尝试过 z-index 以及绝对和相对定位的组合,但我还没有找到解决方案。

我在下面的代码和 jsfiddle(显示为/* comments */)中隔离了两个原因,但这些在实时测试站点上不起作用。

问题

因此,我的问题是,是否有另一种方法可以强制将悬停状态 div 显示在包含它的容器的顶部和外部?

这不是一个理想的解决方案,我可以在 jsfiddle 但不能在实时站点中解决这些问题,但我只是想问是否有另一种方法可以完全解决这个问题?

谢谢你。

html

<div id="wrapper">
<div id ="hbar_one"></div>
<div id="hbar_two"></div>
<div id="container_a">
<div  id="container_b">
<ul>
<li>
hover me #1
<div id="container_c">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In fringilla porttitor ante ut varius. Fusce volutpat velit ut orci porttitor cursus. Donec est eros, tempor ac elementum et, volutpat sit amet lorem. Mauris iaculis eros nec sapien hendrerit at sodales nibh iaculis. Morbi imperdiet porta est vitae suscipit. Curabitur sit amet diam in nulla consectetur placerat. Etiam in sapien ac mi scelerisque congue eu id lectus. Proin fermentum auctor turpis vel adipiscing. Maecenas at convallis sapien.
</div>
</li>
<li>
hover me #2
<div id="container_c">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In fringilla porttitor ante ut varius. Fusce volutpat velit ut orci porttitor cursus. Donec est eros, tempor ac elementum et, volutpat sit amet lorem. Mauris iaculis eros nec sapien hendrerit at sodales nibh iaculis. Morbi imperdiet porta est vitae suscipit. Curabitur sit amet diam in nulla consectetur placerat. Etiam in sapien ac mi scelerisque congue eu id lectus. Proin fermentum auctor turpis vel adipiscing. Maecenas at convallis sapien.
</div>
</li>
</ul>
</div>
</div>
<div id="hbar_three"></div>
<div id="hbar_four"></div>
</div>

css

#wrapper {
 width: 300px;   
}
#hbar_one {
 background: #cc0000;   
 height: 50px;
}

#hbar_two {
 background: #ffcc00;   
 height: 50px;
}

#container_b {
    height: 50px;
/* cause one - on its own, this causes the undesired 'underneath' effect */
    overflow-y: auto;
}

ul li {
    display: inline;
/* cause two - on its own, this causes the undesired 'underneath' effect */
    position: relative;   
}

#container_c {
    display: none;
}

ul li:hover #container_c {
 background: #00AFF0;
 display: block;
 width: 200px;
 height: 200px;
 position:absolute;
 top: -20px;
 left: 50px; 
 z-index: 999;  
overflow: hidden;    
}

#hbar_three {
 background: #cccccc;   
 height: 50px;
}

#hbar_four {
 background: #000000;   
 height: 50px;
}

更新

作为对下面答案的回应,这里是有关悬停时显示的实际内容的更多信息(#container_cdiv 中的所有内容)。每个<li>都有自己独特的内容:

​&lt;li class=".class1 .class2">
<img src="http://path/to/image.jpg">
<div id="container_c">
<h4>title</h4>
<div id="container_c_left">
<span id="cl1">text</span>
<span id="cl2">text</span>
<span id="cl3">text</span>
</div>
<div id="container_c_right">
<span id="cr1">text</span>
<span id="cr2">text</span>
</div>
<span id="cc1">text</span>
<span id="cc2"><a class= "linkclass" href="http://path/to/link.html">link</a></span>
</div>
</li>
4

3 回答 3

0

您一次只想显示其中一个悬停元素?

将单个 DIV 放在主体外部并使其隐藏。

然后每次将鼠标悬停在 LI 上时使用 javascript 调整其位置和内容。

无需为每个 LI 提供自己的 DIV。

将内容存储在数据属性中

<li id=something data-some-content="Hello joe">

然后你可以像这样用jQuery检索它

$("#something").data('some-content')
于 2012-11-14T04:06:17.133 回答
0

您的 CSS 样式是正确的,但在您的 HTML 中,您有两个无效的<div>元素id='container_c',ID 是唯一的,您不能为两个或多个元素提供相同的 id。如果你有两个或更多元素被赋予相同的样式,那么尝试class='container_c'在 CSS#container_c 中将.container_c

检查这个小提琴的固定版本 http://jsfiddle.net/DeepakKamat/zwxpG/13/

于 2012-11-14T04:12:33.407 回答
0

解决方案是@NoPyGod 的 jquery 建议的混合,并更好地了解绝对定位和相对定位的工作原理。

基本上,当绝对和相对定位应用于 div 时,此位置相对于定义了绝对或相对定位的最后一个元素的位置,并且是您正在使用的 div 的“容器”。

为了从溢出的“容器”中逃脱:自动和固定的高度和宽度,我必须将错误的定位移回到不受溢出和影响悬停状态 div 的高度和宽度限制的父 div。

一个工作的jsfiddle在这里:

http://jsfiddle.net/rwone/eeaAr/

我还实施了@Deepak Kamat 的建议,即每页只有一个 id,并将其余的 div 更改为由类标识。

我随后阅读了下面的文章,这次和在这种情况下工作后对我来说更有意义:

http://css-tricks.com/the-difference-between-id-and-class/

感谢大家的帮助!

html

<div id="wrapper">
<div id ="hbar_one"></div>
<div id="hbar_two"></div>
<div id="container_a">
<div id="container_b">
<div class="class1 class2 magic" data-unique-content=".hidden_db_data_div">
<img src="http://lorempixel.com/g/50/50/">
<div class="hidden_db_data_div">
some amazing html
</div>
</div>
<div class="class1 class2 magic" data-unique-content=".hidden_db_data_div">
<img src="http://lorempixel.com/g/50/50/">
<div class="hidden_db_data_div">
more amazing html
</div>
</div>
<div class="class1 class2 magic" data-unique-content=".hidden_db_data_div">
<img src="http://lorempixel.com/g/50/50/">
<div class="hidden_db_data_div">
even more amazing html
</div>
</div>
</div>
</div>
<div id="hbar_three"></div>
<div id="hbar_four"></div>
</div>

css

#wrapper {
width: 300px;   
}
#hbar_one {
background: #cc0000;   
height: 50px;
}

#hbar_two {
background: #ffcc00;   
height: 50px;
}

#container_b {
height: 100px;
overflow-y: auto;
}

.hidden_db_data_div {
display: none;
background: #00AFF0;
width: 120px;
height: 150px;
color: red;
position:absolute;
overflow: hidden; 
z-index: 999;  
}

img {
width: 50px;
height: 50px;
}

.magic {
display: inline;
}

#container_a { position:relative; }

#hbar_three {
background: #cccccc;   
height: 50px;
}

#hbar_four {
background: #000000;   
height: 50px;
}

脚本

$(".magic").hover(
function () {
$(this)
.find('.hidden_db_data_div')
.css({'left':$(this).position().left+20 + "px", 'top':'-20px'})
.fadeIn(200);
},
function() { 
$(this)
.find('.hidden_db_data_div')
.fadeOut(100);
}                
);
于 2012-11-14T17:23:02.027 回答