我的转换属性有问题。有一个position: absolute
的框。要把它放在父div的中心,我使用transform: translate(-50%, -50%)
因为在实际项目中我有自适应页面。所以,我不能使用px和负边距。
此外,我想应用zoomIn动画,并看到动画行transform: translate(-50%, -50%)
无法正常工作。我想,这是因为双重转换属性。
我该如何解决?
这是Codepen https://codepen.io/pndparade/pen/VKGXPj
上的示例html,
body{
height: 100%;
margin: 0;
padding: 0;
}
.box{
height: 100%;
width: 100%;
background: red;
position: relative;
}
.box-in{
width: 200px;
height: 200px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background: #fff;
animation-duration: 1.5s;
animation-delay: 0.8s;
animation-fill-mode: both;
animation-name: zoomIn;
animation-iteration-count: infinite;
}
@keyframes zoomIn {
from {
opacity: 0;
-webkit-transform: scale3d(.3, .3, .3);
transform: scale3d(.3, .3, .3);
}
50% {
opacity: 1;
}
to {
-webkit-transform: scale3d(1, 1, .1);
transform: scale3d(1, 1, 1);
}
}
答案 0 :(得分:0)
你可以在左右两个位置使用calc:
left:calc(50% - 100px);
top: calc(50% - 100px);
当您需要较旧的浏览器支持时,您可以添加:
left:-webkit-calc(100% - 100px);
left:-moz-calc(100% - 100px);
left:calc(50% - 100px);
right:-webkit-calc(100% - 100px);
right:-moz-calc(100% - 100px);
right: calc(50% - 100px);
答案 1 :(得分:0)
对于horizontally
中心,我使用margin 0
技巧和垂直使用比例。
注意:更好地理解我标记为
.box
green bg
html,
body{
height: 100%;
margin: 0;
padding: 0;
background: red;
}
.box{
height: 100%;
width: 200px;
margin:0 auto;
position: relative;
background: green;
}
.box-in{
width: 200px;
height: 200px;
position: absolute;
left: 0;
top:-webkit-calc(100% - 100px);
top:-moz-calc(100% - 100px);
top:calc(50% - 100px);
background: #fff;
animation-duration: 1.5s;
animation-delay: 0.8s;
animation-fill-mode: both;
animation-name: zoomIn;
animation-iteration-count: infinite;
}
@keyframes zoomIn {
from {
opacity: 0;
-webkit-transform: scale3d(.3, .3, .3);
transform: scale3d(.3, .3, .3);
}
50% {
opacity: 1;
}
to {
-webkit-transform: scale3d(1, 1, .1);
transform: scale3d(1, 1, 1);
}
}
<div class="box">
<div class="box-in"></div>
</div>
答案 2 :(得分:0)
我不确定您希望得到最终结果,但一般的解决方案是将变换属性组合在一起,如下所示:
-webkit-transform: scale3d(1, 1, .1) translate(-50%, -50%);
transform: scale3d(1, 1, 1) translate(-50%, -50%);
例如:
答案 3 :(得分:0)
诀窍是将动画设置为变换。
同样棘手的是变换的顺序 ...
html,
body{
height: 100%;
margin: 0;
padding: 0;
}
.box{
height: 100%;
width: 100%;
background: red;
position: relative;
}
.box-in{
width: 200px;
height: 200px;
position: absolute;
left: 50%;
top: 50%;
background: #fff;
animation-duration: 1.5s;
animation-delay: 0.8s;
animation-name: zoomIn;
animation-iteration-count: infinite;
}
@keyframes zoomIn {
from {
opacity: 0;
-webkit-transform: translate(-50%, -50%) scale3d(.3, .3, .3);
transform: translate(-50%, -50%) scale3d(.3, .3, .3);
}
50% {
opacity: 1;
}
to {
-webkit-transform: translate(-50%, -50%) scale3d(1, 1, .1);
transform: translate(-50%, -50%) scale3d(1, 1, 1);
}
}
&#13;
<div class="box">
<div class="box-in"></div>
</div>
&#13;