在大于 100% 的容器中居中 div
centering a div in a container larger than 100%
我需要在大于 100% 的容器中将 div 置于视口中心。
假设它有 160% 大,我准备了这个 fiddle:
https://jsfiddle.net/mz0bbz14/2/
通常我会选择:
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
但这只有在其容器 100% 大时才有效。
用这个css
解决了
position:absolute;
top:50%;
text-align: center;
transform:translate(0,-50%);
width: 100vw;
但是 vw
单元不适用于较旧的 android 浏览器,我需要支持它。我不能使用 jQuery 并且我不知道如何将它与纯 javascript.
居中
我尝试将 .div
设置为容器宽度的一半,但是 div 中的文本在视觉上没有居中。
我找不到解决办法。有任何想法吗?谢谢
如果您需要支持旧版浏览器,您应该使用 Javascript 来确保它可以正常工作,因为所有 CSS 解决方案都需要硬编码值。
var parent = document.querySelector('.cont-inner'),
child = parent.querySelector('div');
child.style.left = ((window.innerWidth / 2) - (child.offsetWidth / 2)) + 'px';
child.style.top = ((window.innerHeight / 2) - (child.offsetHeight / 2)) + 'px';
如果我对您的问题的理解正确,您希望红色 .div
位于父容器左侧 100% 的中心,父容器的宽度为视口的 160%。
在这种情况下,您需要将左偏移量调整为 100%/160% 的 50%,即 31.25%。
body,html {
height: 100%;
}
.cont-inner {
width:160%;
height: 100%;
background: hotpink;
position:relative;
}
.div {
position:absolute;
top:50%;
left: 31.25%;
transform:translate(-50%,-50%);
background:red;
padding:50px; /* smaller size for demo in snippet window */
}
<div class="cont-inner">
<div class="div">
asd
</div>
</div>
你需要换左边属性。
它需要在容器可见部分的中间。
因为是 160%,所以是
(100 / 160) * 0.5 -> 31.25%
body,html {
height: 100%;
}
.cont-inner {
width:160%;
height: 100%;
background: hotpink;
position:relative;
}
.div {
position:absolute;
top:50%;
left:31.25%;
transform:translate(-50%,-50%);
background:red;
padding:100px;
}
<div class="cont-inner">
<div class="div">
asd
</div>
</div>
;
我想用修改过的 left
属性 放置一个答案,但我已经看到它们了,所以这里有一些其他的尝试 position:static
从它的 div 中释放内部 div parent
https://jsfiddle.net/mz0bbz14/9/
它只是不强迫你坚持 160%。
我需要在大于 100% 的容器中将 div 置于视口中心。
假设它有 160% 大,我准备了这个 fiddle:
https://jsfiddle.net/mz0bbz14/2/
通常我会选择:
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
但这只有在其容器 100% 大时才有效。
用这个css
解决了 position:absolute;
top:50%;
text-align: center;
transform:translate(0,-50%);
width: 100vw;
但是 vw
单元不适用于较旧的 android 浏览器,我需要支持它。我不能使用 jQuery 并且我不知道如何将它与纯 javascript.
我尝试将 .div
设置为容器宽度的一半,但是 div 中的文本在视觉上没有居中。
我找不到解决办法。有任何想法吗?谢谢
如果您需要支持旧版浏览器,您应该使用 Javascript 来确保它可以正常工作,因为所有 CSS 解决方案都需要硬编码值。
var parent = document.querySelector('.cont-inner'),
child = parent.querySelector('div');
child.style.left = ((window.innerWidth / 2) - (child.offsetWidth / 2)) + 'px';
child.style.top = ((window.innerHeight / 2) - (child.offsetHeight / 2)) + 'px';
如果我对您的问题的理解正确,您希望红色 .div
位于父容器左侧 100% 的中心,父容器的宽度为视口的 160%。
在这种情况下,您需要将左偏移量调整为 100%/160% 的 50%,即 31.25%。
body,html {
height: 100%;
}
.cont-inner {
width:160%;
height: 100%;
background: hotpink;
position:relative;
}
.div {
position:absolute;
top:50%;
left: 31.25%;
transform:translate(-50%,-50%);
background:red;
padding:50px; /* smaller size for demo in snippet window */
}
<div class="cont-inner">
<div class="div">
asd
</div>
</div>
你需要换左边属性。
它需要在容器可见部分的中间。
因为是 160%,所以是
(100 / 160) * 0.5 -> 31.25%
body,html {
height: 100%;
}
.cont-inner {
width:160%;
height: 100%;
background: hotpink;
position:relative;
}
.div {
position:absolute;
top:50%;
left:31.25%;
transform:translate(-50%,-50%);
background:red;
padding:100px;
}
<div class="cont-inner">
<div class="div">
asd
</div>
</div>
;
我想用修改过的 left
属性 放置一个答案,但我已经看到它们了,所以这里有一些其他的尝试 position:static
从它的 div 中释放内部 div parent
https://jsfiddle.net/mz0bbz14/9/
它只是不强迫你坚持 160%。