使用JavaScript在视口中将DIV居中
我正在尝试使用下面的代码在屏幕上居中显示一个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
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;
}