我是否可以仅使用CSS完成此方案?
我有一个无序长度的元素列表,列在
的四个元素的网格中**** **** **** ****
* * * * * * * *
**** **** **** ****
**** **** ****
* * * * * *
**** **** ****
当用户将鼠标悬停在某个元素上时,会在该元素下方下拉一些其他内容并将其下方的行按下。
**** **** ---- ****
* * * * |^ | * *
**** **** ---- ****
-------------------
| Content is here |
-------------------
**** **** ****
* * * * * *
**** **** ****
主要的是下拉列表需要在宽度方面填充父容器。我使用position: absolute
并将<ul>
元素设为position: relative
来完成此操作。
我在想,也许有nth-child
的东西可能会基本上为邻居设置下边距并推动下层元素,但我不知道如何实现这一点。
如果可能的话,我试图避免在Javascript中执行此操作。
这是我到目前为止的一个小提琴:http://jsfiddle.net/pYw34/
答案 0 :(得分:1)
我希望这就是你想要的。
不是一个简单的规则:
.about__list__item:nth-child(4n):hover:after,
.about__list__item:hover + .about__list__item:nth-child(4n):after,
.about__list__item:hover + .about__list__item + .about__list__item:nth-child(4n):after,
.about__list__item:hover + .about__list__item + .about__list__item + .about__list__item:nth-child(4n):after
{
content: '';
float: left;
display: block;
width: 100px;
height: 90px;
background-color: yellow;
}
我将元素设置为黄色以跟踪它,当然该元素应该是不可见的。
答案 1 :(得分:0)
只要项目显示仅用于显示(即,我怀疑它可以被点击)并且可以作为触发事件的元素的子项放置,就不会有太多麻烦。
<强> HTML:强>
<div class='container'>
<ul class='mylist1'>
<li id='item1'>
item1
<div class='dynamic-content' style='background:blue;'>
Some content.
</div>
</li>
<li id='item2'>
item2
<div class='dynamic-content' style='background:green;'>
Some content.
</div>
</li>
<li id='item3'>
item3
<div class='dynamic-content' style='background:red;'>
Some content.
</div>
</li>
<li id='item4'>
item4
<div class='dynamic-content' style='background:orange;'>
Some content.
</div>
</li>
</ul>
<ul class='mylist2'>
<li>
item1
</li>
<li>
item2
</li>
<li>
item3
</li>
</ul>
</div>
<强> CSS:强>
.container {width:500px;padding:5px;}
.mylist1{margin:0px 0px 5px 0px;}
.mylist1 li, .mylist2 li {display:inline-block;cursor:pointer;padding:3px;border:solid 1px black;}
.dynamic-content {display:none;left:55px; margin-top:10px;position:absolute;padding:5px;border:solid 2px grey;color:#dedede;font-weight:bold;}
#item1:hover > div.dynamic-content {display:block;}
#item1:hover {margin-bottom:40px;}
#item2:hover > div.dynamic-content {display:block;}
#item2:hover {margin-bottom:40px;}
#item3:hover > div.dynamic-content {display:block;}
#item3:hover {margin-bottom:40px;}
#item4:hover > div.dynamic-content {display:block;}
#item4:hover {margin-bottom:40px;}
答案 2 :(得分:0)
CSS本质上不是一个功能性解决方案 - 没有充分的理由避免这个实现的javascript。
我通过将我的元素分成如下行来实现:
<div class="container">
<div class="row">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
<div class="row">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
...
</div>
查看完整实施: http://jsfiddle.net/n6Yz6/7/
在某些边缘案例中有点奇怪,但你应该能够从中得到这个想法。