如何对齐浮动元素以使其底部匹配

Posted

技术标签:

【中文标题】如何对齐浮动元素以使其底部匹配【英文标题】:How to align floated elements such that their bottoms match 【发布时间】:2011-07-08 15:04:12 【问题描述】:

我正在编写一个网页,在其中显示标题和日期。

Blog post header http://filesmelt.com/dl/head00.png

我的 html

<div class="post">
    <h2>Post 1</h2>
    <span class="date">February 28, 2011</span>

    <div class="post-content">
        ...
    </div>
</div>

我的 CSS:

.post h2

    float: left;


.date

    float: right;


.post-content

    clear: both;

我想要做的是垂直对齐标题和日期,使其底部匹配。现在他们没有:

Blog post header with alignment lines http://filesmelt.com/dl/head01.png

我尝试将两个文本元素包装在一个 div 中,将 div 的 position 设置为 relative,并在两个文本元素上使用绝对定位(并取出浮动声明)。这不起作用,因为由于包装器 div 折叠而没有保留上边距,即使我给了它一个 clearfix 类。

【问题讨论】:

下面的许多答案告诉您通过为填充/行高应用静态数字来纠正差异,我认为这是一个不好的解决方案。如果您使用静态数字“纠正”差异,并且将来差异发生变化,您必须更改所有静态数字。想象一下,您对 Data div 应用了填充,然后 h2 的字体大小发生了变化,您必须更改填充。 【参考方案1】:

在某些情况下,您还可以通过在 h2 中放置一个浮动和清除的跨度来完成此操作:

<h2>Actual header text
<span style="display: inline-block; float: right; clear: both;">Some floated content</span>
</h2>

这个跨度将与 h2 的底部对齐。在里面,你可以为所欲为;当页面缩小时,浮动内容将整齐地放在标题文本下方。

【讨论】:

【参考方案2】:

许多其他答案告诉您通过为填充/行高应用静态数字来纠正差异,我认为这是一个不好的解决方案。如果您使用静态数字“纠正”差异,并且将来差异发生变化,您必须更改所有静态数字。想象一下,您对 Date div 应用填充,然后 h2 的字体大小发生变化,您必须更改填充。

试试这个:

<div class="wrapper">
 <h2>Post 1</h2>
 <span class="date">February 28, 2011</span>
</div>

还有css:

.post h2 
    display: inline-block;


.wrapper 
  position: relative;


.date 
    display: inline-block;
    position: absolute;
    right: 0;
    bottom: 0;

【讨论】:

非常干净的方法。绝对定位的缺点是如果水平宽度管理得不够好,它允许两个元素重叠。你最喜欢的保持空间足够大的方式是什么? 如果您可以为两个子元素(h2 和 span)添加宽度(百分比),则无需使用绝对定位并停止重叠。【参考方案3】:

这应该可以解决它

.date

float: right;
line-height:150%;

【讨论】:

【参考方案4】:

尝试为 h2 和 span 指定 line-height

Syntax:     line-height: <value>;
Possible Values:    

    * normal
    * <length> - for example, 10px
    * <number> - multiplied with the current font size
    * <percentage> - for example, 130% of current font size
    * inherit

例如:

h2, span.date 
  line-height: 20px;

您可能还需要设置:

span.date
   display:block;

这是一个类似的问题 Vertically align floating DIVs

【讨论】:

【参考方案5】:

我知道很多人会不同意,而且有点冗长,但&lt;table&gt; 可以很好地解决这个问题:

/*CSS Somewhere*/
table width:100%;
td vertical-align:bottom;

<!--HTML-->
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
   <td align="left">
     <h2>Post 1</h2>
   </td>
   <td align="right">
     <span>Feb...</span>
   </td>
 </tr>
</table>

【讨论】:

我们都知道这一点,但是用于布局的表格是不行的。如果他需要切换日期和标题的位置怎么办?通过对 css 规则的一些更改,他将完成,使用表格,而不是他将不得不编辑每一页的代码。表格应该仅作为最后的手段,当所有其他解决方案都失败时 哇~如果我们在谈论硬编码,我 100% 同意。我习惯于使用服务器端/动态生成的 HTML~ 你引用的编辑类型要简单几个数量级。 您可以使用 display: table; display: table-row;display: table-cell; 并且在语义上仍然准确。【参考方案6】:

对类 Date 使用 padding-top

.date

    float: right;
    padding-top:15px;//Distance between the red lines in second image

【讨论】:

不是一个好计划,如果h2 的字体大小稍后改变怎么办?您必须更改填充以匹配新的差异。 那么div的高度和宽度应该是恒定的。

以上是关于如何对齐浮动元素以使其底部匹配的主要内容,如果未能解决你的问题,请参考以下文章

垂直对齐内容与浮动元素 + 响应式布局

浮动理解

如何使浮动元素列表跳过居中元素(脊柱对齐/中心标记)?

如何底部对齐不等高度的内联元素?

如何将引导卡中的元素与卡底部对齐?

如何在引导流体布局中底部对齐网格元素