【问题标题】:Transition to fade an element doesn't work淡入淡出元素的过渡不起作用
【发布时间】:2021-11-15 23:08:19
【问题描述】:

我的代码有问题,可能有人知道解决方案。

我创建了一些卡片,我希望当我点击其中一张时,上方会出现一张更大的新卡片。我用 for 循环很容易做到了,但问题是过渡,我想设置一个平滑过渡。

大卡的初始状态是display: none;和opacity: 0; 我知道我们不能淡出显示无元素,但我的想法是先设置一个display: block,然后在“卡片打开”元素的css中设置一个opacity: 1,并带有一个过渡属性。

但是过渡不起作用,这让我很疯狂,因为我不知道为什么

我在这里分享 codepen 链接:https://codepen.io/arnaudhrt/pen/VwWBLze

和 javascript 代码:

const Card = document.querySelectorAll('.card')
const CardOpen = document.querySelectorAll('.card-open')
const btnClose = document.querySelectorAll('.close')


for(let i = 0 ; i < Card.length ; i++) {
  Card[i].addEventListener('click', function() {
    CardOpen[i].style.display = 'block'
    CardOpen[i].style.opacity = '1'
  });
  btnClose[i].addEventListener('click', () => {
    CardOpen[i].style.opacity = '0'
    CardOpen[i].style.display = 'none'
  })
}

PS:我无法设置显示块并仅切换不透明度,因为如果我这样做,我将无法使用其他带有 z-index 的卡。

【问题讨论】:

  • 你必须转换一些东西。例如,您可以添加/删除具有 opacity:1 的类
  • 对不起,不起作用

标签: javascript html css css-transitions


【解决方案1】:

您可以使用可见性代替显示,显示在 css 中没有过渡效果。

const Card = document.querySelectorAll('.card')
const CardOpen = document.querySelectorAll('.card-open')
const btnClose = document.querySelectorAll('.close')


for(let i = 0 ; i < Card.length ; i++) {
  Card[i].addEventListener('click', function() {
    CardOpen[i].style.visibility = 'visible'
    CardOpen[i].style.opacity = '1'
  });
  btnClose[i].addEventListener('click', () => {
    CardOpen[i].style.opacity = '0'
    CardOpen[i].style.visibility = 'hidden'
  })
}
body {
  background: #565279;
    width: 100vw;
    height: 100vh;
    display: flex;
}
.container-card {
    max-width: 1200px;
    margin: auto;
    display: flex;
    flex-wrap: wrap;
    align-content: center;
    position: relative;
    transition: all 0.4s ease-in-out;
}
.card {
    width: 200px;
    height: 200px;
    background: crimson;
    margin: 20px;
    cursor: pointer;
    transition: all 0.4s ease-in-out;
}
.card-open {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    background: #333;
    visibility: hidden;
    opacity: 0;
    transition: all 0.4s ease-in-out;
}
.card-open span {
    color: #fff;
    position: absolute;
    bottom: 30px;
    left: 50%;
    transform:translateX(-50%);
    cursor: pointer;
}
<div class="container-card">
      <div class="card card1"></div>
      <div class="card card2"></div>
      <div class="card card3"></div>
      <div class="card card4"></div>
      <div class="card card5"></div>
      <div class="card card6"></div>
      <div class="card card7"></div>
      <div class="card card8"></div>
      <div class="card card9"></div>
      <div class="card card10"></div>
      <div class="card-open open1"><span class="close">close</span></div>
      <div class="card-open open2"><span class="close">close</span></div>
      <div class="card-open open3"><span class="close">close</span></div>
      <div class="card-open open4"><span class="close">close</span></div>
      <div class="card-open open5"><span class="close">close</span></div>
      <div class="card-open open6"><span class="close">close</span></div>
      <div class="card-open open7"><span class="close">close</span></div>
      <div class="card-open open8"><span class="close">close</span></div>
      <div class="card-open open9"><span class="close">close</span></div>
      <div class="card-open open10"><span class="close">close</span></div>
    </div>

【讨论】:

  • 谢谢你,它工作得很好,我不知道这个属性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 2018-05-27
  • 2012-02-04
  • 1970-01-01
  • 2018-03-29
  • 2018-10-31
相关资源
最近更新 更多