我尝试过很多不同的东西,但没有一个在起作用。
我有一张照片(假设未知的高度和宽度),我希望它居中(垂直和水平)。高度和宽度由窗口大小决定,但不得超过原始高度和/或宽度。
作为示例,当您双击图片时,可以查看 Windows Live照片库。这正是我需要的,在css / jquery中。我不知道如何在页面中调整图像以适应我想要的效果。
感谢您的帮助。
我不知道具体用语,因为英语不是我的母语。
答案 0 :(得分:3)
如果您事先知道图像的大小(在服务器端),最简单的方法是在渲染HTML时执行此操作;使用width
标记的height
和<img>
属性来设置其大小,并使用margin-left
和margin-top
将其置于容器中。这将使最终用户更好,因为在加载图像后重新调整大小的javascript端时他不会看到屏幕闪烁。这是迄今为止最好的方法。
编辑:如评论中所述,如果您使用服务器端解决方案,您可能仍希望在$(window).resize()上使用javascript解决方案,以便图像保持居中如果用户更改窗口的尺寸,则尺寸合适。
-
但是,由于你的问题是javascript,你需要分两步完成;首先减小图像的高度和宽度,以便在保持比率的同时不大于窗口,然后在第二次应用一些边距使其水平和垂直居中。
以下是一个如何实现您想要的示例,请注意,此代码显然未经过优化,可能不应该按原样使用,我将其留在“详细”中让它更容易理解的方法。
HTML:
<body>
<div id="main" style="margin: 0; padding: 0">
<img id="yourpic" src="http://domain.com/image.png" />
</div>
</body>
JS:
// we use the onLoad event so that your browser know the image dimension
$('#yourpic').load(function() {
// cache your objects
var $window = $(window);
var $this = $(this);
var tmp;
// if the image has too much width reduce it, keeping its ratio
if ($window.width() < this.width) {
tmp = [this.width, this.height];
$this.width($window.width());
$this.height(tmp[1] / (tmp[0] / this.width));
}
// same for its height
if ($window.height() < this.height) {
tmp = [this.height, this.width];
$this.height($window.height());
$this.width(tmp[1] / (tmp[0] / this.height));
}
// now center it horizontally
if ($window.width() > this.width) {
$this.css('margin-left', ($window.width() - this.width) / 2);
}
// and vertically
if ($window.height() > this.height) {
$this.css('margin-top', ($window.height() - this.height) / 2);
}
});
您可以在此处查看示例:http://jsfiddle.net/RPCjE/2/(chome img.onload事件为quite buggy,因此如果您使用此浏览器,则可能需要刷新而不使用缓存。)