【问题标题】:Why can't I click the left side of the link on this CSS flip card in Chrome?为什么我无法在 Chrome 中单击此 CSS 翻转卡片上的链接左侧?
【发布时间】:2020-07-02 22:34:36
【问题描述】:

尝试单击此翻转卡背面链接的左侧在 Chrome 中不起作用。然而,当我将鼠标悬停在链接的 右侧 上时,我看到了指针光标并能够与之交互:

/* prefixed by https://autoprefixer.github.io (PostCSS: v7.0.26, autoprefixer: v9.7.3) */

.card {
  -webkit-perspective: 1000px;
  perspective: 1000px;
  display: inline-block;
}

.card .card-inner {
  position: relative;
  -webkit-transition: -webkit-transform 0.6s;
  transition: -webkit-transform 0.6s;
  -o-transition: transform 0.6s;
  transition: transform 0.6s;
  transition: transform 0.6s, -webkit-transform 0.6s;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  will-change: transform;
}

.card .card-inner .card-face {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}

.card .card-inner .card-face.card-back {
  -webkit-transform: rotateY( 180deg);
  transform: rotateY( 180deg);
}

.card .card-inner .card-face .card-face-inner .card-face-content {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-family: Arial, sans-serif;
  font-size: 22px;
}

.card:hover .card-inner {
  -webkit-transform: rotateY( 180deg);
  transform: rotateY( 180deg);
}

.card .card-back {
  background: steelblue;
}
<div class="card">
  <div class="card-inner">
    <img src="https://via.placeholder.com/400x500?text=%20" alt="" />

    <div class="card-face card-front">
      <div class="card-face-inner">
        <div class="card-face-content">
          Front
        </div>
      </div>
    </div>

    <div class="card-face card-back">
      <div class="card-face-inner">
        <div class="card-face-content">
          <a href="#foo">Back</a>
        </div>
      </div>
    </div>
  </div>
</div>

我该如何解决这个问题,以便整个链接都可以点击?我猜这与backface-visibility 有关。我遇到了this StackOverflow answer,但我认为解决方案已经在这里实现了:

.card .card-inner {
    ...
    -webkit-transform-style: preserve-3d;
    transform-style: preserve-3d;
}

【问题讨论】:

    标签: html css webkit css-transforms


    【解决方案1】:

    我不知道原因,但这很可能是一个错误,因为它可以按预期在 Firefox 上运行。添加pointer-events: none;.card-innerpointer-events: auto.card-face 有效,只有上帝知道为什么。

    /* prefixed by https://autoprefixer.github.io (PostCSS: v7.0.26, autoprefixer: v9.7.3) */
    
    .card {
      -webkit-perspective: 1000px;
      perspective: 1000px;
      display: inline-block;
    }
    
    .card .card-inner {
      position: relative;
      -webkit-transition: -webkit-transform 0.6s;
      transition: -webkit-transform 0.6s;
      -o-transition: transform 0.6s;
      transition: transform 0.6s;
      transition: transform 0.6s, -webkit-transform 0.6s;
      -webkit-transform-style: preserve-3d;
      transform-style: preserve-3d;
      will-change: transform;
      pointer-events: none;
    }
    
    .card .card-inner .card-face {
      position: absolute;
      top: 0;
      left: 0;
      height: 100%;
      width: 100%;
      -webkit-backface-visibility: hidden;
      backface-visibility: hidden;
      pointer-events: auto;
    }
    
    .card .card-inner .card-face.card-back {
      -webkit-transform: rotateY( 180deg);
      transform: rotateY( 180deg);
    }
    
    .card .card-inner .card-face .card-face-inner .card-face-content {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      -webkit-backface-visibility: hidden;
      backface-visibility: hidden;
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      -webkit-box-align: center;
      -ms-flex-align: center;
      align-items: center;
      -webkit-box-pack: center;
      -ms-flex-pack: center;
      justify-content: center;
      font-family: Arial, sans-serif;
      font-size: 22px;
    }
    
    .card:hover .card-inner {
      -webkit-transform: rotateY( 180deg);
      transform: rotateY( 180deg);
    }
    
    .card .card-back {
      background: steelblue;
    }
    <div class="card">
      <div class="card-inner">
        <img src="https://via.placeholder.com/400x500?text=%20" alt="" />
    
        <div class="card-face card-front">
          <div class="card-face-inner">
            <div class="card-face-content">
              Front
            </div>
          </div>
        </div>
    
        <div class="card-face card-back">
          <div class="card-face-inner">
            <div class="card-face-content">
              <a href="#foo">Back</a>
            </div>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 有趣!所以,我才意识到我原来的笔不能在 Safari 中工作,我得到了一种奇怪的闪烁效果。您和@vals 的解决方案都可以,但您的解决方案也可以在 Safari 中使用!
    • 最终在我的实际应用中结合使用您的两种解决方案。
    【解决方案2】:

    原因是由于 Chrome 中的小精度误差,180 度并不完全是半转。

    并且元素的左边是在前面下面(即使你看不到它,它仍然在那里)。

    在 Z 方向上提升你的元素,只是一个像素,它就可以工作了(现在它完全在另一边):

    /* prefixed by https://autoprefixer.github.io (PostCSS: v7.0.26, autoprefixer: v9.7.3) */
    
    .card {
      -webkit-perspective: 1000px;
      perspective: 1000px;
      display: inline-block;
    }
    
    .card .card-inner {
      position: relative;
      -webkit-transition: -webkit-transform 0.6s;
      transition: -webkit-transform 0.6s;
      -o-transition: transform 0.6s;
      transition: transform 0.6s;
      transition: transform 0.6s, -webkit-transform 0.6s;
      -webkit-transform-style: preserve-3d;
      transform-style: preserve-3d;
      will-change: transform;
    }
    
    .card .card-inner .card-face {
      position: absolute;
      top: 0;
      left: 0;
      height: 100%;
      width: 100%;
      -webkit-backface-visibility: hidden;
      backface-visibility: hidden;
    }
    
    .card .card-inner .card-face.card-back {
      transform: rotateY( 180deg) translateZ(1px);   /* changed */
    }
    
    .card .card-inner .card-face .card-face-inner .card-face-content {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      -webkit-backface-visibility: hidden;
      backface-visibility: hidden;
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      -webkit-box-align: center;
      -ms-flex-align: center;
      align-items: center;
      -webkit-box-pack: center;
      -ms-flex-pack: center;
      justify-content: center;
      font-family: Arial, sans-serif;
      font-size: 22px;
    }
    
    .card:hover .card-inner {
      -webkit-transform: rotateY( 180deg);
      transform: rotateY( 180deg);
    }
    
    .card .card-back {
      background: steelblue;
    }
    <div class="card">
      <div class="card-inner">
        <img src="https://via.placeholder.com/400x500?text=%20" alt="" />
    
        <div class="card-face card-front">
          <div class="card-face-inner">
            <div class="card-face-content">
              Front
            </div>
          </div>
        </div>
    
        <div class="card-face card-back">
          <div class="card-face-inner">
            <div class="card-face-content">
              <a href="#foo">Back</a>
            </div>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 感谢您的解释。我注意到我原来的笔在 Safari 中不起作用,不知何故 @Taylan 提供的解决方案可以解决链接问题并使其在 Safari 中起作用。不知道怎么做,但你的两个答案都很有价值!
    • 很高兴它有帮助!
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2015-06-05
    • 2015-11-11
    相关资源
    最近更新 更多