我研究过一个基于 jQuery 的解决方案——虽然可能不如 gilly3 发布的那么优雅;)而且它也更慢而且有点臃肿......
我的技巧是将两个 s 附加<div>
到该部分,该部分向左浮动,隐藏宽度为 0。其中一个 div 是一个指定的与图像具有相同尺寸的幽灵元素,将位于另一个 div 下方那是指定的高度垫片。该脚本使用while 循环来确定ghost 元素是否已到达父节元素的底部。如果这没有发生,它会将高度垫片的高度增加 1,直到满足条件。
我使用的标记如下。我正在使用 HTML5 属性data-bottom-image
来识别您将图像浮动到底部的部分。当然它是可有可无的,这取决于您要如何选择正确的部分元素。
<section id="c1" data-bottom-image>
<h2>...</h2>
<p>...</p>
<img src="http://placehold.it/250x100" />
</section>
和 jQuery 脚本:
$(function () {
$("section > img:last-child").each(function () {
// Offset image based on the bottom and right padding of parent
var $par = $(this).parent();
$(this).css({
bottom: $par.css('padding-bottom'),
right: $par.css('padding-right')
});
});
// Function: adjust height of height-spacer, pixel by pixel
function adjustHeightSpacer($par, $hs, $is) {
// Stretch height spacer
$hs.height(0);
$hs.css({
height: $par.find("img").position().top - parseInt($par.css('padding-top'))
});
// Adjust height spacer
while($par.height() - $is.height() > $is.position().top - parseInt($par.css('padding-top'))) {
$hs.height("+=1");
}
while($par.height() - $is.height() < $is.position().top - parseInt($par.css('padding-top'))) {
$hs.height("-=1");
}
};
$("section[data-bottom-image]").each(function() {
// Append two spacers:
$(this).prepend('<div class="ghost height-spacer" /><div class="ghost image-spacer" />')
var $hs = $(this).find(".height-spacer"),
$is = $(this).find(".image-spacer");
// Adjust image spacer dimension
$is.css({
height: $(this).find("img").height(),
width: $(this).find("img").width()
});
// Adjust height spacer
adjustHeightSpacer($(this), $hs, $is);
});
$(window).resize($.debounce(250,function() {
$("section[data-bottom-image]").each(function() {
// Adjust height spacer
adjustHeightSpacer($(this), $(this).find(".height-spacer"), $(this).find(".image-spacer"));
});
}));
});
这里是工作小提琴:http: //jsfiddle.net/teddyrised/xmkAP/5/