Add "priority plus" navigation pattern for masthead links
This commit is contained in:
parent
3925087ac2
commit
4df2367e1c
10 changed files with 264 additions and 46 deletions
|
@ -1,10 +1,12 @@
|
||||||
<div class="masthead">
|
<div class="masthead">
|
||||||
<div class="site-name">
|
<div class="site-name">
|
||||||
<a href="{{ base_path }}/">{{ site.title }}</a>
|
<a href="{{ base_path }}/">{{ site.title }}</a>
|
||||||
</div><!-- /.site-name -->
|
</div>
|
||||||
|
|
||||||
<div class="masthead__menu">
|
<div class="masthead__menu">
|
||||||
<nav id="site-nav">
|
<nav id="site-nav" class="greedy-nav">
|
||||||
<ul>
|
<button><div class="navicon"></div></button>
|
||||||
|
<ul class="visible-links">
|
||||||
{% for link in site.data.navigation %}
|
{% for link in site.data.navigation %}
|
||||||
{% if link.url contains 'http' %}
|
{% if link.url contains 'http' %}
|
||||||
{% assign domain = '' %}
|
{% assign domain = '' %}
|
||||||
|
@ -14,6 +16,7 @@
|
||||||
<li class="masthead__menu-item"><a href="{{ domain }}{{ link.url }}" {% if link.url contains 'http' %}target="_blank"{% endif %}>{{ link.title }}</a></li>
|
<li class="masthead__menu-item"><a href="{{ domain }}{{ link.url }}" {% if link.url contains 'http' %}target="_blank"{% endif %}>{{ link.title }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
<ul class="hidden-links hidden"></ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div><!-- /.top-navigation -->
|
</div>
|
||||||
</div><!-- /.navigation-wrapper -->
|
</div>
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
@include breakpoint($x-large) {
|
@include breakpoint($x-large) {
|
||||||
max-width: $x-large;
|
max-width: $x-large;
|
||||||
}
|
}
|
||||||
|
nav {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
a {
|
a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
@ -51,23 +54,6 @@
|
||||||
.masthead__menu-item {
|
.masthead__menu-item {
|
||||||
display: block;
|
display: block;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
border-bottom: 1px solid $border-color;
|
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
&:last-child {
|
|
||||||
border-bottom: 0 solid transparent;
|
|
||||||
}
|
|
||||||
@include breakpoint($small) {
|
|
||||||
display: inline;
|
|
||||||
margin-right: 25px;
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
border-bottom: 0 solid transparent;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
display: block;
|
|
||||||
padding: 10px 0;
|
|
||||||
@include breakpoint($small) {
|
|
||||||
display: inline;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -54,3 +54,104 @@
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Priority plus navigation
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.greedy-nav {
|
||||||
|
position: relative;
|
||||||
|
min-width: 250px;
|
||||||
|
background: #fff;
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: block;
|
||||||
|
padding: 10px 20px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
position: absolute;
|
||||||
|
height: 100%;
|
||||||
|
right: 0;
|
||||||
|
padding: 0 10px;
|
||||||
|
border: 0;
|
||||||
|
outline: none;
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visible-links {
|
||||||
|
display: inline-table;
|
||||||
|
|
||||||
|
li {
|
||||||
|
display: table-cell;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
a {
|
||||||
|
padding-left: 0;
|
||||||
|
color: $text-color !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
a {
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden-links {
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
right: 0;
|
||||||
|
margin-top: 15px;
|
||||||
|
padding: 5px;
|
||||||
|
border: 1px solid $border-color;
|
||||||
|
border-radius: $border-radius;
|
||||||
|
background: #fff;
|
||||||
|
box-shadow: 0 0 10px rgba(#000, 0.25);
|
||||||
|
|
||||||
|
a {
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: -11px;
|
||||||
|
right: 10px;
|
||||||
|
width: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 10px 10px;
|
||||||
|
border-color: $border-color transparent;
|
||||||
|
display: block;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: -10px;
|
||||||
|
right: 10px;
|
||||||
|
width: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 10px 10px;
|
||||||
|
border-color: #fff transparent;
|
||||||
|
display: block;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
display: block;
|
||||||
|
border-bottom: 1px solid $border-color;
|
||||||
|
&:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
margin-top: 2em;
|
margin-top: 2em;
|
||||||
padding-left: 2em;
|
padding-left: 2em;
|
||||||
padding-right: 2em;
|
padding-right: 2em;
|
||||||
|
z-index: 0;
|
||||||
@include breakpoint($large) {
|
@include breakpoint($large) {
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
|
|
|
@ -151,31 +151,31 @@
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
&:before {
|
&:before {
|
||||||
|
display: block;
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
top: -11px;
|
||||||
|
left: calc(50% - 10px);
|
||||||
|
width: 0;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 0 10px 10px;
|
border-width: 0 10px 10px;
|
||||||
border-color: $border-color transparent;
|
border-color: $border-color transparent;
|
||||||
display: block;
|
|
||||||
width: 0;
|
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
top: -11px;
|
|
||||||
left: calc(50% - 10px);
|
|
||||||
@include breakpoint($large) {
|
@include breakpoint($large) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&:after {
|
&:after {
|
||||||
|
display: block;
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
top: -10px;
|
||||||
|
left: calc(50% - 10px);
|
||||||
|
width: 0;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 0 10px 10px;
|
border-width: 0 10px 10px;
|
||||||
border-color: #fff transparent;
|
border-color: #fff transparent;
|
||||||
display: block;
|
|
||||||
width: 0;
|
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
top: -10px;
|
|
||||||
left: calc(50% - 10px);
|
|
||||||
@include breakpoint($large) {
|
@include breakpoint($large) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,6 +152,62 @@ body:hover .visually-hidden button {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Navicons
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
$navicon-width : 32px;
|
||||||
|
$navicon-height : 4px;
|
||||||
|
|
||||||
|
.navicon {
|
||||||
|
position: relative;
|
||||||
|
width: $navicon-width;
|
||||||
|
height: $navicon-height;
|
||||||
|
background: #fff;
|
||||||
|
margin: auto;
|
||||||
|
transition: 0.3s;
|
||||||
|
|
||||||
|
&:before,
|
||||||
|
&:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
width: $navicon-width;
|
||||||
|
height: $navicon-height;
|
||||||
|
background: #fff;
|
||||||
|
transition: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
top: (-2 * $navicon-height);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
bottom: (-2 * $navicon-height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.close .navicon {
|
||||||
|
// hide the middle line
|
||||||
|
background: transparent;
|
||||||
|
|
||||||
|
// overlay the lines by setting both their top values to 0
|
||||||
|
&:before, &:after{
|
||||||
|
transform-origin: 50% 50%;
|
||||||
|
top: 0;
|
||||||
|
width: $navicon-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
// rotate the lines to form the x shape
|
||||||
|
&:before{
|
||||||
|
transform: rotate3d(0,0,1,45deg);
|
||||||
|
}
|
||||||
|
&:after{
|
||||||
|
transform: rotate3d(0,0,1,-45deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Sticky, fixed to top content
|
Sticky, fixed to top content
|
||||||
========================================================================== */
|
========================================================================== */
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -33,7 +33,6 @@ $(document).ready(function(){
|
||||||
$(".author__urls-wrapper button").on("click", function() {
|
$(".author__urls-wrapper button").on("click", function() {
|
||||||
$(".author__urls").fadeToggle("fast", function() {});
|
$(".author__urls").fadeToggle("fast", function() {});
|
||||||
$(".author__urls-wrapper button").toggleClass("open");
|
$(".author__urls-wrapper button").toggleClass("open");
|
||||||
$(".author__urls-wrapper button:after").css("content", "-");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// init smooth scroll
|
// init smooth scroll
|
||||||
|
|
10
assets/js/main.min.js
vendored
10
assets/js/main.min.js
vendored
File diff suppressed because one or more lines are too long
72
assets/js/plugins/jquery.greedy-navigation.js
Normal file
72
assets/js/plugins/jquery.greedy-navigation.js
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Greedy Navigation
|
||||||
|
*
|
||||||
|
* http://codepen.io/lukejacksonn/pen/PwmwWV
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var $nav = $('#site-nav');
|
||||||
|
var $btn = $('#site-nav button');
|
||||||
|
var $vlinks = $('#site-nav .visible-links');
|
||||||
|
var $hlinks = $('#site-nav .hidden-links');
|
||||||
|
|
||||||
|
var breaks = [];
|
||||||
|
|
||||||
|
function updateNav() {
|
||||||
|
|
||||||
|
var availableSpace = $btn.hasClass('hidden') ? $nav.width() : $nav.width() - $btn.width() - 30;
|
||||||
|
|
||||||
|
// The visible list is overflowing the nav
|
||||||
|
if($vlinks.width() > availableSpace) {
|
||||||
|
|
||||||
|
// Record the width of the list
|
||||||
|
breaks.push($vlinks.width());
|
||||||
|
|
||||||
|
// Move item to the hidden list
|
||||||
|
$vlinks.children().last().prependTo($hlinks);
|
||||||
|
|
||||||
|
// Show the dropdown btn
|
||||||
|
if($btn.hasClass('hidden')) {
|
||||||
|
$btn.removeClass('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
// The visible list is not overflowing
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// There is space for another item in the nav
|
||||||
|
if(availableSpace > breaks[breaks.length-1]) {
|
||||||
|
|
||||||
|
// Move the item to the visible list
|
||||||
|
$hlinks.children().first().appendTo($vlinks);
|
||||||
|
breaks.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide the dropdown btn if hidden list is empty
|
||||||
|
if(breaks.length < 1) {
|
||||||
|
$btn.addClass('hidden');
|
||||||
|
$hlinks.addClass('hidden');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Keep counter updated
|
||||||
|
$btn.attr("count", breaks.length);
|
||||||
|
|
||||||
|
// Recur if the visible list is still overflowing the nav
|
||||||
|
if($vlinks.width() > availableSpace) {
|
||||||
|
updateNav();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Window listeners
|
||||||
|
|
||||||
|
$(window).resize(function() {
|
||||||
|
updateNav();
|
||||||
|
});
|
||||||
|
|
||||||
|
$btn.on('click', function() {
|
||||||
|
$hlinks.toggleClass('hidden');
|
||||||
|
$(this).toggleClass('close');
|
||||||
|
});
|
||||||
|
|
||||||
|
updateNav();
|
Loading…
Reference in a new issue