css - 变换原点 50% 垂直

标签 css animation transform

我正在制作一些在悬停时翻转的卡片,但无法让变换原点垂直工作。它们应该有 50% 的原点,这样它们向上和向下移动的次数一样多,但它们始终只是向下推。

http://codepen.io/rachelreveley/pen/oxVOeL

<div class="column">
    <div class="card-container card-1">
        <div class="card">
            <div class="front">
                <h3>Front</h3>
                <p>Front</p>
            </div>
            <div class="back">
                <h3>Back</h3>
                <p>Back</p>
                <p><a class="button">Resell with intY</a></p>
            </div>
        </div>
    </div>
    <div class="card-container card-2">
        <div class="card">
            <div class="front">
                <h3>Front</h3>
                <p>Front</p>
            </div>
            <div class="back">
                <h3>Back</h3>
                <p>Back</p>
                <p><a class="button">Resell with intY</a></p>
            </div>
        </div>
    </div>
    <div class="card-container card-3">
        <div class="card">
            <div class="front">
                <h3>Front</h3>
                <p>Front</p>
            </div>
            <div class="back">
                <h3>Back</h3>
                <p>Back</p>
                <p><a class="button">Resell with intY</a></p>
            </div>
        </div>
    </div>
</div>

body {padding: 30px;}
.card-container {perspective: 1000; display: inline-block; margin: 0 3rem;}
.card-container:hover .card,
.card-container.hover .card {
    transform: rotateY(180deg) scale(1.1);
}
.card-container, .front, .back {
    width: 210px;
    height: 297px;
}
.card {
    transition: 0.6s;
    transform-style: preserve-3d;
    position: relative;
     transform-origin: 50%;
}
.front, .back {
    backface-visibility: hidden;
    position: absolute;
    top: 0;
    left: 0;
    padding: 20px;
}
.front {
    background-color: #eee;
    color: #122d40;
    z-index: 2;
    transform: rotateY(0deg);   /* for firefox 31 */
}
.back {
    background-color: #1f7c8f;
    transform: rotateY(180deg);
}

最佳答案

这里有两个考虑因素,水平位置和垂直位置。

要保持水平位置,您需要为 transform-origin 计算正确的值。

您向 .front.back 元素添加了填充,这使元素的宽度总共增加了 40 像素。

您可以使用 CSS calc 函数将偏移量计算为 calc(50% - 20px),这似乎可行。

要解决翻转的 .card 的垂直放置问题,悬停时,将 .card 的大小放大 1.1,以便保持翻转相对于其他元素垂直居中,您可以将 top 偏移量添加到过渡。

例如,如果你的卡片高度为 160px,则卡片将高 16px,因此偏移设置 top: -8x(因为 .card 是相对定位的) .

body {padding: 30px;}
.card-container {perspective: 1000; display: inline-block; margin: 0 2rem;}
.card-container:hover .card,
.card-container.hover .card {
	transform: rotateY(180deg) scale(1.1);
    top: -8px; /* compute offset: 160*0.1/2 = 8 */
}
.card-container, .front, .back {
	width: 100px;
	height: 160px;
}
.card {
	transition: 0.6s;
	transform-style: preserve-3d;
	position: relative;
    top: 0;
	transform-origin: calc(50% + 20px);
}
.front, .back {
	backface-visibility: hidden;
	position: absolute;
	top: 0;
	left: 0;
	padding: 20px;
}
.front {
	background-color: #eee;
	color: #122d40;
	z-index: 2;
	transform: rotateY(0deg);	/* for firefox 31 */
}
.back {
	background-color: #1f7c8f;
	transform: rotateY(180deg);
}
<div class="column">
  <div class="card-container card-1">
    <div class="card">
      <div class="front">
        <h3>Front</h3>
        <p>Front</p>
      </div>
      <div class="back">
        <h3>Back</h3>
        <p>Back</p>
        <p><a class="button">Resell with intY</a>
        </p>
      </div>
    </div>
  </div>
  <div class="card-container card-2">
    <div class="card">
      <div class="front">
        <h3>Front</h3>
        <p>Front</p>
      </div>
      <div class="back">
        <h3>Back</h3>
        <p>Back</p>
        <p><a class="button">Resell with intY</a>
        </p>
      </div>
    </div>
  </div>
  <div class="card-container card-3">
    <div class="card">
      <div class="front">
        <h3>Front</h3>
        <p>Front</p>
      </div>
      <div class="back">
        <h3>Back</h3>
        <p>Back</p>
        <p><a class="button">Resell with intY</a>
        </p>
      </div>
    </div>
  </div>
</div>

关于css - 变换原点 50% 垂直,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186675/

相关文章:

ios - 从公共(public)中心一起旋转一组 UIView

css - 悬停闪烁问题 : because of transform

ios - 将 CABasicAnimation 与 CGAffineTransform 动画混合

html - 无法使用 ionic 滚动水平滚动

c - 我需要一些帮助,用 openGL 设计太阳能系统

html - 固定 div,内容固定但背景图片不固定

Android:如何停止在 ImageView 上应用的无限动画?

c++ - 请推荐一个适用于XP、Win7、Win8的二维动画c++工具

javascript - 在另一张图片上显示超棒的字体图标

css - 手机响应式背景