9

我有一个<a>周围的 a<div>也有一些图像,一个<h2>和一段文字。<a>都是inline-block。_ 每当 H2 延伸到两条线时,下一条线<a>就会偏移。下面是一个截图。

看

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 属性来避免这种情况,那将非常有帮助。谢谢你。

4

1 回答 1

22

我猜那是因为您的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 */
}

一个工作示例

编辑

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

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

现在,想象以下情况:

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

当默认值打开element 1并且element 2将与其容器的基线对齐并且此基线更改 - 显然 - 根据容器的高度,最终由其子项的高度确定 - 如果未另行指定。

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

于 2012-08-24T16:43:15.083 回答