javascript - 响应式下拉菜单
问题描述
我在左侧有一个导航 ul,在中间有一个徽标,在右侧有另一个 ul,如下所示:
Home Works Podcast Logo Journal About Contact
悬停时有一个关于作品的下拉菜单,我现在想做两件事:
1 - 在移动版本上,我想像这样将导航更改为菜单图标
Logo Menu
2 - 在菜单上单击它应该打开移动设备的新菜单,但是如何使下拉菜单在移动设备中工作,因为移动设备上没有悬停,以及如何使导航垂直,因为我在左侧有 ul,在右侧有 ul 和中间的标志,我希望它是这样的
Home
Works
Podcast
Journal
About
Contact
这是一支代码笔,对不起,我知道我要求更多:
解决方案
在这里,我只使用一个菜单而不是两个菜单来回答您在移动设备和桌面上的徽标/菜单定位和顺序,并将徽标作为第一个列表项。请参阅整个代码中的注释。
html:
<header id="header">
<nav class="site-navigation">
<ul>
<!-- move logo into li at start of list, ditch the div: -->
<li class="logo"><h1>Humane</h1></li>
<li class="left-menu-item active"><a href="">Home</a></li>
<li class="left-menu-item"><a href="">Works</a>
<ul>
<li><a href="">Metro</a></li>
<li><a href="">Text</a></li>
<li><a href="">Columns</a></li>
<li><a href="">Full Width</a></li>
<li><a href="">Box</a></li>
</ul>
</li>
<li class="left-menu-item"><a href="">Podcast</a></li>
<li class="right-menu-item"><a href="">Journal</a></li>
<li class="right-menu-item"><a href="">About</a>
<ul>
<li><a href="">Agency</a></li>
<li><a href="">Freelancer</a></li>
</ul>
</li>
<li class="right-menu-item"><a href="">Contact</a></li>
</ul>
</nav>
</header>
CSS:
body {
max-width: 1600px;
margin: 0 auto;
}
#header {
padding: 120px 0;
}
.site-navigation ul {
list-style: none;
padding: 0;
}
.site-navigation ul li a {
color: #A3A3A3;
text-decoration: none;
display: block;
}
.site-navigation ul li a:hover {
font-weight: bold;
color: black;
}
.site-navigation ul li a::after {
content: '';
display: block;
width: 0;
height: 1px;
background: #39393B;
transition: width .3s;
}
.site-navigation ul li a:hover::after {
width: 100%;
transition: width .3s;
}
.site-navigation ul li ul {
position: absolute;
visibility: hidden; /* hides sub-menu */
opacity: 0;
z-index: -1;
-webkit-transition: all 0.4s;
-o-transition: all 0.4s;
transition: all 0.4s;
}
.site-navigation ul li ul li {
padding: 20px 0;
}
.site-navigation ul li:hover ul {
visibility: visible; /* shows sub-menu */
opacity: 1;
z-index: 1;
}
.active {
border-bottom: 1px solid #39393B;
}
@media only screen and (max-width : 1019px) {
}
@media only screen and (min-width : 1020px) {
/* add ul so flex is on ul and move into desktop only media query */
.site-navigation ul {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
}
/* move into desktop only media query */
.site-navigation ul li {
display: inline-block;
}
/* move into desktop only media query */
.site-navigation ul li:not(:first-child) {
margin-left: 2em;
}
/* add flex order in your media query for desktop only */
.site-navigation ul li.left-menu-item {
order:1; /* add this */
}
/* add flex order in your media query for desktop only */
.site-navigation ul li.logo {
order:2; /* add this */
}
/* add flex order in your media query for desktop only */
.site-navigation ul li.right-menu-item {
order:3; /* add this */
}
}
推荐阅读
- python - How to introduce a box entry to this code
- wordpress - wordpress using TranslatePress, how do I translate dynamic text?
- algorithm - Why is the A* algorithm considered the industry standard among the shortest path algorithms?
- c - How to determine w/o conversions that a given floating constant can be represented?
- mqtt - Changes in QoS 1 and 2 in MQTT 5
- javascript - 如何正确迭代选项类元素?
- python - 尝试构建一个 json 文件,但读取它时引发 JSONDecodeError("Extra data", s, end)
- laravel - Axios 捕获不适用于 Laravel API,但仅用于错误
- javascript - 使用输入响应更改 CSS
- r - 根据所有其他列中是否存在 0/1 创建指标列