浮动Divs服从/不服从垂直对齐
在一个vertical-align:bottom的表单元格中,我有一两个div。每个div都向右浮动。
据说,div不应与底部对齐,但它们可以对齐(我不理解,但是很好)。
但是,当我在单元格中有两个浮动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>
这里是问题:
- 为什么@符号与黄色div位于同一水平?
- 假定垂直对齐不适用于块元素(例如div浮动),但实际上适用!
- 如何使@坐在底部或者使其完全位于表格单元格的高度?
我正在IE7和FF2中进行测试。目标支持是IE6 / 7,FF2 / 3.
说明:目标是在表格单元格的底行上的红色@旁边的黄色框旁边。在任何一个div上使用clear会将它们放在不同的行上。
此外,单元格可以具有可变的文本行,因此,行高将无济于事。
解决方案
在第二个元素上添加" clear:both"。如果要@放在黄色框下方,请将其放在HTML代码的最后。
如果我们不希望两个div都在同一行,则不要将它们都浮动。
如果将@放在标记中的文本下方,然后将浮点数设置为"清除",则会将其置于文本下方。
我发现本文对于了解垂直对齐和对其进行故障排除非常有用:
了解垂直对齐或者"如何(不)使内容垂直居中"
http://www.w3.org/TR/CSS2/visudet.html#line-height This property affects the vertical positioning inside a line box of the boxes generated by an inline-level element. The following values only have meaning with respect to a parent inline-level element, or to a parent block-level element, if that element generates anonymous inline boxes; they have no effect if no such parent exists.
CSS中的vertical-align属性总是令人困惑,因为在大多数情况下,它无法实现我们期望的功能。这是因为它与valign不同,valign在许多HTML 4标签中都是允许的。
有关更多信息,我们可以签出:
http://www.ibloomstudios.com/articles/vertical-align_misuse/
http://www.ibloomstudios.com/articles/applied_css_vertical-align/
David Alpert发布的链接在此问题上非常有用。
我从未回答前两个问题,因此请在下面提供答案。但是我确实解决了最后一个问题,即如何使其工作。
我在表单元格的两个div中添加了一个包含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