【问题标题】:3d card flip effect with css not showing backcss 不显示的 3d 卡片翻转效果
【发布时间】:2014-04-07 18:29:33
【问题描述】:

我有一个小提琴http://jsfiddle.net/nLhgT/ 我按照http://davidwalsh.name/css-fliphttp://desandro.github.io/3dtransforms/docs/card-flip.html 此处的说明进行操作,当我翻转卡片时,仅显示(翻转)正面。我似乎无法显示背面。我在 stackoverflow 上读过类似的问题,说必须先旋转背面。在我的示例中,它确实最初是旋转的。

HTML

<ul>
    <li>
        <div class="container">
        <div class="card">
            <div class="front">
                front
            </div>
            <div class="back">
                back
            </div>
        </div>
        </div>
    </li>
</ul>

CSS

li { 
  width: 300px;
  height: 260px;
  position: relative;
  perspective: 800px;
  list-style-type: none;
}
.card {
  width: 100%;
  height: 100%;
  position: absolute;
  transform-style: preserve-3d;
  -webkit-transition-duration: 400ms;
  transition-duration: 400ms;
}
.card div {
  display: block;
  position: absolute;
  width: 100%;
  height: 100%;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}
.card .front {
  background: red;
}
.card .back {
  background: blue;
  -webkit-transform: rotateY( 180deg );
  transform: rotateY(180deg);
}
.card.flip {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}

JS

  $(document.body).on('click', '.card', function() {
          console.log("CLICK");
    document.querySelector('.card').classList.toggle("flip");
  });

在我的示例中,唯一的区别是卡片位于无序列表中。我打算列出这些卡片。但我认为这不会影响事情。

【问题讨论】:

    标签: css


    【解决方案1】:

    所以主要问题是 IE 不支持preserve-3d。巨大的无赖,但对此无能为力。因此,您应该将变换应用于每个子元素,而不是整个卡片。

    我发现的翻转卡片的最佳方法如下:

    • 变换每个面。正面默认为 0,背面默认为 180。翻转时,它们应分别为 180 和 360。
    • 向他们应用z-index。可见的脸应该是 10,而隐藏的脸应该是 0。这样可以确保正确的脸始终在前面(即使在不支持转换的浏览器中)

    Here 是我对您的 Fiddle 的更新,显示了工作卡翻转。

    【讨论】:

    • 为什么混合香草jsjQuery,不是更好$('.card').toggleClass("flip"); Here 吗?
    • 因为我无法更改 jQuery。就我个人而言,我只是 ditch it completely,但因为这不是回答问题的障碍,所以我就顺其自然了。
    • 无论如何,它会是$(this).toggleClass("flip"),除非您希望每张卡片都在您单击其中一张时翻转。
    • 这是迄今为止我找到的最佳答案。在演示中它既好又简单。正如 Niet 指出的那样,我相信您确实需要在 IE 10 中分别翻转正面和背面,这就是我所做的!
    【解决方案2】:

    给你...

    Demo Fiddle

    HTML:

    <ul>
        <li>
            <div class="container" id="flip-toggle">
                <div class="card">
                    <div class="front">front</div>
                    <div class="back">back</div>
                </div>
            </div>
        </li>
    </ul>
    

    CSS:

    li {
        width: 300px;
        height: 260px;
        position: relative;
        perspective: 800px;
        list-style-type: none;
    }
    .container {
        -webkit-perspective: 1000;
        -moz-perspective: 1000;
        perspective: 1000;
        border: 1px solid #ccc;
    }
    #flip-toggle.flip .card {
        -webkit-transform: rotateY(180deg);
        -moz-transform: rotateY(180deg);
        transform: rotateY(180deg);
        filter: FlipH;
        -ms-filter:"FlipH";
    }
    .container, .front, .back {
         width: 300px;
        height: 260px;
    }
    .card {
        -webkit-transition: 0.6s;
        -webkit-transform-style: preserve-3d;
        -moz-transition: 0.6s;
        -moz-transform-style: preserve-3d;
        transition: 0.6s;
        transform-style: preserve-3d;
        position: relative;
        width: 100%;
        height: 100%;
    }
    .front, .back {
        -webkit-backface-visibility: hidden;
        -moz-backface-visibility: hidden;
        backface-visibility: hidden;
        position: absolute;
        top: 0;
        left: 0;
    }
    .front {
        background: red;
        z-index: 2;
    }
    .back {
        background: blue;
        -webkit-transform: rotateY(180deg);
        -moz-transform: rotateY(180deg);
        transform: rotateY(180deg);
    }
    

    JS:

    $(document.body).on('click', '.card', function () {
          console.log("CLICK");
          document.querySelector('#flip-toggle').classList.toggle('flip');
      });
    

    【讨论】:

    • 我还是看不到后面。
    • 奇怪..我可以在我的小提琴中看到 chrome 和 firefox...jsfiddle.net/nLhgT/17 ...无论如何你的解决方案是有效的...所以哈利可以接受它。跨度>
    • 也许是因为“让它在 IE 中运行并且它在所有其他浏览器中运行”一直是我的驱动行动计划;)如前所述,IE 不支持preserve-3d,因此它将正面压平并对其进行改造。
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2015-06-05
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多