mirror of
https://github.com/pure-css/pure.git
synced 2024-11-24 10:44:21 +00:00
Revamp menus
This commit makes .pure-menu smaller, more responsive, and easier to customize. - Remove `.pure-menu-open` - Remove dropdown menu CSS - Add `.pure-menu-responsive` and `.pure-menu-toggle` to make responsive horizontal menus. - Make pure menus *really* easy to customize
This commit is contained in:
parent
1d3314e4a0
commit
d20590c6e5
@ -1,44 +1,20 @@
|
||||
/*csslint adjoining-classes:false, outline-none:false*/
|
||||
/*TODO: Remove this lint rule override after a refactor of this code.*/
|
||||
|
||||
.pure-menu ul {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
/*csslint adjoining-classes: false, box-model:false*/
|
||||
.pure-menu ul, .pure-menu li {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pure-menu.pure-menu-open {
|
||||
visibility: visible;
|
||||
z-index: 2;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pure-menu ul {
|
||||
left: -10000px;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
top: -10000px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.pure-menu > ul { position: relative; }
|
||||
|
||||
.pure-menu-open > ul {
|
||||
left: 0;
|
||||
top: 0;
|
||||
visibility: visible;
|
||||
.pure-menu li {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.pure-menu-open > ul:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.pure-menu li { position: relative; }
|
||||
|
||||
.pure-menu a,
|
||||
.pure-menu .pure-menu-heading {
|
||||
display: block;
|
||||
color: inherit;
|
||||
line-height: 1.5em;
|
||||
padding: 5px 20px;
|
||||
text-decoration: none;
|
||||
@ -52,42 +28,19 @@
|
||||
margin: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.pure-menu.pure-menu-horizontal > ul {
|
||||
.pure-menu-horizontal > ul {
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
zoom: 1;
|
||||
vertical-align: middle;
|
||||
height: 2.4em;
|
||||
}
|
||||
|
||||
.pure-menu li a { padding: 5px 20px; }
|
||||
|
||||
.pure-menu-can-have-children > .pure-menu-label:after {
|
||||
content: '\25B8';
|
||||
float: right;
|
||||
/* These specific fonts have the Unicode char we need. */
|
||||
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', sans-serif;
|
||||
margin-right: -20px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.pure-menu-can-have-children > .pure-menu-label {
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
.pure-menu-separator {
|
||||
background-color: #dfdfdf;
|
||||
display: block;
|
||||
height: 1px;
|
||||
font-size: 0;
|
||||
margin: 7px 2px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.pure-menu-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* FIXED MENU */
|
||||
.pure-menu-fixed {
|
||||
position: fixed;
|
||||
@ -97,7 +50,12 @@
|
||||
}
|
||||
|
||||
|
||||
/* HORIZONTAL MENU CODE */
|
||||
/* HORIZONTAL MENU */
|
||||
.pure-menu-horizontal {
|
||||
width: 100%;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
/* Initial menus should be inline-block so that they are horizontal */
|
||||
.pure-menu-horizontal li {
|
||||
@ -112,26 +70,50 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Content after should be down arrow */
|
||||
.pure-menu-horizontal > .pure-menu-children > .pure-menu-can-have-children > .pure-menu-label:after {
|
||||
content: "\25BE";
|
||||
}
|
||||
/*Add extra padding to elements that have the arrow so that the hover looks nice */
|
||||
.pure-menu-horizontal > .pure-menu-children > .pure-menu-can-have-children > .pure-menu-label {
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
/* Adjusting separator for vertical menus */
|
||||
.pure-menu-horizontal li.pure-menu-separator {
|
||||
.pure-menu-horizontal .pure-menu-separator {
|
||||
height: 50%;
|
||||
width: 1px;
|
||||
margin: 0 7px;
|
||||
}
|
||||
|
||||
/* Submenus should be horizontal separator again */
|
||||
.pure-menu-horizontal li li.pure-menu-separator {
|
||||
.pure-menu-horizontal li .pure-menu-separator {
|
||||
height: 1px;
|
||||
width: auto;
|
||||
margin: 7px 2px;
|
||||
}
|
||||
|
||||
/* RESPONSIVE MENUS */
|
||||
/* Hide the toggle button by default. It will show on small screen sizes */
|
||||
.pure-menu-responsive .pure-menu-toggle {
|
||||
float: right;
|
||||
text-transform: uppercase;
|
||||
font-size: 80%;
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* If the menu is open, and the viewport is larger than 767px, we
|
||||
still want the toggle button to show.
|
||||
*/
|
||||
.pure-menu-responsive.pure-menu-active .pure-menu-toggle {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pure-menu-responsive .pure-menu-toggle:after {
|
||||
content: "\25BE";
|
||||
float: right;
|
||||
/* These specific fonts have the Unicode char we need. */
|
||||
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', sans-serif;
|
||||
margin-right: -15px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.pure-menu-responsive.pure-menu-active ul, .pure-menu-responsive.pure-menu-active li {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pure-menu-responsive.pure-menu-active .pure-menu-separator {
|
||||
width: auto;
|
||||
height: 1px;
|
||||
}
|
||||
|
@ -1,10 +1,16 @@
|
||||
@media (max-width: 480px) {
|
||||
.pure-menu-horizontal {
|
||||
width: 100%;
|
||||
/*adjoining-classes: false*/
|
||||
@media (max-width: 767px) {
|
||||
.pure-menu-responsive .pure-menu-toggle {
|
||||
display: block;
|
||||
}
|
||||
.pure-menu-responsive ul {
|
||||
display: none;
|
||||
}
|
||||
.pure-menu-responsive.pure-menu.active ul {
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
zoom: 1;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.pure-menu-children li {
|
||||
display: block;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
}
|
||||
|
@ -1,77 +1,44 @@
|
||||
/*csslint adjoining-classes:false*/
|
||||
/*TODO: Remove this lint rule override after a refactor of this code.*/
|
||||
|
||||
/* MAIN MENU STYLING */
|
||||
|
||||
.pure-menu.pure-menu-open,
|
||||
.pure-menu.pure-menu-horizontal li .pure-menu-children {
|
||||
background: #fff; /* Old browsers */
|
||||
border: 1px solid #b7b7b7;
|
||||
}
|
||||
|
||||
/* remove borders for horizontal menus */
|
||||
.pure-menu.pure-menu-horizontal,
|
||||
.pure-menu.pure-menu-horizontal .pure-menu-heading {
|
||||
border: none;
|
||||
}
|
||||
|
||||
|
||||
/* LINK STYLES */
|
||||
|
||||
.pure-menu a {
|
||||
border: 1px solid transparent;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
|
||||
}
|
||||
|
||||
.pure-menu a,
|
||||
.pure-menu .pure-menu-can-have-children > li:after {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.pure-menu .pure-menu-can-have-children > li:hover:after {
|
||||
color: #fff;
|
||||
}
|
||||
/*csslint adjoining-classes: false, duplicate-properties:false*/
|
||||
|
||||
/* MENUS STYLING */
|
||||
/* Focus style for a dropdown menu-item when the parent has been opened */
|
||||
.pure-menu .pure-menu-open {
|
||||
background: #dedede;
|
||||
.pure-menu {
|
||||
background: #fff; /* need this to make menus stand out from page background */
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
|
||||
|
||||
.pure-menu a {
|
||||
color: #666;
|
||||
}
|
||||
/* Hover and focus styles */
|
||||
.pure-menu li a:hover,
|
||||
.pure-menu li a:focus {
|
||||
background: #eee;
|
||||
background: #dedede;
|
||||
*background: #dedede;
|
||||
background: rgba(0,0,0,0.15);
|
||||
}
|
||||
|
||||
/* DISABLED STATES */
|
||||
.pure-menu li.pure-menu-disabled a:hover,
|
||||
.pure-menu li.pure-menu-disabled a:focus {
|
||||
background: #fff;
|
||||
color: #bfbfbf;
|
||||
/* need the .pure-menu prefix so that people over-riding `a` don't over-ride pure-menu-disabled too */
|
||||
.pure-menu .pure-menu-disabled a,
|
||||
.pure-menu .pure-menu-disabled a:hover,
|
||||
.pure-menu .pure-menu-disabled a:focus {
|
||||
color: #bababa;
|
||||
*color: #bababa;
|
||||
color: rgba(0,0,0, 0.5);
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.pure-menu .pure-menu-disabled > a {
|
||||
background-image: none;
|
||||
border-color: transparent;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.pure-menu .pure-menu-disabled > a,
|
||||
.pure-menu .pure-menu-can-have-children.pure-menu-disabled > a:after {
|
||||
color: #bfbfbf;
|
||||
}
|
||||
|
||||
/* HEADINGS */
|
||||
.pure-menu .pure-menu-heading {
|
||||
.pure-menu-heading {
|
||||
color: #565d64;
|
||||
text-transform: uppercase;
|
||||
font-size: 90%;
|
||||
margin-top: 0.5em;
|
||||
border-bottom-width: 1px;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-color: #dfdfdf;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.pure-menu-horizontal .pure-menu-heading {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* ACTIVE MENU ITEM */
|
||||
@ -80,7 +47,9 @@
|
||||
}
|
||||
|
||||
/* FIXED MENU */
|
||||
.pure-menu.pure-menu-open.pure-menu-fixed {
|
||||
.pure-menu-fixed {
|
||||
border: none;
|
||||
border-bottom: 1px solid #b7b7b7;
|
||||
*border-bottom: 1px solid #b7b7b7;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.4);
|
||||
}
|
||||
|
@ -41,6 +41,32 @@
|
||||
margin-bottom:15px;
|
||||
}
|
||||
|
||||
.pure-menu-custom {
|
||||
background: red;
|
||||
border:1px solid black;
|
||||
}
|
||||
|
||||
.pure-menu-custom a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.pure-menu-custom a:hover {
|
||||
color: orange;
|
||||
}
|
||||
.pure-menu-custom .pure-menu-disabled a,
|
||||
.pure-menu-custom .pure-menu-disabled a:hover
|
||||
{
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
.pure-menu-custom .pure-menu-heading {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.pure-menu-custom .pure-menu-selected {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body class="pure-skin-sam">
|
||||
@ -60,7 +86,7 @@
|
||||
You can mark the active menu element by adding the <code>.pure-menu-selected</code> class to the list item.
|
||||
</p>
|
||||
|
||||
<div class="pure-menu pure-menu-open pure-menu-horizontal">
|
||||
<div class="pure-menu pure-menu-horizontal">
|
||||
<a href="#" class="pure-menu-heading">Site Title</a>
|
||||
<ul>
|
||||
<li><a href="#">Home</a></li>
|
||||
@ -74,7 +100,7 @@
|
||||
|
||||
<h2>Vertical Menu</h2>
|
||||
|
||||
<div id="vertical-menu1" class="pure-menu pure-menu-open">
|
||||
<div id="vertical-menu1" class="pure-menu">
|
||||
<a href="#" class="pure-menu-heading">Site Title</a>
|
||||
<ul>
|
||||
<li class="pure-menu-selected"><a href="#">Home</a></li>
|
||||
@ -87,7 +113,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="vertical-menu1" class="pure-menu pure-menu-open">
|
||||
<div id="vertical-menu1" class="pure-menu">
|
||||
<ul>
|
||||
<li class="pure-menu-heading">Site Title</li>
|
||||
<li class="pure-menu-selected"><a href="#">Home</a></li>
|
||||
@ -101,44 +127,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
<h2>Add Dropdowns to Menus</h2>
|
||||
|
||||
<p>
|
||||
Adding dropdowns to menus requires the use of JavaScript. The <code>Y.Menu</code> module adds dropdown functionality and the ability to create JavaScript menus. It uses <code>csslist</code> to style these menus, so they look identical.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="horizontal-menu">
|
||||
<a href="#" class="pure-menu-heading">Site Title</a>
|
||||
<ul id="std-menu-items">
|
||||
<li class="pure-menu-selected"><a href="#">Flickr</a></li>
|
||||
<li><a href="#">Messenger</a></li>
|
||||
<li><a href="#">Sports</a></li>
|
||||
<li><a href="#">Finance</a></li>
|
||||
<li class="pure-menu-separator"></li>
|
||||
<li>
|
||||
<a href="#">Other</a>
|
||||
<ul>
|
||||
<li class="pure-menu-heading">More from Yahoo!</li>
|
||||
<li class="pure-menu-separator"></li>
|
||||
<li><a href="#">Autos</a></li>
|
||||
<li><a href="#">Flickr</a></li>
|
||||
<li><a href="#">Answers</a></li>
|
||||
<li>
|
||||
<a href="#">Even More</a>
|
||||
<ul>
|
||||
<li><a href="#">Horoscopes</a></li>
|
||||
<li><a href="#">Games</a></li>
|
||||
<li><a href="#">Jobs</a></li>
|
||||
<li><a href="#">OMG</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<h2>Fixed Menus</h2>
|
||||
|
||||
<p>
|
||||
@ -158,6 +146,39 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2>Responsive Menu</h2>
|
||||
|
||||
<div class="pure-menu pure-menu-horizontal pure-menu-2 pure-menu-responsive">
|
||||
<a href="#" class="pure-menu-heading">Site Title</a>
|
||||
<a href="#" class="pure-menu-toggle">Open</a>
|
||||
<ul>
|
||||
<li class="pure-menu-selected"><a href="#">Home</a></li>
|
||||
<li><a href="#">Flickr</a></li>
|
||||
<li><a href="#">Messenger</a></li>
|
||||
<li class="pure-menu-separator"> </li>
|
||||
<li class="pure-menu-disabled"><a href="#">Sports</a></li>
|
||||
<li><a href="#">Finance</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2>Customizing Menu</h2>
|
||||
|
||||
|
||||
<div class="pure-menu pure-menu-horizontal pure-menu-custom pure-menu-responsive">
|
||||
<a href="#" class="pure-menu-heading">Site Title</a>
|
||||
<a href="#" class="pure-menu-toggle">Open</a>
|
||||
<ul>
|
||||
<li class="pure-menu-selected"><a href="#">Home</a></li>
|
||||
<li><a href="#">Flickr</a></li>
|
||||
<li><a href="#">Messenger</a></li>
|
||||
<li class="pure-menu-separator"> </li>
|
||||
<li class="pure-menu-disabled"><a href="#">Sports</a></li>
|
||||
<li><a href="#">Finance</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<h2>Paginator</h2>
|
||||
|
||||
<ul class="pure-paginator">
|
||||
@ -173,29 +194,28 @@
|
||||
</div>
|
||||
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
|
||||
<script>
|
||||
var Y = YUI({
|
||||
fetchCSS: false,
|
||||
YUI({
|
||||
classNamePrefix: 'pure'
|
||||
}).use('gallery-sm-menu', 'event-tap', 'node-base', function (Y) {
|
||||
}).use('node-base', function (Y) {
|
||||
var toggle = Y.all(".pure-menu-toggle"),
|
||||
i = 0,
|
||||
ACTIVE = 'pure-menu-active';
|
||||
|
||||
//Y.config.classNamePrefix = 'pure';
|
||||
for (; i < toggle.size(); i++) {
|
||||
|
||||
var horizontalMenu = new Y.Menu({
|
||||
container: '#horizontal-menu',
|
||||
sourceNode: '#std-menu-items',
|
||||
orientation: 'horizontal',
|
||||
hideOnOutsideClick: false
|
||||
toggle.item(i).on('click', function (e) {
|
||||
var parent = e.currentTarget.get('parentNode');
|
||||
|
||||
e.preventDefault();
|
||||
parent.toggleClass(ACTIVE);
|
||||
if (parent.hasClass(ACTIVE)) {
|
||||
e.currentTarget.set('text', 'Close');
|
||||
}
|
||||
else {
|
||||
e.currentTarget.set('text', 'Open')
|
||||
}
|
||||
});
|
||||
|
||||
horizontalMenu.render();
|
||||
horizontalMenu.show();
|
||||
|
||||
|
||||
Y.one('#showFixedMenuBtn').on('tap', function (e) {
|
||||
var fixedMenu = Y.one('#fixed-menu');
|
||||
fixedMenu.toggleClass('pure-menu-open');
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
Loading…
Reference in New Issue
Block a user