【问题标题】:CSS transition opacity works 0 to 1 but doesn't work 1 to 0CSS 过渡不透明度适用于 0 到 1,但不适用于 1 到 0
【发布时间】:2020-11-22 17:25:57
【问题描述】:

我的过渡不透明度仅适用于 0 到 1。对于 1 到 0,我应该怎么做?如果我输入 transition: all .3s ease-in-out; 它可以工作,但这次会出现调整大小的问题。我该怎么办? 另外,我可以在 javascript 中调整屏幕大小时制作动画停止器,但有没有一种简单的方法可以在 CSS 中制作它?

代码如下:

const body = document.body;
const hamburger = document.getElementById("hamburger");
const menu = document.getElementById("menu");
const links = document.querySelectorAll(".menu li");

hamburger.addEventListener("click", () => {
    hamburger.classList.toggle("clicked");
    menu.classList.toggle("active");
    body.classList.toggle("no-scroll");

    links.forEach(link => {
        link.addEventListener("click", () => {
            body.classList.remove("no-scroll");
            hamburger.classList.remove("clicked");
            menu.classList.remove("active");
        });
    });
});
.menu {
  position: absolute;
  background: $purpleGradient;
  //transform: translateY(-100%);
  height: 100vh;
  width: 100vw;
  top: 0;
  left: 0;
  z-index: 99;
  opacity: 0;
  visibility: hidden;
  transition: opacity .3s ease-in-out;
}

// Menu Active
.active {
  visibility: visible;
  opacity: 1;
  transition: opacity .3s ease-in-out;
}
<header class="header">
  <nav class="flex flex-ai-center flex-jc-sb container">
    <div class="logo">
      <a href="">LOGO</a>
    </div>
    <ul class="menu flex flex-fd-column flex-jc-center flex-ai-center" id="menu">
      <li><a href="">Home</a></li>
      <li><a href="">Pricing</a></li>
      <li><a href="">Investments</a></li>
      <li><a href="">Support</a></li>
    </ul>
    <div class="hamburger flex flex-ai-center flex-jc-center" id="hamburger">
      <span></span>
    </div>
  </nav>
</header>

【问题讨论】:

  • 将您的 JavaScript 代码添加到帖子中。
  • 这段代码中没有过渡或动画!你确定这是整个代码吗?
  • 过渡:不透明度 .3s ease-in-out;
  • 对不起,我添加了javascript部分

标签: html css css-animations css-transitions


【解决方案1】:

我在结果中找不到汉堡包,所以我添加了一个文本以便能够看到它。
当我点击它时,菜单显示在汉堡包的顶部,并且不允许我点击它进行淡出部分。所以我添加了left:120px
同样为了淡化效果删除类中的visibility 属性,

const body = document.body;
const hamburger = document.getElementById("hamburger");
const menu = document.getElementById("menu");
const links = document.querySelectorAll(".menu li");

hamburger.addEventListener("click", () => {
    hamburger.classList.toggle("clicked");
    menu.classList.toggle("active");
    body.classList.toggle("no-scroll");

    links.forEach(link => {
        link.addEventListener("click", () => {
            body.classList.remove("no-scroll");
            hamburger.classList.remove("clicked");
            menu.classList.remove("active");
        });
    });
});
.menu {
        position: absolute;
        background: $purpleGradient;
        height: 100vh;
        width: 100vw;
        top: 0;
        left: 120px;
        z-index: 99;
        opacity: 0;

        transition: opacity .3s ease-in-out;

}

.active {

        opacity: 1;
        transition: opacity .3s ease-in-out;
}
<header class="header">
        <nav class="flex flex-ai-center flex-jc-sb container">
            <div class="logo">
                <a href="">LOGO</a>
            </div>
            <ul
                class="menu flex flex-fd-column flex-jc-center flex-ai-center"
                id="menu"
            >
                <li><a href="">Home</a></li>
                <li><a href="">Pricing</a></li>
                <li><a href="">Investments</a></li>
                <li><a href="">Support</a></li>
            </ul>
            <div
                class="hamburger flex flex-ai-center flex-jc-center"
                id="hamburger"
            >
                <span>Hamburger</span>
            </div>
        </nav>
    </header>

【讨论】:

  • 我的结果和你一模一样。我也想让淡出。这只是淡入。基本上这种过渡只适用于不透明度 0 到 1,而不适用于 1 到 0
  • 它的工作你是对的,但只是不透明度 0 到不透明度 1
  • 它只是淡入基本上不会淡入淡出
  • 它的工作,但链接现在可点击它的不透明度 0 但链接可点击
  • 那是因为您使用的是opacity,而这些元素只是消失了,但它们就在那里。
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2020-07-31
  • 2020-06-25
  • 2013-08-30
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多