Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 垂直和水平居中加载图像_Javascript_Html_Css_Alignment_Centering - Fatal编程技术网

Javascript 垂直和水平居中加载图像

Javascript 垂直和水平居中加载图像,javascript,html,css,alignment,centering,Javascript,Html,Css,Alignment,Centering,我想,一旦文件加载,中心的图像。这是陷阱。我的文档的宽度大于浏览器的高度,因此无法相对于文档垂直居中。我不能相对于浏览器高度将其垂直居中,因为如果用户在非全屏浏览器中打开文档,它的位置将不同于全屏 本质上,我需要一种方法,在全屏显示时将图像居中显示在浏览器屏幕上,即使文档在非全屏显示时打开 更新这是我试过的 我还将$window更改为$document,但由于我上面所述的原因,两者都不起作用。给图像一个50%的左上角,然后从边距中减去图像高度和宽度的一半,例如,如果您的横向图像是200px乘以1

我想,一旦文件加载,中心的图像。这是陷阱。我的文档的宽度大于浏览器的高度,因此无法相对于文档垂直居中。我不能相对于浏览器高度将其垂直居中,因为如果用户在非全屏浏览器中打开文档,它的位置将不同于全屏

本质上,我需要一种方法,在全屏显示时将图像居中显示在浏览器屏幕上,即使文档在非全屏显示时打开

更新这是我试过的

我还将$window更改为$document,但由于我上面所述的原因,两者都不起作用。

给图像一个50%的左上角,然后从边距中减去图像高度和宽度的一半,例如,如果您的横向图像是200px乘以100px,您将写入边距:-100px 0-50px,这将使图像完全居中


您可能还需要根据容器和首选项将position元素更改为fixed或absolute。

如@Shakesy所说,您需要使用innerHeight和innerWidth获取浏览器的画布尺寸。一旦获得,您可以使用以下工具水平定位图像:
innerWidth/2-imageWidth/2。另外,垂直位置可以设置为:innerHeight/2-imageHeight/2。您可以在页面加载后放置此选项。

第一个选项,使用用户3592733的JS部分回答:

Javascript

function initialize(imageWidth, imageHeight) {
el.style.top = ""+(( innerHeight / 2 ) - ( imageHeight / 2 ))+"px";
el.style.left = ""+(( innerWidth / 2 ) - ( imageWidth / 2 ))+"px";
}
initialize();
// will update when browser is resized
window.onresize = initialize;
或者第二个选项,使用CSS和display:table

主页

<style type="text/css">
.wrapperdiv {
position:absolute;
display:table;
width:100%;
height:100%;
}
.containerdiv {
display:table-cell;
text-align:center;
vertical-align:middle;
}
</style>
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="ifiedivdisplayinlineblock.css" />
<![endif]-->
</head>
<body>
<div class="wrapperdiv">
<div class="containerdiv">
content here
</div>
</div>

CSS有点痛苦,但我在我的页面上就是这样做的:我认为重新调整浏览器大小是由操作系统处理的,因此浏览器内部的内容不是由操作系统控制的,而是由浏览器本身呈现的。因此,换句话说,当浏览器感觉到用户正在重新调整它的大小时,它可以向javascript发送一个触发器,通知它这类事件。对于Mozilla,您可以尝试1

到目前为止您尝试了什么?你遇到了什么问题?你有什么可以分享的代码吗?也许设置一个JSFIDLE来展示这个问题?我更新了这个问题以包含我尝试过的内容。当页面加载的浏览器窗口不是全尺寸时,它就不起作用了。这一直是我的问题,只是为了清楚起见,为什么您的内容比文档要宽。innerHeight?您是否应该努力使您的内容适合文档?而不是更宽、更高。它是滚动密集型的。我知道上面的想法,但我正在制作一个带有滚动的网站。但这对我来说不是问题。这是因为当浏览器窗口不是全尺寸时加载它会使图像在该窗口上居中,这样当浏览器窗口是全尺寸时,图像会保持在原来的位置并且不奇怪。这是针对整个文档的,而我的文档比窗口大。我需要一个全尺寸窗口的中心,即使在窗口不是全尺寸时也能工作。css选项使用百分比,从我目前看到的情况来看,这不起作用。我也评论了innerheight和innerwidth的问题。
<style type="text/css">
.wrapperdiv {
position:absolute;
display:table;
width:100%;
height:100%;
}
.containerdiv {
display:table-cell;
text-align:center;
vertical-align:middle;
}
</style>
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="ifiedivdisplayinlineblock.css" />
<![endif]-->
</head>
<body>
<div class="wrapperdiv">
<div class="containerdiv">
content here
</div>
</div>
.wrapperdiv {
display:inline-block;
}