我有三个文件index.html,style.css,app.js。
尝试制作响应式布局。
我在 .nav-link li 下的CSS文件中将不透明度设置为0。 当我单击汉堡图标文本时,我想进行动画处理,即文本的不透明度应从0变为1(检查@keframe navLinkFade),然后该文本将出现。 但这不会发生。为什么?
我已经正确调用了 app.js 中的所有功能。我想请看一下。
当我在CSS中将不透明度设为1时,它可以正常工作,但这不会给我带来褪色效果。
点击“汉堡”菜单之前的图像:
点击“汉堡”菜单后的图片
index.html
const navSlide = () => {
const burger = document.querySelector(".burger");
const nav = document.querySelector(".nav-links");
const navLinks = document.querySelectorAll(".nav-links li");
burger.addEventListener("click", () => {
nav.classList.toggle("nav-avtive");
navLinks.forEach((link, index) => {
if (link.style.animation) {
link.style.animation = "";
} else {
link.style.animation = "navLinkFade 0.5s ease forwards ${index / 7}s";
}
});
});
};
navSlide();
* {
margin: 0px;
padding: 0px;
box-sizing: border-box;
}
nav {
display: flex;
justify-content: space-around;
align-items: center;
min-height: 8vh;
font-family: "Poppins", sans-serif;
background-color: black;
}
.logo {
color: whitesmoke;
text-transform: uppercase;
letter-spacing: 5px;
font-size: 20px;
}
.nav-links {
display: flex;
justify-content: space-around;
width: 30%;
}
.nav-links li {
list-style: none;
}
.nav-links a {
color: rgb(240, 172, 0);
text-decoration: none;
letter-spacing: 3px;
font-weight: bold;
font-size: 14px;
}
.burger {
display: none;
}
.burger div {
background-color: whitesmoke;
height: 3px;
width: 25px;
margin: 5px;
cursor: pointer;
}
@media screen and (max-width: 1024px) {
.nav-links {
width: 60%;
}
}
@media screen and (max-width: 768px) {
body {
overflow-x: hidden;
}
.nav-links {
position: absolute;
right: 0px;
height: 92vh;
top: 8vh;
background-color: black;
display: flex;
flex-direction: column;
align-items: center;
width: 50%;
transform: translateX(100%);
transition: transform 0.5s ease-in;
}
.nav-links li {
opacity: 0;
}
.burger {
display: block;
}
}
.nav-avtive {
transform: translateX(0%);
}
@keyframes navLinkFade {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0px);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css?family=Poppins&display=swap" rel="stylesheet">
<title>Document</title>
</head>
<body>
<nav>
<div class="logo">
<h4>The Nav</h4>
</div>
<ul class="nav-links">
<li><a href="#">Home</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Contact</a></li>
</ul>
<div class="burger">
<div class="line1"></div>
<div class="line2"></div>
<div class="line3"></div>
</div>
</nav>
</div>
<script src="app.js"></script>
</body>
</html>
我希望burgerMenu使用navLinkFade显示文本
答案 0 :(得分:4)
.nav链接li opacity: 0
是主要问题。更改不透明度即可使用。
@media screen and (max-width: 768px)
.nav-links li {
opacity: 1;
}
对于动画,字符串应该用 ES6`而不是双引号引起来。因为在双引号内逻辑运算或变量不起作用。在双引号或单引号内 $ {index / 7} 被视为字符串。
link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7}s`
答案 1 :(得分:1)
link.style.animation = "navLinkFade 0.5s ease forwards ${index / 7}s";
不会插入动画字符串,因为您使用的是双引号,因此您需要使用反引号:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
答案 2 :(得分:1)
只需将双引号更改为反引号
link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7}s`;
答案 3 :(得分:1)
尝试使用whereColumn / orWhereColumn
/ visibility: hidden
代替visibility: visible
或者像opacity
和visibility
的组合