javascript - 为什么我的 CSS 导航切换按钮不起作用?
问题描述
我试图为平板电脑/手机制作一个切换按钮,但它不起作用。当我单击切换按钮时,会调用 javascript 类,所以我不知道出了什么问题...
我使用 defer 函数加载我的 js 以避免将它放在身体的末尾
<script defer src="assets/js/index.js"></script>
const navToggle = document.querySelector(".nav-toggle");
const navMenu = document.querySelector(".nav-menu");
navToggle.addEventListener("click", () => {
navMenu.classList.toggle("nav-menu_visible");
});
/*my toggle button propertys on desktops*/
.header .nav .nav-toggle {
color: white;
background: none;
border: none;
font-size: 1.875em;
padding: 0 1.250em;
line-height: 60px;
cursor: pointer;
display: none;
}
/*for phones*/
@media (max-width: 1024px) {
.header .nav .nav-toggle {
display: block;
}
.header .nav .nav-menu {
flex-direction: column;
align-items: center;
background-color: #2c3e50;
position: fixed;
left: 0;
top: 60px;
width: 100%;
height: calc(100vh - 60px);
/*100%*/
overflow-y: auto;
padding: 1.250em 0;
left: 100%;
transition: left 0.3s;
}
.nav-menu_visible {
left: 0;
}
}
<header class="header">
<nav class="nav">
<a href="#" class="logo">Portafolio</a>
<button class="nav-toggle">
<i class="fas fa-bars"></i>
</button>
<ul class="nav-menu">
<li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
<li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
<li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
<li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
<li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
<li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
</ul>
</nav>
</header>
我不知道为什么我的菜单没有从左 0 移动到左 100%(它没有显示:/)
解决方案
由于CSS,它不起作用。您的特殊性比nav-menu
您声明的要多得多。
.header .nav .nav-menu // 0 3 0
(xyx) => (id, class, tag)
要么增加特异性,.nav-menu_visible
要么降低特异性.nav-menu
1)将特异性降低到0 1 0
as
.nav-menu // 0 1 0
const navToggle = document.querySelector(".nav-toggle");
const navMenu = document.querySelector(".nav-menu");
navToggle.addEventListener("click", () => {
navMenu.classList.toggle("nav-menu_visible");
});
body {
background-color: black;
}
.header .nav .nav-toggle {
color: white;
background: none;
border: none;
font-size: 1.875em;
padding: 0 1.250em;
line-height: 60px;
cursor: pointer;
display: none;
}
/*for phones*/
@media (max-width: 1024px) {
.header .nav .nav-toggle {
display: block;
}
.nav-menu {
flex-direction: column;
align-items: center;
background-color: #2c3e50;
position: fixed;
left: 0;
top: 60px;
width: 100%;
height: calc(100vh - 60px);
/*100%*/
overflow-y: auto;
padding: 1.250em 0;
left: 100%;
transition: left 0.3s;
}
.nav-menu_visible {
left: 0;
}
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet"/>
<header class="header">
<nav class="nav">
<a href="#" class="logo">Portafolio</a>
<button class="nav-toggle">
<i class="fas fa-bars"></i>
</button>
<ul class="nav-menu">
<li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
<li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
<li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
<li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
<li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
<li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
</ul>
</nav>
</header>
2)您还可以增加与nav-menu
as匹配的特异性
.header .nav .nav-menu_visible { // 0 3 0
const navToggle = document.querySelector(".nav-toggle");
const navMenu = document.querySelector(".nav-menu");
navToggle.addEventListener("click", () => {
navMenu.classList.toggle("nav-menu_visible");
});
body {
background-color: black;
}
.header .nav .nav-toggle {
color: white;
background: none;
border: none;
font-size: 1.875em;
padding: 0 1.250em;
line-height: 60px;
cursor: pointer;
display: none;
}
/*for phones*/
@media (max-width: 1024px) {
.header .nav .nav-toggle {
display: block;
}
.header .nav .nav-menu {
flex-direction: column;
align-items: center;
background-color: #2c3e50;
position: fixed;
left: 0;
top: 60px;
width: 100%;
height: calc(100vh - 60px);
/*100%*/
overflow-y: auto;
padding: 1.250em 0;
left: 100%;
transition: left 0.3s;
}
.header .nav .nav-menu_visible {
left: 0;
}
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet" />
<header class="header">
<nav class="nav">
<a href="#" class="logo">Portafolio</a>
<button class="nav-toggle">
<i class="fas fa-bars"></i>
</button>
<ul class="nav-menu">
<li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
<li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
<li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
<li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
<li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
<li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
</ul>
</nav>
</header>
推荐阅读
- xamarin - 当用户使用 Xamarin Forms 在 iOS 上向后滑动时禁用导航栏
- javascript - React - 仅在一个选项卡中显示按钮
- python - 在全息视图中访问散景(图)参数
- c++ - 从源代码构建时,boost iostreams 中的编译错误
- linux - 使用 airmon-ng 收听特定频道
- android - cursor.moveToNext() 抛出 CursorWindowAllocationException
- reactjs - React.useState 不会从 props 重新加载状态
- docker - 如何从私有存储库重新启动 Cloud Foundry Docker 应用程序?
- wpf - 使用 mage.exe 自动执行扩展验证 (EV) 代码签名
- jquery - MCE5-如何在 Tiny mce-5 中将任何图像作为自定义按钮图标?