8

如何防止相对定位的 div 下推后面的内容?在下面的示例中,我试图在较大的红色 div 上显示一个小的绿色 div,但是当绿色 div 出现时,下一个红色 div 被推下。

如果有更好的方法可以做到这一点,我会很感激提示。

这是一个运行示例:http: //jsfiddle.net/38Rqh/

<html>
<head>
<style type="text/css" media="screen">

.top {
  display: none;
  background-color: green;
  width: 100px;
  position: relative;
  top: -50px;
}

.bottom {
  width: 200px;
  height: 200px;
  background-color: red;
  border: 1px solid black;
}

.bottom:hover + div {
    display: block;
}

</style>
</head>
<body>

<div class="bottom">

</div>
<div class="top">Displaying data</div>

<div class="bottom">

</div>
<div class="top">Displaying data</div>

<div class="bottom">

</div>
<div class="top">Displaying data</div>

</body>
</html>
4

2 回答 2

7

relative仍然占用空间。你需要的是absolute. 一种可能性是将.bottom元素设置为position: relative,然后将.top元素放置在其中并绝对定位它们。

http://jsfiddle.net/38Rqh/1/

.top {
  display: none;
  background-color: green;
  width: 100px;
  position: absolute;
  top: 150px;
}

.bottom {
  width: 200px;
  height: 200px;
  background-color: red;
  border: 1px solid black;
    position: relative;
}

.bottom:hover .top {
    display: block;
}
<div class="bottom">
<div class="top">Displaying data</div>
</div>

<div class="bottom">
<div class="top">Displaying data</div>
</div>

这样,.top元素将相对于它们的包含来定位.bottom

这有一个额外的好处,即.top当悬停在.top自身上时不会隐藏,导致您在示例中看到的闪烁。

于 2012-11-08T20:25:49.097 回答
2

我可能把它和应该出现的地方混在一起了,但是使用包装器 div 和绝对位置而不是相对位置会消除额外的空间。

<html>
<head>
<style type="text/css" media="screen">

.top {
  display: none;
  background-color: green;
  width: 100px;
  position: absolute;
  bottom: 50px;
}

.bottom {
  width: 200px;
  height: 200px;
  background-color: red;
  border: 1px solid black;
}

.bottom:hover + .top {
    display: block;
}

.wrapper { position: relative; }

</style>
</head>
<body>

<div class="wrapper">
  <div class="bottom">

  </div>
  <div class="top">Displaying data</div>
</div>
<div class="wrapper">
  <div class="bottom">

  </div>
  <div class="top">Displaying data</div>
</div>
<div class="wrapper">
  <div class="bottom">

  </div>
  <div class="top">Displaying data</div>
</div>
</body>
</html>
于 2012-11-08T20:21:24.230 回答