将文本垂直对齐到左侧的浮动图像

Posted

技术标签:

【中文标题】将文本垂直对齐到左侧的浮动图像【英文标题】:Vertical Align Text to a Floated Image that is on the Left 【发布时间】:2014-11-17 21:39:29 【问题描述】:

现在我知道发布了类似的问题,但我正在寻找像素完美的解决方案。

沙盒:http://jsfiddle.net/unqc4a0f/1/

试图解决的问题:

尝试的代码:

.mifloat:left; width:150px;height:200px;padding-right:10px;/*margin-top:3px;*/
.mtfloat:left; width:400px;margin:0;

过去,我使用填充/边距技巧将图像或文本对象向下推几个像素,以使它们在顶部边缘视觉上对齐。视觉上我的意思是我知道字体有大小和行高,但即使考虑到这一点,实际字体字符的高度也可能包含一些空间。您可以在上面的示例中看到这一点。我还 - 基于此处的其他线程 - 尝试使用 line-height,虽然这确实实现了像素完美对齐,但它破坏了整个段落的垂直行距。

我的问题本质上是继续使用填充/边距黑客还是有更“合法”的解决方案。我问这个关于构建响应式布局然后没有统一布局问题的问题。

提前致谢。

【问题讨论】:

我认为除了您目前正在进行的像素争吵之外,别无选择。 【参考方案1】:

意识到这是一个老问题,但是......

在 CSS 中,可以使用 ::before 元素为其添加一个负的 margin-top 值。

具体来说,我想分享这个 Interactive Text-Crop tool 我发现它有助于为此目的创建一个 SASS 混合。

此工具的要点是您从 (font-size * line-height) 中删除大写高度,然后除以 2。但这是对您的字体可能或可能不是结构的简化。

实际上 - 没有“像素完美”的答案,因为归根结底,字体的物理结构并不总是与其font-size 匹配,并且相同字体大小的不同字体系列仍然可以看起来更高或更短。

【讨论】:

【参考方案2】:

使用display:table; 布局代替float 以获得完美的内联放置和垂直对齐。

它只需要你将它们包装在一个元素中......

Updated JSFiddle

.wrapper 
    display: table;


.miwidth:200px;height:200px;display: table-cell;
.mtdisplay: table-cell;vertical-align:middle;
<div class="wrapper">
    <img src="http://www.thehollywoodnews.com/wp-content/uploads/2839335-morgan_freeman_wallpaper_4_normal.jpg" class="mi">
    <p class="mt">Join me in San Diego at the Global Event for Data-Driven Engagement Marketers. DMA is doing great work to protect marketers around the world, come and hear from leading marketers how DMA is enabling them to NOT MARKET ALONE</p>
</div>

【讨论】:

嗨 LcSalazar,您的示例没有解决我的问题,文本没有将像素完美地对齐到图像的顶部。我在 chrome 上,这就是我 seeing【参考方案3】:

空间应该在那里,它通常来自你需要的行高。如果你的字体大小是 14px 并且你将 linee-height 减少到 11px 你会看到间隙会从顶部消失,但是文本会看起来很狭窄..

有时要获得完美的像素,您必须像使用图像上的边距一样进行调整..

【讨论】:

以上是关于将文本垂直对齐到左侧的浮动图像的主要内容,如果未能解决你的问题,请参考以下文章

如何垂直对齐浮动图像旁边的文本?

将左浮动 div 中的图像与右浮动 div 上的文本垂直对齐

垂直对齐位于浮动同级旁边的 Div 中的多行文本

根据浮动图像的高度垂直对齐div中的文本

浮动后对齐中心项目

在浮动 div 附近垂直对齐文本