我知道这个问题已在其他主题上讨论过了。但是,我还没有找到一个解决问题的工作方案,我有点不同(也许,如果我弄错了,抱歉,我还是CSS的大三学生。)
所以,我试图创建一个虚拟网站,当你将鼠标悬停在中心的图像上时,它将水平翻转并显示内容。
FLIP动画信用 David Walsh :https://davidwalsh.name/css-flip
HTML代码:
<div id="websitebackground">
<div class="flip-container" ontouchstart="this.classList.toggle('hover');">
<div class="flipper" >
<div class="front" >
<!-- front content -->
<img class="logocenter" src="images.svg" />
</div>
<div class="back">
<!-- back content -->
</div>
</div>
</div>
</div>
CSS代码:
#websitebackground
{
min-height: 100vh;
min-width: 100vw;
background-color: #34495e;
}
.logocenter {
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
/*the rest flip animation is the same*/
如何将div移动到中间?水平,垂直和响应,也没有搞乱动画。
我设法把div放在中心位置。然而,动画是一团糟。翻转位置不是应该的位置。我希望图像在翻转时保持这样的位置:
http://www.corelangs.com/css/box/img/div-vertical-center.png
提前谢谢。
答案 0 :(得分:2)
首先 - 以CSS为中心是棘手的, learn here how to do it properly
在你的情况下我会使用Flexbox方法,所以:
#websitebackground
{
display: flex;
justify-content: center;
align-items: center;
align-content: center;
min-height: 100vh;
min-width: 100vw;
background-color: #34495e;
}
还要记得将翻转容器的大小更改为图像的大小,在我的情况下,它是100x100px,所以:
.flip-container, .front, .back {
width: 100px;
height: 100px;
}
答案 1 :(得分:0)
如果您的项目不需要旧版浏览器后备,最简单,最快捷的方法是使用 Flexbox.
示例代码(您必须应用所有类型的 prefixes 才能在所有浏览器上良好运行)
.container {
display: flex;
justify-content: center;
align-items: center;
align-content: center;
}
.container
的位置#websitebackground
或翻转元素的父级。
答案 2 :(得分:0)
由于你没有提供一个有效的例子我会给它一个很好的猜测。这个hack应该使用类.center-child
将容器内的任何元素居中。确保容器只有一个孩子。
更新了HTML
<div id="websitebackground">
<div class="flip-container" ontouchstart="this.classList.toggle('hover');">
<div class="center-child">
<div class="flipper">
<div class="front">
<!-- front content -->
<img class="logocenter" src="images.svg" />
</div>
<div class="back">
<!-- back content -->
</div>
</div>
</div>
</div>
</div>
其他CSS:
.center-child {
text-align: center;
white-space: nowrap;
}
.center-child:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
// Adjusts for spacing
margin-right: -0.25em;
}
.center-child > * {
display: inline-block;
max-width: 100%;
vertical-align: middle;
white-space: normal;
}
答案 3 :(得分:0)
从我的角度来看,给出的芒果是错误的。 IE 10以及Android浏览器不支持Flexbox,视图宽度和高度也不支持。所以我建议你做以下事情:
<强> HTML 强>
将img包装在容器中:
<div class="img-cont>
<img class="logocenter" src="images.svg" />
</div>
<强> CSS 强>
给容器100%的宽度和高度(相对于'img-cont'的容器),并给'img-cont'一个绝对的pos。然后你可以给动画一个0自动保证金。
html, body {
width: 100%;
height: 100%;
}
.img-cont {
position: absolute;
width: 100%;
height: 100%;
}
.flip-container {
margin: 0 auto;
}
还有一些JS
基本上计算页面的高度并将元素放在中心。请记住,你可能想要减去元素的高度,如下所示:'var halfTop =((site.height - parseInt($(el).height()))/ 2) - 60;' (只是一个例子)
var site = {
resize: function() {
// reset height and width
site.width = parseInt($(window).width());
site.height = parseInt($(window).height());
$('.img-cont').each(function() {
var el = $(this);
var halfTop = ((site.height - parseInt($(el).height())) / 2);
$(el).css('top' + halfTop + 'px');
});
};
$(window).resize(function() {
site.resize();
});