【问题标题】:backface-visibility doesn't work and perspective() issue背面可见性不起作用和透视()问题
【发布时间】:2015-11-16 17:48:05
【问题描述】:

我正在尝试制作具有正面文字和背面文字的卡片翻转动画。但是,我坚持让后面的文字出现。

这是 CSS:

body{
  font-family: Arial;
  font-size: 40px;
  font-weight: bold;
  color: black;
}
.card{
  position: relative;
  width: 200px;
  height: 200px;
  margin: 100px auto;
  background-color: red;
  transition: transform 2s ease;
}

.card:hover{
  transform: perspective(2000px) rotateY(180deg);
}

.back{
  transform: rotateY(180deg);
}

.front, .back{
  position: absolute;
  top: 70px;
  left: 30px;
  backface-visibility: hidden;
}

这是 HTML:

<div class="card">
    <span class='front'>Front</span>
    <span class='back'>End</span>
</div>

还有一个关于视角的问题:如果我第一次尝试悬停它不起作用,那么它就起作用了,有时视角太像这样了:

【问题讨论】:

    标签: html css css-transitions css-transforms


    【解决方案1】:

    旋转子元素而不是容器将有助于实现您想要的效果。

    这是我们在下面的 sn-p 中所做的:

    • 一个透明的容器元素,并分配有perspective 属性。在父元素上设置此项会自动将其应用于两个子元素。
    • 两个绝对定位的块子元素具有父容器元素的 100% 的宽度和高度。这两个元素都将background 设为红色。他们的backface-visibility 是隐藏的,这意味着当元素旋转 +/- 180 度时,不会显示背面(因此不会显示文本的镜像外观)。
    • 最初,前部元素不旋转,而后部元素旋转了 180 度。这使前面的元素保持在顶部,并将后面的元素发送到后面。因为backface-visibility,隐藏了后面元素的内容。
    • 悬停容器时,前面的元素旋转了 -180 度,因此它在后面,而后面的元素被带到前面。

    关于另一个问题,我无法模拟它,但我相信使用这种方法也应该可以解决这个问题。

    body {
      font-family: Arial;
      font-size: 40px;
      font-weight: bold;
      color: black;
    }
    .card {
      position: relative;
      width: 200px;
      height: 200px;
      margin: 100px auto;
      perspective: 2000px; /* applies to both children */
    }
    .back {
      transform: rotateY(180deg); /* originally this is behind */
    }
    .card:hover .back {
      transform: rotateY(0deg); /* on hover it is brought to front */
    }
    .card:hover .front {
      transform: rotateY(-180deg); /* on hover front is sent back */
    }
    .front,
    .back {
      position: absolute;
      display: inline-block;
      height: 100%;
      width: 100%;
      background: red;
      text-align: center;
      line-height: 200px;
      transition: transform 2s ease;
      backface-visibility: hidden;
    }
    <div class="card">
      <span class='front'>Front</span>
      <span class='back'>End</span>
    </div>

    【讨论】:

    • 哦,是的,抱歉,回复晚了..我很忙
    • @AltianoGerung 没关系,伙计。不用担心:)
    • 我能问你一些事情吗?可以再次测试我的 CSS,但这次在 .card 规则中添加 transform-style: preserve-3d;
    • @AltianoGerung:是的,这是一种解决方案,但 IE does not support that property 直到 IE11,这就是我不推荐它的原因 :)
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2013-06-26
    • 2017-08-02
    • 1970-01-01
    • 2012-12-02
    • 2018-11-16
    • 2017-01-06
    • 2019-11-10
    相关资源
    最近更新 更多