9

我有以下代码:

<style>
    #items {width:300px;}
    .item {width:100px;border:solid 1px #ccc;float:left;height:20px;overflow:hidden;}
    .item:hover{height:auto}
</style>

<div id="items">
    <div class="item">text 1<br>text 1<br>text 1</div>
    <div class="item">text 2<br>text 2<br>text 2</div>
    <div class="item">text 3<br>text 3<br>text 3</div>
    <div class="item">text 4<br>text 4<br>text 4</div>
    <div class="item">text 5<br>text 5<br>text 5</div>
    <div class="item">text 6<br>text 6<br>text 6</div>
    <div class="item">text 7<br>text 7<br>text 7</div>
    <div class="item">text 8<br>text 8<br>text 8</div>
    <div class="item">text 9<br>text 9<br>text 9</div>
    <div class="item">text 10<br>text 10<br>text 10</div>
</div>

看看它在行动:http: //jsfiddle.net/6K7t4/

当一个 div id 悬停时,它应该扩展而不取代其他 div,如下所示: http ://shopping.kelkoo.co.uk/ss-shirt.html

另外,请建议如何实现跨浏览器解决方案。

如果可以使用纯 css 完成,我更喜欢该解决方案。

如果没有,是否可以在没有插件的情况下以简单的方式使用 jquery 来完成?

4

4 回答 4

16

看这个演示:http: //jsfiddle.net/6K7t4/24/

HTML:

<div id="items">    
    <div class="item"><div class="inner">text 1<br>text 1<br>text 1</div></div>
    <div class="item"><div class="inner">text 2<br>text 2<br>text 2</div></div>
    <div class="item"><div class="inner">text 3<br>text 3<br>text 3</div></div>
    <div class="item"><div class="inner">text 4<br>text 4<br>text 4</div></div>
    <div class="item"><div class="inner">text 5<br>text 5<br>text 5</div></div>
    <div class="item"><div class="inner">text 6<br>text 6<br>text 6</div></div>
    <div class="item"><div class="inner">text 7<br>text 7<br>text 7</div></div>
    <div class="item"><div class="inner">text 8<br>text 8<br>text 8</div></div>
    <div class="item"><div class="inner">text 9<br>text 9<br>text 9</div></div>
    <div class="item"><div class="inner">text 10<br>text 10<br>text 10</div></div>
</div>

CSS:

#items { 
     width:300px; 
}

.item { 
    width:100px; 
    border:solid 1px #ccc;
    float:left;
    height:20px;
    z-index:0;
    overflow:hidden;
    position:relative; 
}  

.item:hover {
    overflow:visible;
    z-index:100;
}

.item:hover .inner { 
    z-index: 100;
}

.inner { 
    position: absolute;
    background: white;
    width: 100%;
}

现在每个.item都相对定位,并且有新的子元素,其中包含所有内容。一旦 div 悬停,.item'soverflow:hidden将更改为overflow:visible并且 z-index of.inner设置为 100(以便将其显示在其他 div 上方)。

UPD:新的演示和更新的代码。对于 IE7(.item:hover 的 z-index 已更改,否则内部 div 隐藏.item在 IE7 中的其他 s 下方)

于 2012-11-29T16:28:20.123 回答
4

您可以child selector element通过添加另一个 div 来使用您想要选择的类。这是您在下面使用它更新的代码。希望这可以帮助!

<div id="items">
    <div class="item"><div class="item-extend"> 1<br>text 1<br>text 1</div></div>
    <div class="item"><div class="item-extend"> 2<br>text 2<br>text 2</div></div>
    <div class="item"><div class="item-extend"> 3<br>text 3<br>text 3</div></div>
    <div class="item"><div class="item-extend"> 4<br>text 4<br>text 4</div></div>
    <div class="item"><div class="item-extend"> 5<br>text 5<br>text 5</div></div>
    <div class="item"><div class="item-extend"> 6<br>text 6<br>text 6</div></div>
    <div class="item"><div class="item-extend"> 7<br>text 7<br>text 7</div></div>
    <div class="item"><div class="item-extend"> 8<br>text 8<br>text 8</div></div>
    <div class="item"><div class="item-extend"> 9<br>text 9<br>text 9</div></div>
    <div class="item"><div class="item-extend"> 10<br>text 10<br>text 10</div></div>
</div>

​</p>

 #items {width:300px;}
.item {width:100px;border:solid 1px #ccc;float:left;height:20px;overflow:hidden;}
.item:hover >.item-extend {position:absolute;width:100px;background:#fff;}

您可以在这里演示更新的代码:http: //jsfiddle.net/6K7t4/35/

更新:您甚至不必使用child selector element,而是可以:hover通过切换.item:hover >.item-extend.item-extend:hover. 以完全相同的方式工作。

于 2012-11-29T16:35:59.403 回答
3

您需要一个额外的 div 才能在里面保存一个绝对定位的 div。

HTML

<div id="items">
   <div class="itemHolder"><div class="item">text 1<br>text 1<br>text 1</div></div>
</div>

item 是绝对的,并且 itemHolder 浮动。

CSS

#items {width:300px; padding:30px;}

// Floats and hides content with height and overflow
.itemHolder {float:left; width:100px; border:solid 1px #ccc; height:20px; overflow:hidden; position:relative;}

// Absolute
.item {position:absolute; top:0; left:0; z-index:1; width:100%; background:#FFF; border:1px solid #999; border-top:0;}

// On hover we make the overflow visible and give the div to show a higher z index
.itemHolder:hover {overflow:visible;}
.itemHolder:hover .item {z-index:2;}

​ 现场解决方案:http: //jsfiddle.net/vWGCc/

:)

于 2012-11-29T16:42:55.023 回答
2

你可以用很少的 javascript 来实现它。见下文,

$('.item').hover(function () {
    var pos = $(this).position();        
    var $clone = $(this).clone();
    $clone.appendTo(this).addClass('item_clone').css({
        left: pos.left,
        top: pos.top
    });
}, function () {
    $('.item_clone', this).remove();
});

演示:http: //jsfiddle.net/6K7t4/32/

注意:检查其他基于 CSS 的答案,这总是比通过脚本实现更好。

于 2012-11-29T16:34:01.913 回答