【问题标题】:Divs are overlapping on accidentdivs在事故中重叠
【发布时间】:2011-10-03 07:04:31
【问题描述】:

我的 mysql 数据库中有回显的帖子。如果有多个,它们会按照排名号递减的顺序在单独的 div 中回显(取自 DB)。但是,当 div 被回显时,所有重叠在顶部。我相信这是一个 CSS 问题。问题是每个 div 都有几个子 div。我认为“位置”属性可能促成了这一点。我希望每个 div 之间有大约 100px 的回声。谢谢。

代码:

$post = array();
$f=0;
while ($row=mysql_fetch_assoc($g)){
  $post[]=$row['post'];

  echo "<div id='area'>";
  echo "<div id='badge'><span style='color: gray;'>Answered by:</span>";
  include 'badge.php';
  echo "</div>";
  echo "<div id='areapost'><pre>$post[$f]</pre></div>";
  $f++;
}
echo "</div>"; /*end area*/

CSS 代码:

#area {
  background-color: #fff;
  border: 1px solid red;
  width:500px;
  height: 300px;
}

#badge{
  position: absolute;
  top: 0px;
  left: 0px;
}

#areapost{
  position: absolute;
  top: 0px;
  right: 0px;
  height: 300px;
  width: 380px;
  background-color: #E0E0E0;
  overflow: -moz-scrollbars-vertical;
  overflow-x: hidden;
  overflow-y: scroll;
}

“区域”是整个帖子容器。 areapost 和 badge 是“区域”内的元素

【问题讨论】:

    标签: php html spacing


    【解决方案1】:

    页面中的所有元素必须具有唯一的 id,否则会出现意外行为。 解决这个问题,看看它把你放在哪里。

    【讨论】:

    • 听起来是个不错的主意,但我该怎么做呢?可能的例子?
    • 首先将id 替换为class
    • 我应该使用class而不是id吗?
    • 位置如何:相对于 .area ?
    • 引用spec 中的一句话:“ID 类型属性的特别之处在于没有两个这样的属性可以具有相同的值;”
    【解决方案2】:

    尝试将开始的“区域”div标签移出条件:

     while ($row=mysql_fetch_assoc($g)){
        $post[]=$row['post'];
        echo "<div id='area'>";
    

    应该是:

    echo "<div id='area'>";
    while($row=mysql_fetch_assoc($g)){
         $post[]=$row['post']
    

    因为您希望区域包含其他所有内容

    【讨论】:

    • 每个帖子都应该在一个单独的.area 我没有所有帖子的容器
    • 在这种情况下,您应该将最后的结束标记
      移动到条件内部,因为每次循环时都应该关闭它。
    【解决方案3】:

    您几乎总是需要在同一循环级别打开和关闭 div。在这里,您在 while 循环内打开 &lt;div id='area'&gt; 并在 while 循环外关闭它。他们需要要么都进,要么都出。此外,您的 id 在整个页面上应该是唯一的,否则您应该在这些 div 上使用类。

    您也不需要绝对定位所有这些区域。我在所有内容上都添加了内容div。这个绝对定位,和区域类相对。您不需要 #area 的样式,将其更改为 .area

    $f=0;
    
    echo "<div id='content'>"
    while ($row=mysql_fetch_assoc($g)){
      $post[]=$row['post'];
    
      echo "<div id='area-'" + $f + " class='area'>";
      echo "<div class='badge'><span style='color: gray;'>Answered by:</span>";
      include 'badge.php';
      echo "</div>";
      echo "<div class='areapost'><pre>$post[$f]</pre></div>";
      echo "</div>"; /*end area*/
    
      $f++;
    }
    echo "</div>"
    

    【讨论】:

      【解决方案4】:

      还可以尝试使用相对定位,每个位置留出 100 像素的空间。这样每个 div 将相对于前一个 div 隔开,而不是一个点,从而导致它们重叠。

      【讨论】:

      • 如何添加 100px 间距。我已将区域设置为位置:相对
      • 我相信你的意思是给 .area div 的位置:相对,绝对正确。
      • margin-left:100px;会给左边一个 100px 的间距,从左到上、右或下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多