div里面的H2内联块奇怪的偏移量

时间:2012-08-24 16:30:38

标签: offset css

<a>周围有<div>,其中还有一些图像,<h2>和一段文字。 <a>全部为inline-block。每当H2延伸到两行时,下一个<a>就会偏移。以下是截图。

See "nutrition" and "enzymes"

HTML:

<a href="#">
    <div>
        <div class="imgOverflow">
           <img src="/hello/there">
        </div>
        <h2>This is the title</h2>
        <p>This is a paragraph</p>
    </div>

</a>

CSS:

a {
    display:inline-block;
    font-size:16px;
    border:1px solid grey;
    width:260px;
    margin:5px;
    color:black;
    overflow: hidden;
}
div {
    display:block;  
    padding:5px;
    width:250px;
    height:300px;
}   
p {
    font-size:12px;
    text-align:justify;
 }
h2 {
    margin:5px 0 10px 0;
    font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
}
.imgOverflow {
    margin:-5px 0 0 -5px;
    width:260px;
    padding:0;
    overflow:hidden;
    height:130px;
    display:block;
}       

如果有人知道某种CSS属性以避免这种情况会非常有帮助。谢谢。

1 个答案:

答案 0 :(得分:18)

我想这是因为你的a元素垂直对齐到底部,而你的一些h2元素跨越两行,而最后一行只有一行。试试这个:

a { 
display:inline-block;
font-size:16px;
border:1px solid grey;
width:260px;
margin:5px;
color:black;
overflow: hidden;
vertical-align: top; /* Notice this line */
}

A working example

修改

此编辑是在imray的问题之后进行的。

我已经在Ubuntu 12.04 LTS - Chrome 33.0.1750.152中再次测试了这段代码近2年后这个问题得到了回复,并发现 - 现在 - 当您删除vertical-align属性时,代码倾向于也工作。但是,如果您删除overflow属性,那么您将看到显示中断。

现在,想象一下以下情况:

This is our container:
------------------------------------------------
|                     Element 2:               |
|    Element 1:       --------------------     |
|    -------------    | Lorem ipsum dolor|     |
|    | Lorem ips |    | sit amet         |     |
|    -------------    --------------------     |
------------------------------------------------

当默认值为element 1element 2将与其容器的基线对齐时,此基线会发生变化 - 显然 - 根据容器的高度,最终由容器确定他们孩子的身高 - 如果没有说明的话。

显然,到撰写本文时 - 由于浏览器的css实现往往会随时间而变化,删除vertical-align: bottom并离开overflow: hidden似乎会使代码生效 - 而不是在其他浏览器中测试 - ,但是再简单地将它们对齐到顶部,应该完全解决问题,因为当你对齐顶部时,下一行中的元素将对齐到线的顶部。