在有人问我为什么要这么做之前,让我直接告诉你。那样你们其中一个聪明的偷看就可以告诉我一个更好的方法......
我正在制作一个能够拉伸以填充页面的绘画阅读器,确保屏幕高度的90%。我希望将这些画作一个接一个地淡化,并希望将它们中心放在屏幕中间。
为了让画作相互褪色,我需要将它们定位为“绝对”以阻止它们堆叠。这就是问题所在。自从我将它们设置为绝对值以来,我使用的每个方法都不能使用包含div的方法。
部分问题在于我没有为绘画设置任何宽度,因为我希望它们动态调整大小以填充用户屏幕的90%。
我找到了数百种集中绝对内容的方法,并且相信我可能需要缩小包含div的内容。但是到目前为止我还没有取得任何成功。
HTML -
<div id="viewer_div">
<img src="" id="first" />
<img id="second" class="hidden"/>
</div>
样式表
#viewer_div {
width:1264px;
}
img {
height:90%;
display:block;
margin-left: auto;
margin-right:auto;
}
上面给出了我想要的效果,但不允许我将图像放在绝对位置。任何人都可以建议一种使图像居中的方法,但也允许我淡化一个在另一个上面吗?
答案 0 :(得分:51)
按left
的宽度推送元素50%
,然后50%
水平翻译它对我有用。
.element {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
我在以下链接中找到了这个概念,然后我翻译为符合我的水平对齐需求:https://gist.github.com/colintoh/62c78414443e758c9991#file-douchebag-vertical-align-css
答案 1 :(得分:39)
使用JavaScript计算宽度并移动它,
使用CSS hack将元素左右移动50%,
或者不要绝对定位它。
这个答案非常简短,但它确实很重要。如果您需要集中某些东西(意味着您希望浏览器确定中心点的位置,并将其放置在那里),那么您就不能使用绝对定位 - 因为这会从浏览器中取消控制权。
要使画作相互褪色,我需要定位它们 “绝对”阻止他们堆叠。
这就是你的问题所在。你假设你需要绝对定位的原因是错误的。
如果您在将元素放置在彼此之上时遇到问题,将图像包装在一个绝对定位的容器中,该容器的宽度为100%且具有text-align: center
如果您确实认为必须进行绝对定位,可以使用以下黑客来达到您想要的效果:
div {
position: absolute;
/* move the element half way across the screen */
left: 50%;
/* allow the width to be calculated dynamically */
width: auto;
/* then move the element back again using a transform */
transform: translateX(-50%);
}
显然上面的hack有一个糟糕的code smell,但它适用于某些浏览器。请注意:对于其他开发人员或其他浏览器(尤其是IE或移动设备)而言,此hack并不一定是显而易见的。
答案 2 :(得分:5)
要取消Samec的答案,您还可以使用它来将未知尺寸的垂直和水平绝对位置元素居中:
#viewer_div {
position: relative;
}
#viewer_div img {
position: absolute;
left: 50%;
top: 0%;
transform: translate(-50%, 50%);
}