我一直在查看可用的响应式下拉菜单/导航栏,但似乎没有任何工作正常。我主要需要一个不依赖于 JavaScript hack 的基于 CSS 的菜单。
为什么不使用 JS?基于 JS 的解决方案无法在像 Opera Mini 这样的代理浏览器上运行,我们的大多数观众都在使用它,而黑莓浏览器在 JS 上表现不佳。
很多人提倡使用选择菜单进行移动导航。一个有趣的解决方案,但这又依赖于 JS,并且对于嵌套的多级菜单非常乏味。
那么,您遇到过哪些可能适合您的导航系统?
我一直在查看可用的响应式下拉菜单/导航栏,但似乎没有任何工作正常。我主要需要一个不依赖于 JavaScript hack 的基于 CSS 的菜单。
为什么不使用 JS?基于 JS 的解决方案无法在像 Opera Mini 这样的代理浏览器上运行,我们的大多数观众都在使用它,而黑莓浏览器在 JS 上表现不佳。
很多人提倡使用选择菜单进行移动导航。一个有趣的解决方案,但这又依赖于 JS,并且对于嵌套的多级菜单非常乏味。
那么,您遇到过哪些可能适合您的导航系统?
对于没有 java 脚本的多级下拉菜单,我在这里创建了一个示例。
HTML:
<ul>
<li>
Menu 1
<ul>
<li>Menu 1.1</li>
<li>
Menu 1.2
<ul>
<li>Menu 1.2.1</li>
<li>
Menu 1.2.2
<ul>
<li>Menu 1.2.2.1</li>
<li>Menu 1.2.2.2</li>
</ul>
</li>
<li>Menu 1.2.3</li>
<li>Menu 1.2.4</li>
</ul>
</li>
<li>Menu 1.3</li>
</ul>
</li>
<li>Menu 1</li>
<li>Menu 1</li>
<li>Menu 1</li>
<li>Menu 1</li>
</ul>
CSS:
ul{
}
ul li{
display:inline-block;
position:relative;
}
ul li> ul{
display:none;
position:absolute;
left:95%;
top:15px;
}
ul li> ul li{
display:block;
}
ul li:hover> ul{
display:block;
}
You only have one option for a pure-CSS dropdown menu that works with iOS devices: use anchor tags and toggle display: none/block
(short article on iOS Safari hover behavior).
HTML:
<ul>
<li><a href="#">Menu Item 1</a>
<ul>
<li>SubLink1.1</li>
<li>SubLink1.2</li>
<li>SubLink1.3</li>
<li>SubLink1.4</li>
</ul>
</li>
<li><a href="#">Menu Item 2</a>
<ul>
<li>SubLink2.1</li>
<li>SubLink2.2</li>
<li><a href="#">SubMenu3 >></a>
<ul>
<li><a href="#">Nested Link 2.3.1 >></a>
<ul>
<li>Nested Link 2.3.1.1</li>
<li>Nested Link 2.3.1.2</li>
</ul>
</li>
<li>Nested Link 2.3.2</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Menu Item 3</a>
<ul>
<li><a href="#">SubMenu3.1 >></a>
<ul>
<li>Nested Link 3.1.1</li>
<li>Nested Link 3.1.2</li>
<li>Nested Link 3.1.3</li>
<li>Nested Link 3.1.4</li>
<li>Nested Link 3.1.5</li>
<li>Nested Link 3.1.6</li>
</ul>
</li>
<li>SubMenu3.2</li>
</ul>
</li>
</ul>
CSS:
li>ul { display: none; }
li:hover>ul{
display: block;
}
I have tested this on an iPhone 4 iOS6 and it works fine. Also tested on a Kindle Fire. I don't have access to an android phone for testing, so you want to check those devices.
JS Fiddle: http://jsfiddle.net/aGYnU/2/
Making it responsive:
Play with the styles a bit. Change the positioning. Use em
or percentage%
values for the dimensions. You may need to use em
values for the font-sizes within the menu as well (or media queries to set font-size based on viewport size).
Functionality should continue to work.
我要在前面说这个解决方案/模式不是下拉解决方案。但是,这是重新考虑响应式设计导航的一种非常酷的方式。我也不知道您的导航需求的全部范围,所以这对您来说可能不够复杂。
看看内容杂志网站:http ://contentsmagazine.com/
请注意徽标下的主导航。在较小的视口中查看(调整浏览器大小)时,您将看到“探索”链接。点击该链接后,您将进入导航。
事情是这样的:它只是一个简单的锚链接。
模式是这样的:就页面源顺序而言,您的导航实际上是朝向页面底部的。(而且,就语义而言,这很有意义。)页面顶部有一个简单的锚链接,可以跳转到导航(这也是可访问性的最佳实践)。
因此,考虑到移动优先,页面在页面底部加载导航,但用户可以单击锚链接来访问它。由于是锚链接,所以跳跃是瞬间的,实际上几乎感觉就像是一个下拉。
然后,随着视口变大,仅使用 CSS将导航(无论如何)移动到页面顶部,并位于徽标下方。这是通过简单的绝对定位来实现的。
我也试图解决这个问题。而且我认为根本不可能找到满足我所有需求的解决方案。但这对大多数人来说可能已经足够了:http: //jsfiddle.net/selfthinker/T7dDm/
HTML:
<ul>
<li class="dropdown" onclick=""><span>Menu</span>
<ul>
<li><a href="#">Menu item</a></li>
<li><a href="#">Another menu item</a></li>
</ul>
</li>
</ul>
CSS:
li.dropdown > span {
cursor: pointer;
/* style the "Menu" to make it appear clickable (e.g. replace it with a house icon?) */
font-size: 2em;
font-weight: bold;
color: #00c;
}
li.dropdown {
position: relative;
}
li.dropdown:hover > ul,
li.dropdown:active > ul,
li.dropdown:focus > ul {
display: block;
}
li.dropdown > ul {
display: none;
position: absolute;
top: 1.5em;
left: 0;
/* and style away: */
background-color: #ccc;
font-size: 1.5em;
}
我已经在新 iPad 上的 Safari 和 Opera Mini、Android(2.2.2,HTC Desire)的股票浏览器和 Opera Mini 以及一些桌面浏览器上测试了这个。它基本上适用于任何地方。这些是剩下的问题:
移动浏览器通常会在点击时显示/隐藏任何 :hover 内容,如果不是链接的话。使用此代码:
HTML:
<ul>
<li id="showhide">I am visible, and can be tapped/hovered.
<ul id="menu">
<li>Menu item 1</li>
<li>Menu item 2</li>
</ul>
</li>
</ul>
CSS:(无样式)
#showhide{
position:relative;
}
#menu{
position: absolute;
left: -999px
}
#showhide :hover #menu{
left: 0px;
}
看到这是 JSFiddle:http: //jsfiddle.net/VVqBU/
用 div 和锚点做了一个例子。希望能帮助到你!
html:
<div class="mymenu">
<div class="menu">
<div class="menu_title">
menu 1
</div>
<div>
<a href="#">submenu1</a>
<a href="#">submenu2</a>
<a href="#">submenu3</a>
<a href="#">submenu4</a>
<a href="#">submenu5</a>
<a href="#">submenu6</a>
</div>
</div>
<div class="menu">
<div class="menu_title">
menu 2
</div>
<div>
<a href="#">submenu1</a>
<a href="#">submenu2</a>
<a href="#">submenu3</a>
<a href="#">submenu4</a>
</div>
</div>
<div class="menu">
<div class="menu_title">
menu 3
</div>
<div>
<a href="#">submenu1</a>
</div>
</div>
</p>
CSS:
.mymenu{
font-size: 18px;
position:absolute;
z-index:1;
}
.menu{
background: #222;
color: #f9f9f9;
height: 1em;
overflow:hidden;
display:inline-block;
float:left;
padding: 0.3em;
}
.menu:hover{
height: auto;
}
.menu a{
display:block;
color: #abc;
}