无法在 Chrome 上的 TransformY 之后选择输入以获得“卡片翻转”效果

Posted

技术标签:

【中文标题】无法在 Chrome 上的 TransformY 之后选择输入以获得“卡片翻转”效果【英文标题】:Can't select inputs after TransformY on chrome for a "card flipping" effect 【发布时间】:2020-05-28 08:49:06 【问题描述】:

我有一个“卡片”设计,其中我有一个 div 和两个孩子,一个“正面”和一个“背面”。通过对卡片应用rotateY(180deg) 变换来实现“卡片翻转”效果,隐藏背面。

我注意到 chrome 和 firefox 之间存在一些差异。在 Firefox 上,动画很流畅,在 chrome 上,有一个白色的闪光。但最重要的是,卡片“背面”的输入元素在 Chrome 中是不可点击的。

您可以在这些 gif 中看到每个浏览器中的效果:

对正在发生的事情有任何想法吗?

此笔可用的代码:https://codepen.io/elbasti/pen/poJjLmP

function flipCard() 
  var element = document.getElementById("flipper-container");
  element.classList.toggle("flipper--flipped");
.flipper 
  perspective: 1000px;
  width: 200px;
  height: 200px;
  flex: 0 1 auto;


.card 
  height: 200px;
  width: 200px;
  transition: transform 1s;
  transform-style: preserve-3d;
  padding: 0px;
  backface-visibility: hidden;


.card__face 
  box-sizing: border-box;
  border-radius: 12px;
  position: absolute;
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  padding: 20px;
  backface-visibility: hidden;


.card__face--back 
  background-color: #9e0495;
  position: relative;
  height: 100%;
  color: white;
  transform: rotateY(180deg);


.card__face--front 
  background: gray;


.flipper.flipper--flipped .card 
  transform: rotateY(180deg);
  transition: transform 0.5s;
<div id="flipper-container" class="flipper">
  <div class="card">
    <div class="card__face card__face--back">
      <p>I am the back</p>
      <input type="text" placeholder="Back input">
      <p>The back one doeesn't work in chrome :(</p>
    </div>

    <div class="card__face card__face--front">
      <p>I am the front</p>
      <input type="text" placeholder="Front input">
      <p>The front input works.</p>
    </div>
  </div>
</div>

<button id="toggle-flip" onclick="flipCard()">Click me</button>

【问题讨论】:

对于我看到的正面卡与背面重叠,因此您需要将 z-index 更改(当前为 1,隐藏的为 -1)。但即使这样,如果你有活动的背面可见性:隐藏;那么由于某种原因你仍然不能使用输入(不要问我为什么)。 【参考方案1】:

看来,.card 旋转后与背面重叠。

也许你不能旋转.card,而是.card__face--front.card__face--back。我在sn-p中做了一些修改。

function flipCard() 
  var element = document.getElementById("flipper-container");
  element.classList.toggle("flipper--flipped");
.flipper 
  perspective: 1000px;
  width: 200px;
  height: 200px;
  flex: 0 1 auto;


.card 
  height: 200px;
  width: 200px;
  transition: transform 1s;
  transform-style: preserve-3d;
  padding: 0px;
  backface-visibility: hidden;


.card__face 
  box-sizing: border-box;
  border-radius: 12px;
  position: absolute;
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  padding: 20px;
  backface-visibility: hidden;


.card__face--back 
  background-color: #9e0495;
  position: absolute;
  height: 100%;
  color: white;
  transform: rotateY(180deg);
  transition: transform 0.5s;


.card__face--front 
  background: gray;
  transition: transform 0.5s;


.flipper.flipper--flipped .card__face--front 
  transform: rotateY(-180deg);
  transition: transform 0.5s;


.flipper.flipper--flipped .card__face--back 
  transform: rotateY(0deg);
  transition: transform 0.5s;
<div id="flipper-container" class="flipper">
  <div class="card">
    <div class="card__face card__face--back">
      <p>I am the back</p>
      <input type="text" placeholder="Back input">
      <p>The back one doeesn't work in chrome :(</p>
    </div>

    <div class="card__face card__face--front">
      <p>I am the front</p>
      <input type="text" placeholder="Front input">
      <p>The front input works.</p>
    </div>
  </div>
</div>

<button id="toggle-flip" onclick="flipCard()">Click me</button>

【讨论】:

以上是关于无法在 Chrome 上的 TransformY 之后选择输入以获得“卡片翻转”效果的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 页面无法在 Chrome 上的 Iframe 中打开

SpaceMouse Compact 无法在 Ubuntu 上的 Chrome 中使用 js Gamepad api

无法在 chrome 上的移动视图中取消选中复选框输入 [重复]

使用 jquery 的 Chrome 上的 Flex 无法正确呈现

Mac 上的 Chrome 无法正确显示网站

Chromebook 上的 Chrome 无法从 CDN 加载样式