导航栏下拉菜单在更宽的屏幕上不起作用
Navigation bar dropdowns not working on a wider screen
目前我正在尝试为我的网页复制此导航栏 https://www.codingnepalweb.com/responsive-dropdown-menu-bar-html-css/。此导航栏设置在固定位置,因此每当我滚动时,它都会停留在特定位置。我不想这样,所以我把它改成了相对位置。但是这样做会使导航栏中的下拉菜单无法使用,因为每当我尝试访问选项时,下拉菜单都会消失。我该怎么做才能使导航栏不固定并且仍然可以访问下拉菜单。
代码沙箱:https://codesandbox.io/s/quizzical-mopsa-71uzh?file=/src/App.tsx
代码:
<div class="wrapper">
<nav>
<input type="checkbox" id="show-search"/>
<input type="checkbox" id="show-menu"/>
<label for="show-menu" class="menu-icon"><i class="fas fa-bars"></i></label>
<div class="content" style={{width:"100%"}}>
<div class="logo"><a href="#">Image</a></div>
<ul class="links">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li>
<a href="#" class="desktop-link">Features</a>
<input type="checkbox" id="show-features"/>
<label for="show-features">Features</label>
<ul>
<li><a href="#">Drop Menu 1</a></li>
<li><a href="#">Drop Menu 2</a></li>
<li><a href="#">Drop Menu 3</a></li>
<li><a href="#">Drop Menu 4</a></li>
</ul>
</li>
<li>
<a href="#" class="desktop-link">Services</a>
<input type="checkbox" id="show-services"/>
<label for="show-services">Services</label>
<ul>
<li><a href="#">Drop Menu 1</a></li>
<li><a href="#">Drop Menu 2</a></li>
<li><a href="#">Drop Menu 3</a></li>
<li>
<a href="#" class="desktop-link">More Items</a>
<input type="checkbox" id="show-items"/>
<label for="show-items">More Items</label>
<ul>
<li><a href="#">Sub Menu 1</a></li>
<li><a href="#">Sub Menu 2</a></li>
<li><a href="#">Sub Menu 3</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Feedback</a></li>
</ul>
</div>
</nav>
</div>
.CSS
@media (max-width: 740px) {
.topnav {
display: none;
}
}
@media (min-width: 740px) {
.logoImage {
margin-top: -30px;
}
}
.wrapper {
background: #0e2043;
position: relative;
width: 100%;
}
.wrapper nav {
position: relative;
display: flex;
max-width: calc(100% - 200px);
margin: 0 auto;
height: 40px;
align-items: center;
justify-content: space-between;
}
nav .content {
display: flex;
align-items: center;
}
nav .content .links {
margin-left: 80px;
display: flex;
}
.content .logo a {
color: #fff;
font-size: 30px;
font-weight: 600;
}
@media (max-width: 739px) {
.logoImage {
margin-top: 10px;
}
}
.content .links li {
list-style: none;
line-height: 30px;
}
.content .links li a,
.content .links li label {
color: #fff;
font-size: 14px;
font-weight: 500;
padding: 9px 17px;
border-radius: 5px;
transition: all 0.3s ease;
}
.content .links li label {
display: none;
}
.content .links li a:hover,
.content .links li label:hover {
background: #323c4e;
}
.wrapper .search-icon,
.wrapper .menu-icon {
color: #fff;
font-size: 18px;
cursor: pointer;
line-height: 70px;
width: 70px;
text-align: center;
}
.wrapper .menu-icon {
display: none;
}
.wrapper #show-search:checked ~ .search-icon i::before {
content: "\f00d";
}
.wrapper .search-box {
position: absolute;
height: 100%;
max-width: calc(100% - 50px);
width: 100%;
opacity: 0;
pointer-events: none;
transition: all 0.3s ease;
}
.wrapper #show-search:checked ~ .search-box {
opacity: 1;
pointer-events: auto;
}
.search-box input {
width: 100%;
height: 100%;
border: none;
outline: none;
font-size: 17px;
color: #fff;
background: #171c24;
padding: 0 100px 0 15px;
}
.search-box input::placeholder {
color: #f2f2f2;
}
.search-box .go-icon {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
line-height: 60px;
width: 70px;
background: #171c24;
border: none;
outline: none;
color: #fff;
font-size: 20px;
cursor: pointer;
}
.wrapper input[type="checkbox"] {
display: none;
}
/* Dropdown Menu code start */
.content .links ul {
position: absolute;
background: #171c24;
z-index: -1;
opacity: 0;
visibility: hidden;
}
.content .links li:hover > ul {
opacity: 1;
visibility: visible;
transition: all 0.3s ease;
}
.content .links ul li a {
display: block;
width: 100%;
line-height: 30px;
border-radius: 0px !important;
}
.content .links ul ul {
position: absolute;
top: 0;
right: calc(-100% + 8px);
}
.content .links ul li {
position: relative;
}
.content .links ul li:hover ul {
top: 0;
}
@media screen and (min-width: 1251px) {
nav .content .links {
margin-left: 30px;
width: 100%;
justify-content: flex-end;
}
}
/* Responsive code start */
@media screen and (max-width: 1250px) {
.wrapper nav {
max-width: 100%;
padding: 0 20px;
}
nav .content .links {
margin-left: 30px;
width: 100%;
justify-content: flex-end;
}
.content .links li a {
padding: 8px 13px;
}
.wrapper .search-box {
max-width: calc(100% - 100px);
}
.wrapper .search-box input {
padding: 0 100px 0 15px;
}
}
@media screen and (max-width: 900px) {
.wrapper .menu-icon {
display: block;
}
.wrapper #show-menu:checked ~ .menu-icon i::before {
content: "\f00d";
}
nav .content .links {
display: block;
position: fixed;
background: #14181f;
height: 100%;
width: 100%;
left: -100%;
margin-left: 0;
max-width: 350px;
overflow-y: auto;
padding-bottom: 100px;
transition: all 0.3s ease;
}
nav #show-menu:checked ~ .content .links {
left: 0%;
}
.content .links li {
margin: 15px 20px;
}
.content .links li a,
.content .links li label {
line-height: 40px;
font-size: 20px;
display: block;
padding: 8px 18px;
cursor: pointer;
}
.content .links li a.desktop-link {
display: none;
}
/* dropdown responsive code start */
.content .links ul,
.content .links ul ul {
position: static;
opacity: 1;
visibility: visible;
background: none;
max-height: 0px;
overflow: hidden;
}
.content .links #show-features:checked ~ ul,
.content .links #show-services:checked ~ ul,
.content .links #show-items:checked ~ ul {
max-height: 100vh;
}
.content .links ul li {
margin: 7px 20px;
}
.content .links ul li a {
font-size: 18px;
line-height: 30px;
border-radius: 5px !important;
}
}
@media screen and (max-width: 400px) {
.wrapper nav {
padding: 0 10px;
}
.content .logo a {
font-size: 27px;
}
.wrapper .search-box {
max-width: calc(100% - 70px);
}
.wrapper .search-box .go-icon {
width: 30px;
right: 0;
}
.wrapper .search-box input {
padding-right: 30px;
}
}
您正在为 .content .links ul
设置不必要的属性。你应该这样做:(我评论了你需要删除的内容)
.content .links ul {
position: absolute;
background: #171c24;
// z-index: -1;
// opacity: 0;
visibility: hidden;
}
.content .links li:hover > ul {
// opacity: 1;
visibility: visible;
transition: all 0.3s ease;
}
目前我正在尝试为我的网页复制此导航栏 https://www.codingnepalweb.com/responsive-dropdown-menu-bar-html-css/。此导航栏设置在固定位置,因此每当我滚动时,它都会停留在特定位置。我不想这样,所以我把它改成了相对位置。但是这样做会使导航栏中的下拉菜单无法使用,因为每当我尝试访问选项时,下拉菜单都会消失。我该怎么做才能使导航栏不固定并且仍然可以访问下拉菜单。
代码沙箱:https://codesandbox.io/s/quizzical-mopsa-71uzh?file=/src/App.tsx
代码:
<div class="wrapper">
<nav>
<input type="checkbox" id="show-search"/>
<input type="checkbox" id="show-menu"/>
<label for="show-menu" class="menu-icon"><i class="fas fa-bars"></i></label>
<div class="content" style={{width:"100%"}}>
<div class="logo"><a href="#">Image</a></div>
<ul class="links">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li>
<a href="#" class="desktop-link">Features</a>
<input type="checkbox" id="show-features"/>
<label for="show-features">Features</label>
<ul>
<li><a href="#">Drop Menu 1</a></li>
<li><a href="#">Drop Menu 2</a></li>
<li><a href="#">Drop Menu 3</a></li>
<li><a href="#">Drop Menu 4</a></li>
</ul>
</li>
<li>
<a href="#" class="desktop-link">Services</a>
<input type="checkbox" id="show-services"/>
<label for="show-services">Services</label>
<ul>
<li><a href="#">Drop Menu 1</a></li>
<li><a href="#">Drop Menu 2</a></li>
<li><a href="#">Drop Menu 3</a></li>
<li>
<a href="#" class="desktop-link">More Items</a>
<input type="checkbox" id="show-items"/>
<label for="show-items">More Items</label>
<ul>
<li><a href="#">Sub Menu 1</a></li>
<li><a href="#">Sub Menu 2</a></li>
<li><a href="#">Sub Menu 3</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Feedback</a></li>
</ul>
</div>
</nav>
</div>
.CSS
@media (max-width: 740px) {
.topnav {
display: none;
}
}
@media (min-width: 740px) {
.logoImage {
margin-top: -30px;
}
}
.wrapper {
background: #0e2043;
position: relative;
width: 100%;
}
.wrapper nav {
position: relative;
display: flex;
max-width: calc(100% - 200px);
margin: 0 auto;
height: 40px;
align-items: center;
justify-content: space-between;
}
nav .content {
display: flex;
align-items: center;
}
nav .content .links {
margin-left: 80px;
display: flex;
}
.content .logo a {
color: #fff;
font-size: 30px;
font-weight: 600;
}
@media (max-width: 739px) {
.logoImage {
margin-top: 10px;
}
}
.content .links li {
list-style: none;
line-height: 30px;
}
.content .links li a,
.content .links li label {
color: #fff;
font-size: 14px;
font-weight: 500;
padding: 9px 17px;
border-radius: 5px;
transition: all 0.3s ease;
}
.content .links li label {
display: none;
}
.content .links li a:hover,
.content .links li label:hover {
background: #323c4e;
}
.wrapper .search-icon,
.wrapper .menu-icon {
color: #fff;
font-size: 18px;
cursor: pointer;
line-height: 70px;
width: 70px;
text-align: center;
}
.wrapper .menu-icon {
display: none;
}
.wrapper #show-search:checked ~ .search-icon i::before {
content: "\f00d";
}
.wrapper .search-box {
position: absolute;
height: 100%;
max-width: calc(100% - 50px);
width: 100%;
opacity: 0;
pointer-events: none;
transition: all 0.3s ease;
}
.wrapper #show-search:checked ~ .search-box {
opacity: 1;
pointer-events: auto;
}
.search-box input {
width: 100%;
height: 100%;
border: none;
outline: none;
font-size: 17px;
color: #fff;
background: #171c24;
padding: 0 100px 0 15px;
}
.search-box input::placeholder {
color: #f2f2f2;
}
.search-box .go-icon {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
line-height: 60px;
width: 70px;
background: #171c24;
border: none;
outline: none;
color: #fff;
font-size: 20px;
cursor: pointer;
}
.wrapper input[type="checkbox"] {
display: none;
}
/* Dropdown Menu code start */
.content .links ul {
position: absolute;
background: #171c24;
z-index: -1;
opacity: 0;
visibility: hidden;
}
.content .links li:hover > ul {
opacity: 1;
visibility: visible;
transition: all 0.3s ease;
}
.content .links ul li a {
display: block;
width: 100%;
line-height: 30px;
border-radius: 0px !important;
}
.content .links ul ul {
position: absolute;
top: 0;
right: calc(-100% + 8px);
}
.content .links ul li {
position: relative;
}
.content .links ul li:hover ul {
top: 0;
}
@media screen and (min-width: 1251px) {
nav .content .links {
margin-left: 30px;
width: 100%;
justify-content: flex-end;
}
}
/* Responsive code start */
@media screen and (max-width: 1250px) {
.wrapper nav {
max-width: 100%;
padding: 0 20px;
}
nav .content .links {
margin-left: 30px;
width: 100%;
justify-content: flex-end;
}
.content .links li a {
padding: 8px 13px;
}
.wrapper .search-box {
max-width: calc(100% - 100px);
}
.wrapper .search-box input {
padding: 0 100px 0 15px;
}
}
@media screen and (max-width: 900px) {
.wrapper .menu-icon {
display: block;
}
.wrapper #show-menu:checked ~ .menu-icon i::before {
content: "\f00d";
}
nav .content .links {
display: block;
position: fixed;
background: #14181f;
height: 100%;
width: 100%;
left: -100%;
margin-left: 0;
max-width: 350px;
overflow-y: auto;
padding-bottom: 100px;
transition: all 0.3s ease;
}
nav #show-menu:checked ~ .content .links {
left: 0%;
}
.content .links li {
margin: 15px 20px;
}
.content .links li a,
.content .links li label {
line-height: 40px;
font-size: 20px;
display: block;
padding: 8px 18px;
cursor: pointer;
}
.content .links li a.desktop-link {
display: none;
}
/* dropdown responsive code start */
.content .links ul,
.content .links ul ul {
position: static;
opacity: 1;
visibility: visible;
background: none;
max-height: 0px;
overflow: hidden;
}
.content .links #show-features:checked ~ ul,
.content .links #show-services:checked ~ ul,
.content .links #show-items:checked ~ ul {
max-height: 100vh;
}
.content .links ul li {
margin: 7px 20px;
}
.content .links ul li a {
font-size: 18px;
line-height: 30px;
border-radius: 5px !important;
}
}
@media screen and (max-width: 400px) {
.wrapper nav {
padding: 0 10px;
}
.content .logo a {
font-size: 27px;
}
.wrapper .search-box {
max-width: calc(100% - 70px);
}
.wrapper .search-box .go-icon {
width: 30px;
right: 0;
}
.wrapper .search-box input {
padding-right: 30px;
}
}
您正在为 .content .links ul
设置不必要的属性。你应该这样做:(我评论了你需要删除的内容)
.content .links ul {
position: absolute;
background: #171c24;
// z-index: -1;
// opacity: 0;
visibility: hidden;
}
.content .links li:hover > ul {
// opacity: 1;
visibility: visible;
transition: all 0.3s ease;
}