根据Pure.css documentation,点击Option3
时会出现一个下拉菜单,但事实并非如此。为什么?
.custom-restricted-width {
width: 150px;
}
<link href="https://unpkg.com/purecss@0.6.1/build/pure-min.css" rel="stylesheet" />
<div id="menu">
<div class="pure-menu custom-restricted-width">
<a class="pure-menu-heading" href="index.html">Title</a>
<ul class="pure-menu-list">
<li class="pure-menu-item"><a href="#" class="pure-menu-link">Mune item 1</a>
</li>
<li class="pure-menu-item pure-menu-has-children">
<a href="#" id="menuLink1" class="pure-menu-link">Menu item 2</a>
<ul class="pure-menu-children">
<li class="pure-menu-item"><a href="#" class="pure-menu-link">Submenu item 1</a>
</li>
<li class="pure-menu-item"><a href="#" class="pure-menu-link">Submenu item 2</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
答案 0 :(得分:2)
我再次阅读文档后找到了解决方案:
我们建议启用子菜单通过JavaScript 启用 可访问性。为帮助您入门,an example script写了 在vanilla JS中提供了ARIA支持,有限的子菜单arrow-key 导航,以及使用外部事件或消除菜单的能力 ESC键。
因此,如果您下载上面的示例脚本并将其包含在<script src="js/dropdown.js"></script>
或类似内容中,则下拉菜单将按预期工作。
(function(window, document) {
'use strict';
// Enable drop-down menus in Pure
// Inspired by YUI3 gallery-simple-menu by Julien LeComte
// [https://github.com/yui/yui3-gallery/blob/master/src/gallery-simple-menu/js/simple-menu.js]
function PureDropdown(dropdownParent) {
var PREFIX = 'pure-',
ACTIVE_CLASS_NAME = PREFIX + 'menu-active',
ARIA_ROLE = 'role',
ARIA_HIDDEN = 'aria-hidden',
MENU_OPEN = 0,
MENU_CLOSED = 1,
MENU_PARENT_CLASS_NAME = 'pure-menu-has-children',
MENU_ACTIVE_SELECTOR = '.pure-menu-active',
MENU_LINK_SELECTOR = '.pure-menu-link',
MENU_SELECTOR = '.pure-menu-children',
DISMISS_EVENT = (window.hasOwnProperty &&
window.hasOwnProperty('ontouchstart')) ?
'touchstart' : 'mousedown',
ARROW_KEYS_ENABLED = true,
ddm = this; // drop down menu
this._state = MENU_CLOSED;
this.show = function() {
if (this._state !== MENU_OPEN) {
this._dropdownParent.classList.add(ACTIVE_CLASS_NAME);
this._menu.setAttribute(ARIA_HIDDEN, false);
this._state = MENU_OPEN;
}
};
this.hide = function() {
if (this._state !== MENU_CLOSED) {
this._dropdownParent.classList.remove(ACTIVE_CLASS_NAME);
this._menu.setAttribute(ARIA_HIDDEN, true);
this._link.focus();
this._state = MENU_CLOSED;
}
};
this.toggle = function() {
this[this._state === MENU_CLOSED ? 'show' : 'hide']();
};
this.halt = function(e) {
e.stopPropagation();
e.preventDefault();
};
this._dropdownParent = dropdownParent;
this._link = this._dropdownParent.querySelector(MENU_LINK_SELECTOR);
this._menu = this._dropdownParent.querySelector(MENU_SELECTOR);
this._firstMenuLink = this._menu.querySelector(MENU_LINK_SELECTOR);
// Set ARIA attributes
this._link.setAttribute('aria-haspopup', 'true');
this._menu.setAttribute(ARIA_ROLE, 'menu');
this._menu.setAttribute('aria-labelledby', this._link.getAttribute('id'));
this._menu.setAttribute('aria-hidden', 'true');
[].forEach.call(
this._menu.querySelectorAll('li'),
function(el) {
el.setAttribute(ARIA_ROLE, 'presentation');
}
);
[].forEach.call(
this._menu.querySelectorAll('a'),
function(el) {
el.setAttribute(ARIA_ROLE, 'menuitem');
}
);
// Toggle on click
this._link.addEventListener('click', function(e) {
e.stopPropagation();
e.preventDefault();
ddm.toggle();
});
// Keyboard navigation
document.addEventListener('keydown', function(e) {
var currentLink,
previousSibling,
nextSibling,
previousLink,
nextLink;
// if the menu isn't active, ignore
if (ddm._state !== MENU_OPEN) {
return;
}
// if the menu is the parent of an open, active submenu, ignore
if (ddm._menu.querySelector(MENU_ACTIVE_SELECTOR)) {
return;
}
currentLink = ddm._menu.querySelector(':focus');
// Dismiss an open menu on ESC
if (e.keyCode === 27) {
/* Esc */
ddm.halt(e);
ddm.hide();
}
// Go to the next link on down arrow
else if (ARROW_KEYS_ENABLED && e.keyCode === 40) {
/* Down arrow */
ddm.halt(e);
// get the nextSibling (an LI) of the current link's LI
nextSibling = (currentLink) ? currentLink.parentNode.nextSibling : null;
// if the nextSibling is a text node (not an element), go to the next one
while (nextSibling && nextSibling.nodeType !== 1) {
nextSibling = nextSibling.nextSibling;
}
nextLink = (nextSibling) ? nextSibling.querySelector('.pure-menu-link') : null;
// if there is no currently focused link, focus the first one
if (!currentLink) {
ddm._menu.querySelector('.pure-menu-link').focus();
} else if (nextLink) {
nextLink.focus();
}
}
// Go to the previous link on up arrow
else if (ARROW_KEYS_ENABLED && e.keyCode === 38) {
/* Up arrow */
ddm.halt(e);
// get the currently focused link
previousSibling = (currentLink) ? currentLink.parentNode.previousSibling : null;
while (previousSibling && previousSibling.nodeType !== 1) {
previousSibling = previousSibling.previousSibling;
}
previousLink = (previousSibling) ? previousSibling.querySelector('.pure-menu-link') : null;
// if there is no currently focused link, focus the last link
if (!currentLink) {
ddm._menu.querySelector('.pure-menu-item:last-child .pure-menu-link').focus();
}
// else if there is a previous item, go to the previous item
else if (previousLink) {
previousLink.focus();
}
}
});
// Dismiss an open menu on outside event
document.addEventListener(DISMISS_EVENT, function(e) {
var target = e.target;
if (target !== ddm._link && !ddm._menu.contains(target)) {
ddm.hide();
ddm._link.blur();
}
});
}
function initDropdowns() {
var dropdownParents = document.querySelectorAll('.pure-menu-has-children');
for (var i = 0; i < dropdownParents.length; i++) {
var ddm = new PureDropdown(dropdownParents[i]);
}
}
initDropdowns();
}(this, this.document));
.custom-restricted-width {
width: 150px;
}
<link href="https://unpkg.com/purecss@0.6.1/build/pure-min.css" rel="stylesheet" />
<div id="menu">
<div class="pure-menu custom-restricted-width">
<a class="pure-menu-heading" href="index.html">Title</a>
<ul class="pure-menu-list">
<li class="pure-menu-item"><a href="#" class="pure-menu-link">Mune item 1</a>
</li>
<li class="pure-menu-item pure-menu-has-children">
<a href="#" id="menuLink1" class="pure-menu-link">Menu item 2</a>
<ul class="pure-menu-children">
<li class="pure-menu-item"><a href="#" class="pure-menu-link">Submenu item 1</a>
</li>
<li class="pure-menu-item"><a href="#" class="pure-menu-link">Submenu item 2</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
答案 1 :(得分:1)
默认设置为display:none,在option3
的鼠标悬停时显示检查此代码段
.custom-restricted-width {
width: 150px;
}
.pure-menu-link:hover + .pure-menu-children {
display:block;
}
<link href="https://unpkg.com/purecss@0.6.1/build/pure-min.css" rel="stylesheet" />
<div id="menu">
<div class="pure-menu custom-restricted-width">
<a class="pure-menu-heading" href="index.html">Title</a>
<ul class="pure-menu-list">
<li class="pure-menu-item"><a href="subjects.html" class="pure-menu-link">Option1</a>
</li>
<li class="pure-menu-item"><a href="objective.html" class="pure-menu-link">Option2</a>
</li>
<li class="pure-menu-item pure-menu-has-children">
<a href="#" id="menuLink1" class="pure-menu-link">Option3</a>
<ul class="pure-menu-children">
<li class="pure-menu-item"><a href="subjective-1.html" class="pure-menu-link">Option3-1</a>
</li>
<li class="pure-menu-item"><a href="subjective-2.html" class="pure-menu-link">Option3-2</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
希望有所帮助