尝试使用CSS和HTML创建下拉导航栏。我无法从导航固定栏中取消嵌套列表。
我遵循了w3schools,但是我开始迷失在代码中。只需要有人查看我的代码即可。我觉得我的代码结构不正确。我注意到在线youtube视频上的人使用li a, .dropbtn
之类的东西,但我不理解这些细目。我读过的html / css书说,您可以通过在CSS的多个部分添加空格(例如html body {margin: 0;}
)来将CSS应用于HTML的多个部分。此时我迷路了
* {
font-family: arial, sans-serif;
box-sizing: border-box;
}
html body {
margin: 0;
padding: 0;
}
.nav {
position: fixed;
top: 0;
left: 0;
background-color: rgba(255, 255, 255, .8);
font-size: 20px;
float: left;
border-radius: 0px;
border: none;
width: 100%;
overflow: hidden;
margin: 0;
list-style-type: none;
padding: 25px;
display: flex;
list-style: none;
flex-direction: row;
/* vertical alignement */
align-items: center;
/* how you want horizontal distribution */
/* space-evenly | space-around | space-between */
justify-content: space-evenly;
}
.item {
color: black;
font-weight: bold;
text-transform: uppercase;
display: inline-block;
}
.printing {
display: inline-block;
font-weight: bold;
text-transform: uppercase;
display: inline-block;
color: #2F4F4F;
}
.printing>li {
display: none;
background-color: #2F4F4F;
position: absolute;
z-index: 1;
color: black;
}
.flex-container {
display: flex;
flex-direction: column;
margin: 0;
padding-top: 100px;
}
.flex-container > div {
text-align: center;
margin: 0;
padding: 0;
}
@media screen and (max-width:500px) {
.column {
width: 100%;
}
}
ul {
list-style: none;
}
<nav>
<ul class="nav">
<li class="item">
<a href="main.html">
<img src="Images/Navigation/Full Intak Logo-01.png" alt="Home" />
</a>
</li>
<li class="printing">Printing</li>
<ul>
<li>Labels & Stickers</li>
<li>Banners</li>
<li>A-Frame</li>
<li>Menu Boards</li>
<li>Takeout Menus</li>
<li>Business Cards</li>
<li>Dine-In Menus</li>
<li>Posters</li>
<li>Books</li>
<li>Envelopes</li>
<li>Chinese Wedding Cards</li>
<li>Flyers</li>
<li>Letterheads</li>
<li>Brochures</li>
<li>Vinyl</li>
<li>NCR Forms</li>
<li>Catalogues</li>
</ul>
<li class="item">Graphic Design</li>
<li class="item">Chinese Calendars</li>
<li class="item">FAQS</li>
<li class="item">Contact Us</li>
</ul>
</nav>
<body>
<div class="flex-container"
<div><img src="Images/Printing/Dinner Menus-01.jpg" style="max-width:100%;height:auto;" alt="Banners" /></div>
<div><img src="Images/Printing/Banner.jpg" style="max-width:100%;height:auto;" alt="Posters" /></div>
<div><img src="Images/Printing/Banner.jpg" style="max-width:100%;height:auto;" alt="Poster" /></div>
</div>
</body>
我希望它在当前的固定导航栏下方创建一个辅助导航,但是它只是在我要下拉的标签旁边创建一个列表。
答案 0 :(得分:1)
您可能误解了书中的某些内容。使用空格将缩小选择范围,而不是在指定后代时选择多个元素。
使用空格时,是指包含在左侧元素中的右侧元素。就您而言
html body
表示您将元素 html 中的元素 body 定位为目标。
如果使用了以下选择器:
.class1 .class2
它将在class1元素内部处理class 2类的所有元素。 另一方面,逗号仅用于分隔多个选择器,这表示
html, body
CSS属性将同时处理-html和正文。就像示例中一样
.class1, .class2
CSS属性将添加到class1和/或class2的所有元素中,而不管它们的父级为何。
答案 1 :(得分:1)
看起来还不错!基本思想是您必须display: none
子菜单,然后将其悬停在父菜单上,显示它:-)
我在下面略微修改了您的代码,以向您展示我的意思。
.nav {
display: flex;
align-items: center;
justify-content: space-evenly;
}
.sub-menu {
display: none;
position: absolute;
}
ul {
list-style: none;
padding: 0;
}
.item.has-children:hover .sub-menu {
display: block;
}
<nav>
<ul class="nav">
<li class="item">
<a href="main.html">
<img src="Images/Navigation/Full Intak Logo-01.png" alt="Home" />
</a>
</li>
<li class="item has-children">Printing
<ul class="sub-menu">
<li>Labels & Stickers</li>
<li>Banners</li>
<li>A-Frame</li>
<li>Menu Boards</li>
<li>Takeout Menus</li>
<li>Business Cards</li>
<li>Dine-In Menus</li>
<li>Posters</li>
<li>Books</li>
<li>Envelopes</li>
<li>Chinese Wedding Cards</li>
<li>Flyers</li>
<li>Letterheads</li>
<li>Brochures</li>
<li>Vinyl</li>
<li>NCR Forms</li>
<li>Catalogues</li>
</ul>
</li>
<li class="item">Graphic Design</li>
<li class="item">Chinese Calendars</li>
<li class="item">FAQS</li>
<li class="item">Contact Us</li>
</ul>
</nav>
答案 2 :(得分:0)
我要告诉你的第一件事是,不要关注W3Schools!没有!来到你所做的事情...
html body {
我坚信您想拥有:
html, body {
上面的逗号很重要。
接下来的事情是,首先隐藏子菜单。可以使用应用于右侧选择器的display: none;
来完成此操作,假设您在下拉列表<ul>
中有一个<li>
。
li ul {display: none;}
因此,谈论以上内容,那就是您出错了。 <ul>
内不能有<li>
以外的其他对象作为直接子代。您还有另一个<ul>
,这是绝对错误的。
即使在W3Schools中,您提供的链接也正确无误:
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li class="dropdown">
<a href="javascript:void(0)" class="dropbtn">Dropdown</a>
<div class="dropdown-content">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</div>
</li>
</ul>
因此,我们将HTML更改为:
<nav>
<ul class="nav">
<li class="item">
<a href="main.html">
<img src="Images/Navigation/Full Intak Logo-01.png" alt="Home" />
</a>
</li>
<li class="printing">
Printing
<ul>
<li>Labels & Stickers</li>
<li>Banners</li>
<li>A-Frame</li>
<li>Menu Boards</li>
<li>Takeout Menus</li>
<li>Business Cards</li>
<li>Dine-In Menus</li>
<li>Posters</li>
<li>Books</li>
<li>Envelopes</li>
<li>Chinese Wedding Cards</li>
<li>Flyers</li>
<li>Letterheads</li>
<li>Brochures</li>
<li>Vinyl</li>
<li>NCR Forms</li>
<li>Catalogues</li>
</ul>
</li>
<li class="item">Graphic Design</li>
<li class="item">Chinese Calendars</li>
<li class="item">FAQS</li>
<li class="item">Contact Us</li>
</ul>
</nav>
现在,我们需要将<ul>
内的<li>
悬停在<li>
上才能显示。我们可以使用CSS来做到这一点:
li:hover ul {display: block;}
但是您遇到的问题很严重,因为<ul>
没有正确地对准它。为此,您需要position
ing。
li {
position: relative;
}
li ul {
display: none;
position: absolute;
}
li:hover ul {
display: block;
}
这很好用,但是存在overflow
引起的overflow: hidden
问题。现在,将其从nav
中删除,以进行排序。剩下的唯一事情就是将<ul>
菜单定位在正确的位置。
li ul {
display: none;
position: absolute;
left: -35px;
background-color: #fff;
margin: 20px 0 0;
width: 250px;
padding: 25px;
}
工作演示
现在您将获得一个很棒的CSS菜单。公平地说,您不需要其余的代码,但是我没有删除它。希望这没事。这是您的最终摘要:
* {
font-family: arial, sans-serif;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
}
li {
position: relative;
}
li ul {
display: none;
position: absolute;
left: -35px;
background-color: #fff;
margin: 20px 0 0;
width: 250px;
padding: 25px;
}
li:hover ul {
display: block;
}
.nav {
position: fixed;
top: 0;
left: 0;
background-color: rgba(255, 255, 255, .8);
font-size: 20px;
float: left;
border-radius: 0px;
border: none;
width: 100%;
margin: 0;
list-style-type: none;
padding: 25px;
display: flex;
list-style: none;
flex-direction: row;
/* vertical alignement */
align-items: center;
/* how you want horizontal distribution */
/* space-evenly | space-around | space-between */
justify-content: space-evenly;
}
.item {
color: black;
font-weight: bold;
text-transform: uppercase;
display: inline-block;
}
.printing {
display: inline-block;
font-weight: bold;
text-transform: uppercase;
display: inline-block;
color: #2F4F4F;
}
.printing>li {
display: none;
background-color: #2F4F4F;
position: absolute;
z-index: 1;
color: black;
}
ul {
list-style: none;
}
<nav>
<ul class="nav">
<li class="item">
<a href="main.html">
<img src="Images/Navigation/Full Intak Logo-01.png" alt="Home" />
</a>
</li>
<li class="printing">
Printing
<ul>
<li>Labels & Stickers</li>
<li>Banners</li>
<li>A-Frame</li>
<li>Menu Boards</li>
<li>Takeout Menus</li>
<li>Business Cards</li>
<li>Dine-In Menus</li>
<li>Posters</li>
<li>Books</li>
<li>Envelopes</li>
<li>Chinese Wedding Cards</li>
<li>Flyers</li>
<li>Letterheads</li>
<li>Brochures</li>
<li>Vinyl</li>
<li>NCR Forms</li>
<li>Catalogues</li>
</ul>
</li>
<li class="item">Graphic Design</li>
<li class="item">Chinese Calendars</li>
<li class="item">FAQS</li>
<li class="item">Contact Us</li>
</ul>
</nav>
预览