Jquery 即使在重新调整车窗尺寸后,也要对中绝对定位DIV(用于响应性设计)

Jquery 即使在重新调整车窗尺寸后,也要对中绝对定位DIV(用于响应性设计),jquery,css,responsive-design,Jquery,Css,Responsive Design,我想在屏幕中间保留一个绝对定位的DIV#box,即使在窗口重新调整大小后,也可以用于所有主要设备(响应式设计)。响应#框使用css3媒体查询完成,而left使用jquery计算。但我可以把我的盒子精确地放在中间,在小屏幕的窗口重新调整大小时,左右边距是不相等的 <HTML> <body> <div id ="box"> <a> is am athe centre?'</a> </div> <

我想在屏幕中间保留一个绝对定位的DIV
#box
,即使在窗口重新调整大小后,也可以用于所有主要设备(响应式设计)。响应#框使用css3媒体查询完成,而
left
使用jquery计算。但我可以把我的盒子精确地放在中间,在小屏幕的窗口重新调整大小时,左右边距是不相等的

<HTML>

<body>
    <div id ="box">
      <a> is am athe centre?'</a>
    </div>
</body>



</HTML>
jQuery:

function leftmargin(){
 var w_box    =  ($('#box').width());
 var w_window = $(window).width();
 var w_left = (w_window - w_box)/2 ;
 $("#box").css("left", w_left + "px");
}

$(window).resize(function() {
   leftmargin();
});

$(document).ready(function() {
   leftmargin();
});

您只需添加此项,甚至不需要媒体查询或javascript(因为您知道框的大小):

如果您不知道宽度,但可以只针对支持transform的现代浏览器,请将
边距替换为:

transform: translate(-50%, -50%);

您只需添加此项,甚至不需要媒体查询或javascript(因为您知道框的大小):

如果您不知道宽度,但可以只针对支持transform的现代浏览器,请将
边距替换为:

transform: translate(-50%, -50%);

%
中的
宽度和
高度

看这把小提琴:

我补充说:

body{
    width: 100%;
    margin: 0 auto;
}
#box {
      position:absolute;
      background:red; 
      width:80%; 
      height:40%;
      margin-left: 10%;
      margin-top: 20%;
}

%
中的
宽度和
高度

看这把小提琴:

我补充说:

body{
    width: 100%;
    margin: 0 auto;
}
#box {
      position:absolute;
      background:red; 
      width:80%; 
      height:40%;
      margin-left: 10%;
      margin-top: 20%;
}

不太确定您想要什么,将绝对定位的div居中是很容易的,但这与响应性设计和可变宽度/高度有关吗

我能想到的最好方法是使用显示表格单元格:

html {
    display: table;
    width: 100%;
    height: 100%;
}
body {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: 100%;
    height: 100%;
}

#box {
    display: inline-block;
    background: #c00;
}

不太确定您想要什么,将绝对定位的div居中很容易,但响应性设计和可变宽度/高度是什么

我能想到的最好方法是使用显示表格单元格:

html {
    display: table;
    width: 100%;
    height: 100%;
}
body {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: 100%;
    height: 100%;
}

#box {
    display: inline-block;
    background: #c00;
}

使用CSS()将方框居中,然后调整媒体查询中的
宽度和
左边距:

#box {
    position:absolute;
    border:1px solid red;
    width:760px;
    height:30px;
    background:yellow;
    left: 50%;
    margin-left:-380px; /* half of the box */
}
@media only screen and (min-width: 768px) and (max-width: 979px) {
    #box {
        background:pink;
    }
}
@media only screen and (min-width: 480px) and (max-width: 767px)  {
    #box {
        width:460px;
        background:black;
        margin-left:-230px;
    }
}
@media only screen and (min-width: 321px) and (max-width: 479px)  {
    #box {
        width:300px;
        background:blue;
        margin-left:-150px;
    }
}
@media only screen and (max-width: 320px) {
    #box {
        background:grey;
    }
}
在此演示,拖动内部框架边界以“模拟设备尺寸”:

基于JavaScript的解决方案:


答复你的问题:

左边距
是根据框的宽度计算的,因此这与任何视口或窗口的宽度无关。我从您的评论中猜测,框只差了一些像素(您应该更清楚地说明这一点,以便更好地帮助我们)。jQuery的
宽度
将返回宽度“无”滚动条,因此它会根据内容的高度(即,是否有滚动条)进行更改。您可以尝试在获取宽度之前暂时“隐藏”滚动条:
document.body.style.overflow=“hidden”
。但通常,我会说返回的
.width()值
应该是您要找的。这就是您要找的吗?

使用CSS()将方框居中,然后调整媒体查询中的
宽度和
左边距:

#box {
    position:absolute;
    border:1px solid red;
    width:760px;
    height:30px;
    background:yellow;
    left: 50%;
    margin-left:-380px; /* half of the box */
}
@media only screen and (min-width: 768px) and (max-width: 979px) {
    #box {
        background:pink;
    }
}
@media only screen and (min-width: 480px) and (max-width: 767px)  {
    #box {
        width:460px;
        background:black;
        margin-left:-230px;
    }
}
@media only screen and (min-width: 321px) and (max-width: 479px)  {
    #box {
        width:300px;
        background:blue;
        margin-left:-150px;
    }
}
@media only screen and (max-width: 320px) {
    #box {
        background:grey;
    }
}
在此演示,拖动内部框架边界以“模拟设备尺寸”:

基于JavaScript的解决方案:


答复你的问题:



左边距
是根据框的宽度计算的,因此这与任何视口或窗口的宽度无关。我从您的评论中猜测,框只差了一些像素(您应该更清楚地说明这一点,以便更好地帮助我们)。jQuery的
宽度
将返回宽度“无”滚动条,因此它会根据内容的高度(即,是否有滚动条)进行更改。您可以尝试在获取宽度之前暂时“隐藏”滚动条:
document.body.style.overflow=“hidden”
。但通常,我会说返回的
.width()值
应该是您要找的。这就是您要找的吗?

对于固定宽度和高度的大屏幕来说,这是可以的;但是对于响应性设计来说,我的#框具有可变宽度和高度。然后使用第二个选项。即使您使用高度和宽度的百分比,它也可以工作。媒体查询和转换具有相同的浏览器设置是的,因此您可以轻松地在不支持转换的旧浏览器上使用javascript。这对于具有固定宽度和高度的大屏幕来说是可行的;但是对于响应性设计来说,具有可变宽度和高度的my#box则是可行的。然后使用第二个选项。即使您使用高度和宽度的百分比,它也可以工作。媒体查询和转换具有same browser share,因此您可以轻松地将javascript用于不支持转换的旧浏览器。感谢您的建议aayushi!但我希望使用精确宽度,而不是百分比宽度。好的,检查更新的小提琴,更改
宽度:900px和高度:450px;
并进行测试。效果很好!因为宽度与w成比例窗口宽度。但在我的情况下,框的宽度是针对不同的屏幕大小的。谢谢你的建议阿尤什!但我想坚持精确的宽度,而不是百分比宽度。好的,检查更新的小提琴,然后更改
宽度:900px和高度:450px;
并测试。它工作得很好!因为宽度与窗口宽度成比例。但是在我的ca中不同屏幕大小的se框宽度不同。请参阅我的css3媒体查询!对于不同的屏幕大小,我的#框具有不同的宽度(宽度根据屏幕大小而变化)。因此,我想为所有屏幕大小将我的#框居中。您可以使用媒体查询,上面的设置应将任何宽度/高度的
#框
居中…请参阅我的css3媒体查询!对于不同的屏幕大小,我的#框具有不同的宽度(宽度根据屏幕大小而变化)。因此,我想为所有屏幕大小将我的#框居中。您可以使用媒体查询,上面的设置应将任何宽度/高度的
#框
居中…感谢您的回答!这与我实际需要的接近。这在特定屏幕大小上效果很好。但我想使用jquery实现左边距,因此即使在单像素上也可以重新调整我的div框始终保持在中心。这就是
左:50%
的实际操作。当视口宽度更改1px时,框的宽度是否会更改?然后查看我的JavaScript解决方案