使用JavaScript在视口中将DIV居中

使用JavaScript在视口中将DIV居中,javascript,css,Javascript,Css,我正在尝试使用下面的代码在屏幕上居中显示一个DIV,但它对我不起作用。有人请建议我让它工作 var hnw = {}; hnw.w = 0; hnw.h = 0; if (!window.innerWidth) { if (!(document.documentElement.clientWidth == 0)) { hnw.w

我正在尝试使用下面的代码在屏幕上居中显示一个DIV,但它对我不起作用。有人请建议我让它工作

            var hnw = {};
            hnw.w = 0;
            hnw.h = 0;
            if (!window.innerWidth) {
                if (!(document.documentElement.clientWidth == 0)) {
                    hnw.w = document.documentElement.clientWidth;
                    hnw.h = document.documentElement.clientHeight;
                }
                else {
                    hnw.w = document.body.clientWidth;
                    hnw.h = document.body.clientHeight;
                }
            }
            else {
                hnw.w = window.innerWidth;
                hnw.h = window.innerHeight;
            }
            var midEle = document.createElement('div');
            var _x = 0;
            var _y = 0;
            var offsetX = 0;
            var offsetY = 0;
            if (!window.pageYOffset) {
                if (!(document.documentElement.scrollTop == 0)) {
                    offsetY = document.documentElement.scrollTop;
                    offsetX = document.documentElement.scrollLeft;
                }
                else {
                    offsetY = document.body.scrollTop;
                    offsetX = document.body.scrollLeft;
                }
            }
            else {
                offsetX = window.pageXOffset;
                offsetY = window.pageYOffset;
            }
            midEle.style.width = "300px";
            midEle.style.height = "300px";
            midEle.innerHTML = "Some Text";
            midEle.style.display = "block";
            var _x_w = parseInt(midEle.style.width, 10), _y_h = parseInt(midEle.style.height, 10);
            _x = ((hnw.w - _x_w) / 2) + offsetX;
            _y = ((hnw.h - _y_h) / 2) + offsetY;
            console.log(_x, " ", _y);
            midEle.style.position = "absolute";

            midEle.style.left = _x;
            midEle.style.top = _y;
            document.body.appendChild(midEle);

对于
left
top
样式属性,缺少
px
。值必须是
px
%

改变

  midEle.style.left = _x;
  midEle.style.top = _y;


演示:

这不能用CSS来代替吗

Javascript:

var midEle = document.createElement('div');
midEle.className = 'centered';
document.body.appendChild(midEle);
​CSS:

​.centered{ 
    background-color: red;
    height: 300px;
    width: 300px;
    margin: -150px 0 0 -150px;
    top: 50%;
    left: 50%;
    position: fixed;
}​


通过将边距设置为元素高度和宽度的负一半,并将“顶部”和“左侧”值设置为50%,您将使元素居中。这是一种使用CSS将内容居中的常用方法:)

如果您想使用普通JavaScript将内容居中于浏览器视口中,这里有一个演示


var mesr=
{
指标:{
px:1,
测量单位:功能(目标){
if(typeof(target)=“未定义”)
target=document.getElementsByTagName('body')[0];
测量单位(“em”,目标);
测量单位(“pt”,目标);
测量单位(“%,目标);
},
测量单位:功能(单位、目标){
if(typeof(target.Metrics)=“未定义”)
target.Metrics={};
var measureTarget=目标;
if(target.tagName='IMG'&&typeof(target.parentNode)!='undefined')
measureTarget=target.parentNode;
var measureElement=document.createElement(“div”);
measureElement.style.width=“1”+单位;
measureElement.style.cssFloat=“left”;
measureElement.style.styleFloat=“left”;
measureElement.style.margin=“0px”;
measureElement.style.padding=“0px”;
measureTarget.appendChild(measureElement);
target.Metrics[单位]=measureElement.offsetWidth;
measureElement.parentNode.removeChild(measureElement);
返回target.Metrics[单位];
},
getUnitPixels:函数(unitString,目标){
if(typeof(target)=“未定义”)
target=document.getElementsByTagName('body')[0];
if(typeof(target.Metrics)=“未定义”)
测量单位(目标);
var unit=unitString.replace(/[0-9\s]+/ig',).toLowerCase();
变量大小=数字(unitString.replace(/[^0-9]+/ig',);
if(typeof(target.Metrics[unit])==“未定义”)
返回0;
var metricSize=target.Metrics[单位];
var像素=数学地板(数字(公制尺寸*大小));
返回像素;
}
},    
getElementOffset:函数(目标){
var pos=[target.offsetLeft,target.offsetTop];
if(target.offsetParent!=null){
var offsetPos=mesr.getElementOffset(target.offsetParent);
pos=[
位置[0]+抵销位置[0],
位置[1]+抵销位置[1]
];
}
返回pos;
},
getElementPosition:函数(目标){
var offset=mesr.getElementOffset(目标);
var x=偏移量[0]+
mesr.Metrics.getUnitPixels(target.style.paddingLeft,target)+
mesr.Metrics.getUnitPixels(target.style.borderLeftWidth,target);
变量y=偏移量[1]+
mesr.Metrics.getUnitPixels(target.style.paddingTop,target)+
mesr.Metrics.getUnitPixels(target.style.borderTopWidth,target);
返回[x,y];
},    
getElementSize:函数(目标){
变量大小=[target.offsetWidth,target.offsetHeight];
大小[0]-=mesr.Metrics.getUnitPixels(target.style.paddingLeft,target)+
mesr.Metrics.getUnitPixels(target.style.paddingRight,target)+
mesr.Metrics.getUnitPixels(target.style.borderLeftWidth,target)+
mesr.Metrics.getUnitPixels(target.style.borderRightWidth,target);
大小[1]=mesr.Metrics.getUnitPixels(target.style.paddingTop,target)+
mesr.Metrics.getUnitPixels(target.style.paddingBottom,target)+
mesr.Metrics.getUnitPixels(target.style.borderTopWidth,target)+
mesr.Metrics.getUnitPixels(target.style.borderBottomWidth,target);
返回大小;
},
getViewPortSize:函数(){
var myWidth=0,myHeight=0;
if(typeof(window.innerWidth)=“number”){
myWidth=window.innerWidth;
myHeight=window.innerHeight;
}else if(document.documentElement&(document.documentElement.clientWidth | | document.documentElement.clientHeight)){
myWidth=document.documentElement.clientWidth;
myHeight=document.documentElement.clientHeight;
}else if(document.body&(document.body.clientWidth | | document.body.clientHeight)){
myWidth=document.body.clientWidth;
myHeight=document.body.clientHeight;
}
返回[myWidth,myHeight];
},
getViewPortScrollPosition:函数(){
变量scrOfX=0,scrOfY=0;
if(typeof(window.pageYOffset)=“number”){
scrOfY=window.pageYOffset;
scrOfX=window.pageXOffset;
}else if(document.body&(document.body.scrollLeft | | document.body.scrollTop)){
scrOfY=document.body.scrollTop;
scrOfX=document.body.scrollLeft;
}else if(document.documentElement&(document.documentElement.scrollLeft | | document.documentElement.scrollTop)){
scrOfY=document.documentElement.scrollTop;
scrOfX=document.documentElement.scrollLeft;
}
返回[scrOfX,scrOfY];
},
附件:函数(目标、事件列表、函数){
if(typeof(target)=“未定义”| | target==null)
返回;
var events=eventList.split(“,”);

对于(var i=0;我检查了代码,得到
​.centered{ 
    background-color: red;
    height: 300px;
    width: 300px;
    margin: -150px 0 0 -150px;
    top: 50%;
    left: 50%;
    position: fixed;
}​