适用于较小屏幕的汉堡包菜单,包括 JavaScript/jQuery
Hamburger menu for smaller screens including JavaScript/jQuery
我制作了响应式菜单。在桌面上,导航在 header 中水平显示:主页、画廊、关于等。对于较小的屏幕,我制作了汉堡包图标,点击后,导航应该展开。 CSS 我在较小的屏幕上隐藏了导航,并设计了展开时的样式 - 它将垂直显示。
使用 javascript 我制作了一个功能,当您点击汉堡包图标时展开导航并在您再次点击时折叠它。
有效。
问题是:
如果我点击汉堡图标显示导航然后再次隐藏它,当我将浏览器的 window 放大到桌面大小时,导航将不会再次水平显示在 header 中,它保持隐藏状态。
请帮忙!
$('#drawer').click(function() {
$('header nav').toggle(1);
if ($(this).text() == 'Hide') {
$(this).text('Show');
} else {
$(this).text('Hide');
}
});
#drawer {
display: none;
}
header nav {
float: right;
}
nav li {
float: left;
}
@media screen and (max-width: 768px) {
#drawer {
display: inline-block;
float: right;
}
header nav {
display: none;
float: none;
padding-top: 120px;
/* Hamburger icon is in the header on the right side, and nav expands vertically in the center of the screen below the hamburger icon, that's why I put the padding 120px, to make nav below the icon*/
text-align: center;
}
nav li {
float: none;
}
nav li a {
display: inline-block;
margin-left: 0px;
margin-top: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img id="drawer" src="images/drawer.png" alt="Drawer">
<nav>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="portfolio.html">Portfolio</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
</ul>
</nav>
你是我在这里帮助过的第一个人,所以我希望我把这一点说清楚,这对你有实际帮助。
我认为您的问题出在 toggle() 的使用上。此函数将向您的导航元素添加内联样式,如果不使用 !important.
,则无法使用 CSS 覆盖这些样式
我已经使用 toggleClass() 组合了一个解决方案,它不会添加任何内联样式,而是会应用 class 来显示您的导航元素,同时仍然允许使用媒体查询的相反效果进行覆盖.我还想补充一点,我真的不推荐使用纯粹做 display: 块的 class,但它说明了这一点。
<!DOCTYPE html>
<html>
<head>
<script
src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<style>
#drawer {
display: none;
}
header nav {
float: right;
}
nav li {
float: left;
}
@media screen and (max-width: 768px) {
#drawer {
display: inline-block;
float: right;
}
header nav {
display: none;
float: none;
padding-top: 120px; /* Hamburger icon is in the header on the right side, and nav expands vertically in the center of the screen below the hamburger icon, that's why I put the padding 120px, to make nav below the icon*/
text-align: center;
}
nav li {
float: none;
}
nav li a {
display: inline-block;
margin-left: 0px;
margin-top: 10px;
}
}
.display {
display: block;
}
</style>
</head>
<body>
<header>
<img id="drawer" src="images/drawer.png" alt="Drawer">
<nav>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="portfolio.html">Portfolio</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
</ul>
</nav>
</header>
<script>
$('#drawer').click(function() {
$('header nav').toggleClass('display');
if( $(this).text() == 'Hide' ) {
$(this).text('Show');
} else {
$(this).text('Hide');
}
});
</script>
</body>
</html>
我希望这是有用的,感谢你成为我的 Whosebug 小白鼠。
我制作了响应式菜单。在桌面上,导航在 header 中水平显示:主页、画廊、关于等。对于较小的屏幕,我制作了汉堡包图标,点击后,导航应该展开。 CSS 我在较小的屏幕上隐藏了导航,并设计了展开时的样式 - 它将垂直显示。
使用 javascript 我制作了一个功能,当您点击汉堡包图标时展开导航并在您再次点击时折叠它。
有效。
问题是: 如果我点击汉堡图标显示导航然后再次隐藏它,当我将浏览器的 window 放大到桌面大小时,导航将不会再次水平显示在 header 中,它保持隐藏状态。
请帮忙!
$('#drawer').click(function() {
$('header nav').toggle(1);
if ($(this).text() == 'Hide') {
$(this).text('Show');
} else {
$(this).text('Hide');
}
});
#drawer {
display: none;
}
header nav {
float: right;
}
nav li {
float: left;
}
@media screen and (max-width: 768px) {
#drawer {
display: inline-block;
float: right;
}
header nav {
display: none;
float: none;
padding-top: 120px;
/* Hamburger icon is in the header on the right side, and nav expands vertically in the center of the screen below the hamburger icon, that's why I put the padding 120px, to make nav below the icon*/
text-align: center;
}
nav li {
float: none;
}
nav li a {
display: inline-block;
margin-left: 0px;
margin-top: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img id="drawer" src="images/drawer.png" alt="Drawer">
<nav>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="portfolio.html">Portfolio</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
</ul>
</nav>
你是我在这里帮助过的第一个人,所以我希望我把这一点说清楚,这对你有实际帮助。
我认为您的问题出在 toggle() 的使用上。此函数将向您的导航元素添加内联样式,如果不使用 !important.
,则无法使用 CSS 覆盖这些样式我已经使用 toggleClass() 组合了一个解决方案,它不会添加任何内联样式,而是会应用 class 来显示您的导航元素,同时仍然允许使用媒体查询的相反效果进行覆盖.我还想补充一点,我真的不推荐使用纯粹做 display: 块的 class,但它说明了这一点。
<!DOCTYPE html>
<html>
<head>
<script
src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<style>
#drawer {
display: none;
}
header nav {
float: right;
}
nav li {
float: left;
}
@media screen and (max-width: 768px) {
#drawer {
display: inline-block;
float: right;
}
header nav {
display: none;
float: none;
padding-top: 120px; /* Hamburger icon is in the header on the right side, and nav expands vertically in the center of the screen below the hamburger icon, that's why I put the padding 120px, to make nav below the icon*/
text-align: center;
}
nav li {
float: none;
}
nav li a {
display: inline-block;
margin-left: 0px;
margin-top: 10px;
}
}
.display {
display: block;
}
</style>
</head>
<body>
<header>
<img id="drawer" src="images/drawer.png" alt="Drawer">
<nav>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="portfolio.html">Portfolio</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
</ul>
</nav>
</header>
<script>
$('#drawer').click(function() {
$('header nav').toggleClass('display');
if( $(this).text() == 'Hide' ) {
$(this).text('Show');
} else {
$(this).text('Hide');
}
});
</script>
</body>
</html>
我希望这是有用的,感谢你成为我的 Whosebug 小白鼠。