代码之家  ›  专栏  ›  技术社区  ›  Tom Ritter

符合/不符合垂直对齐的浮动沙发

css
  •  6
  • Tom Ritter  · 技术社区  · 16 年前

    在垂直对齐的表格单元格中:底部,我有一个或两个div。每个分区都向右浮动。
    按理说,潜水器不应该与底部对齐,但确实如此(我不明白,但很好)。
    但是,当我在单元格中有两个浮动分隔符时,它们将自己与相同的顶行对齐。
    我要第一个小点的DIV一直坐在底部。另一个可接受的解决方案是使表单元达到最大高度。

    很难解释,所以代码如下:

    <style type="text/css"> 
    table {
       border-collapse: collapse;
    }
    td {
       border:1px solid black;
       vertical-align:bottom;
    }
    .h {
       float:right;
       background: #FFFFCC;
    }
    .ha {
       float:right;
       background: #FFCCFF;
    }
    </style> 
    
    <table> 
      <tr> 
        <td> 
          <div class="ha">@</div> 
          <div class="h">Title Text<br />Line 2</div> 
        </td> 
        <td> 
          <div class="ha">@</div> 
          <div class="h">Title Text<br />Line 2<br />Line 3</div> 
        </td> 
        <td> 
          <div class="h">Title Text<br />Line 2</div> 
        </td> 
        <td> 
          <div class="h">Title Text<br />Line 2</div> 
        </td> 
        <td> 
          <div class="h">Title Text<br />Line 2</div> 
        </td> 
      </tr> 
      <tr> 
        <td> 
          <div class="d">123456789</div> 
        </td> 
        <td> 
          <div class="d">123456789</div> 
        </td> 
        <td> 
          <div class="d">123456789</div> 
        </td> 
        <td> 
          <div class="d">123456789</div> 
        </td> 
        <td> 
          <div class="d">123456789</div> 
        </td> 
      </tr> 
    </table> 
    

    问题如下:

    1. 为什么@符号和黄色的分隔符在同一水平?
    2. 假设垂直对齐不适用于块元素(如浮动的DIV)1。但确实如此!
    3. 我如何才能让@坐在底部或使它成为表单元的全高?

    我正在测试IE7和FF2。目标支持是IE6/7,FF2/3。

    澄清: 目标是让红色@位于表格单元格的底行, 下一个 到黄色盒子。在任何一个DIV上使用CLEAR将把它们放在不同的行上。 此外,单元格可以有可变的文本行-因此, 线高 无济于事。

    5 回复  |  直到 14 年前
        1
  •  8
  •   David Alpert    16 年前

    我发现这篇文章对于理解和排除垂直对齐非常有用:

    Understanding vertical-align, or "How (Not) To Vertically Center Content"

        2
  •  2
  •   Tom Ritter    16 年前

    我从来没有回答前两个问题,所以请在下面自由回答。但我 解决最后一个问题,如何使其工作。

    我在表格单元格内的两个div中添加了一个containing div,如下所示:

    <table>
      <tr>
        <td>
          <div class="t">
            <div class="h">Title Text<br />Line 2</div>
            <div class="ha">@</div>
          </div>
        </td>
    

    然后我用了下面的CSS

    <style type="text/css">
    table {
      border-collapse: collapse;
    }
    td {
      border:1px solid black;
      vertical-align:bottom;
    }
    .t {
      position: relative;
      width:150px;
    }
    .h {
      background: #FFFFCC;
      width:135px;
      margin-right:15px;
      text-align:right;
    }
    .ha {
      background: #FFCCFF;
      width:15px;
      height:18px;
      position:absolute;
      right:0px;
      bottom:0px;
    }
    </style>
    

    关键是 对于一个DIV来说,绝对是相对于它的位置 起源 父级必须声明为position:relative

        3
  •  0
  •   PhiLho    16 年前

    添加 clear: both 到第二个元素。如果您希望@位于黄色框的下方,请将其最后放在HTML代码中。

        4
  •  0
  •   Matthew Rapati    16 年前

    如果你不想两个div都在同一条线上,那就不要把它们都浮起来。 如果您将@放在标记中文本的下方,然后将浮动设置为“清除”,它会将其放在文本的下方。

        5
  •  0
  •   nymacro    16 年前

    http://www.w3.org/TR/CSS2/visudet.html#line-height

    此属性影响由内联级别元素生成的框的线框内的垂直定位。以下值仅对父内联级别元素或父块级别元素具有意义(如果该元素生成匿名内联框);如果不存在此类父级,则它们不起作用。

    在CSS中,垂直对齐属性总是很混乱,因为在大多数情况下,它不会像您期望的那样做。这是因为它与valign不同,这在许多HTML 4标记中都是允许的。

    有关更多信息,请查看:

    http://www.ibloomstudios.com/articles/vertical-align_misuse/ http://www.ibloomstudios.com/articles/applied_css_vertical-align/

    大卫阿尔珀特发布的链接在这件事上非常有用。