主要是我正在从Purecss" Docs"中复制用于实现其下拉菜单的演示代码。
我已经创建了一个Codepen,并将在此处共享代码。
问题在于,在垂直版本中,子菜单项目没有在悬停或单击中揭示。
我认为这是设计是设计的,不确定是否应该在单击触摸设备等上启用其他JavaScript(示例)。
。我所拥有的:
html:
<h1>PureCSS.io Responsive Nav Test</h1>
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous">
<a href="#" class="custom-toggle" id="toggle"><s class="bar"></s><s class="bar"></s><s class="bar"></s></a>
<nav class="custom-wrapper pure-menu custom-restricted-width pure-u-1" id="menu">
<div class="pure-menu pure-menu-horizontal custom-can-transform">
<ul id="menu-header-nav-menu" class="pure-menu-list">
<li class="pure-menu-item">
<a class="pure-menu-link" class='pure-menu-link' href="#">One</a>
</li>
<li class="pure-menu-item">
<a class="pure-menu-link" class='pure-menu-link' href="#">Two</a>
</li>
<li class="pure-menu-item">
<a class="pure-menu-link" class='pure-menu-link' href="#">Three</a>
</li>
<li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover">
<a class="pure-menu-link" class='pure-menu-link' href="#">Parent</a>
<ul class="pure-menu-children">
<li class="pure-menu-item">
<a class="pure-menu-link" class='pure-menu-link' href="#">Child One</a>
</li>
<li class="pure-menu-item">
<a class="pure-menu-link" class='pure-menu-link' href="#">Child Two</a>
</li>
</ul>
</li>
</ul>
</div>
</nav>
CSS:
.site-header {
position: relative;
}
.custom-wrapper {
margin-bottom: 1em;
-webkit-font-smoothing: antialiased;
height: 2.1em;
overflow: hidden;
-webkit-transition: height 0.5s;
-moz-transition: height 0.5s;
-ms-transition: height 0.5s;
transition: height 0.5s;
}
.custom-wrapper.open {
height: 14em;
}
.custom-wrapper {
height: 0;
}
.custom-toggle {
width: 34px;
height: 34px;
position: absolute;
top: 0;
right: 0;
display: none;
}
.custom-toggle {
display: block;
}
.custom-toggle .bar {
background-color: #777;
display: block;
width: 20px;
height: 2px;
border-radius: 100px;
position: absolute;
top: 18px;
right: 7px;
-webkit-transition: all 0.5s;
-moz-transition: all 0.5s;
-ms-transition: all 0.5s;
transition: all 0.5s;
}
.custom-toggle .bar:first-child {
-webkit-transform: translateY(-6px);
-moz-transform: translateY(-6px);
-ms-transform: translateY(-6px);
transform: translateY(-6px);
}
.custom-toggle .bar:last-child {
-webkit-transform: translateY(+6px);
-moz-transform: translateY(+6px);
-ms-transform: translateY(+6px);
transform: translateY(+6px);
}
.custom-toggle.x .bar:last-child {
display: none;
}
.custom-toggle.x .bar {
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.custom-toggle.x .bar:first-child {
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
@media (min-width: 47.999em) {
.custom-toggle {
display: none;
}
.custom-wrapper {
height: 3.2em;
overflow: visible;
}
.pure-menu-children .pure-menu-item {
background-color: #999;
}
}
javaScript:
(function (window, document) {
var menu = document.getElementById('menu'),
WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange':'resize';
function toggleHorizontal() {
[].forEach.call(
document.getElementById('menu').querySelectorAll('.custom-can-transform'),
function(el){
el.classList.toggle('pure-menu-horizontal');
}
);
};
function toggleMenu() {
// set timeout so that the panel has a chance to roll up
// before the menu switches states
if (menu.classList.contains('open')) {
setTimeout(toggleHorizontal, 500);
}
else {
toggleHorizontal();
}
menu.classList.toggle('open');
document.getElementById('toggle').classList.toggle('x');
};
function closeMenu() {
if (menu.classList.contains('open')) {
toggleMenu();
}
}
document.getElementById('toggle').addEventListener('click', function (e) {
toggleMenu();
e.preventDefault();
});
window.addEventListener(WINDOW_CHANGE_EVENT, closeMenu);
})(this, this.document);
我是否正确地假设我需要使用其他脚本处理移动subnav?
发生的事情是"孩子"是片段。
我不确定为什么需要修改基本YUI-PURE-CSS标记,但是为了在这种情况下进行此工作,我修改了以下两个项目的小屏幕尺寸:
.pure-menu-has-children {
position: relative;
}
.pure-menu-children {
left: 3em;
top: 2em;
}
.pure-menu-children
ul
具有position: absolute
,但我不确定 relative
父母是什么。也许是ul
。无论如何,使其相对父母.pure-menu-has-children
li
促进了与父列表项目有关的显示。
我正在使用一种移动第一种方法,因此对于较大的视口的媒体查询,它可以将其还原为框架默认值:
.pure-menu-children {
left: 100%;
top: 0;
}
但是,我认为我更喜欢它,因为它在较小的设备上。这是一个更新的笔。
不完全快乐。也许垂直菜单不需要那么宽。在这种情况下,我也发现需要添加到.pure-menu-link
A text-align: left
,因为child item
似乎仍然基于全宽项目对齐。