使用图像和height: 100%
. 这肯定会使框与图像具有相同的纵横比,但无论出于何种原因,都不会在窗口调整大小时重新排列框。
这是一个带有稍微干净的 CSS 和 Javascript hack 的演示,用于修复窗口调整大小时的回流。
在演示中,我使用 16px x 9px 数据 uri 图像来设置纵横比,防止不必要的 HTTP 请求。如果您需要不同比例的图像,请使用此站点将您的图像转换为数据 uri:http ://dataurl.net/#dataurlmaker
我设法用非常基本的 jQuery 解决了重排问题。在 上$(window).resize()
,我在 body 上切换了一个类,该类使比率图像从哪个类text-align: left
变为text-align: justify
欺骗浏览器重排框的类。
浏览器支持
适用于 Chrome、Safari、Mobile Safari、Firefox 和 IE9+。调整大小总体上非常流畅,但 Safari 有点口吃。
IE6/7 不支持display: inline-block
所以框是 100% 宽度和正确的高度。(不是一个糟糕的后备!)
IE8 正确调整了框的高度,但宽度仅与原始图像一样宽(16 像素)。我发现的唯一方法是使用 HTML5Boilerplate 样式的 IE 条件标签将嵌入父级设置为display: block
喜欢这个演示
仅 CSS
如果您必须有一个纯 CSS 的解决方案,在比例图像上设置动画以切换少量填充在 Chrome、Safari 和 Firefox 中有效。然而,这不断地迫使浏览器重新渲染页面布局,与仅在窗口调整大小时渲染页面布局相比,这非常低效。
.Ratio { animation: myfirst 1s infinite; }
@keyframes myfirst {
from { padding-top: 1px; }
to { padding-bottom: 1px; }
}
希望有帮助!