Version 1.2.2 - added new menu and improved a11y

This commit is contained in:
Alexander Agnarson 2020-08-11 19:16:31 +02:00
parent 8c7cea317b
commit f6c6ad583a
10 changed files with 868 additions and 194 deletions

View file

@ -44,12 +44,8 @@
</div><!--/#footer-widgets-->
<?php } ?>
<?php if ( has_nav_menu( 'footer' ) ): ?>
<nav class="nav-container group" id="nav-footer">
<div class="nav-toggle"><i class="fas fa-bars"></i></div>
<div class="nav-text"><!-- put your mobile menu text here --></div>
<div class="nav-wrap"><?php wp_nav_menu( array('theme_location'=>'footer','menu_class'=>'nav container group','container'=>'','menu_id'=>'','fallback_cb'=>false) ); ?></div>
</nav><!--/#nav-footer-->
<?php if ( has_nav_menu('footer') ): ?>
<?php \AlxMedia\Nav::nav_menu(array('theme_location'=>'footer','menu_id' => 'nav-footer','fallback_cb'=> false)); ?>
<?php endif; ?>
<div id="footer-bottom">

View file

@ -88,6 +88,19 @@ if ( ! function_exists( 'minimer_setup' ) ) {
add_action( 'after_setup_theme', 'minimer_setup' );
/* Custom navigation
/* ------------------------------------ */
require_once 'functions/nav.php';
$nav = new \AlxMedia\Nav();
$nav->enqueue(
[
'script' => 'js/nav.js',
'inline' => false,
]
);
$nav->init();
/* Custom logo
/* ------------------------------------ */
if ( ! function_exists( 'minimer_custom_logo' ) ) {

View file

@ -165,21 +165,21 @@ body.page .entry-footer { max-width: '.esc_attr( get_theme_mod('page-content-wid
#header .social-links { border-left-color: rgba(255,255,255,0.3); }
#header .social-links .social-tooltip { color: rgba(255,255,255,0.8); }
#header .social-links .social-tooltip:hover { color: #fff; }
.toggle-search { color: rgba(255,255,255,0.8); }
.toggle-search:hover,
.toggle-search.active { color: #fff; }
@media only screen and (min-width: 720px) {
#nav-header .nav > li > a { color: rgba(255,255,255,0.8); }
#nav-header .nav > li > a:hover,
#nav-header .nav > li:hover > a { color: #fff; }
#nav-header .nav > li.current_page_item > a,
#nav-header .nav > li.current-menu-item > a,
#nav-header .nav > li.current-menu-ancestor > a,
#nav-header .nav > li.current-post-parent > a { color: #fff; }
}
@media only screen and (max-width: 719px) {
.site-title { border-bottom-color: rgba(255,255,255,0.2)!important; }
}
@media only screen and (min-width: 720px) {
.toggle-search .svg-icon { fill: #fff; }
}
#header .nav-menu:not(.mobile) a { color: rgba(255,255,255,0.8); }
#header .nav-menu:not(.mobile) a:hover { color: #fff; }
#header .nav-menu:not(.mobile) button { color: #fff; }
#header .nav-menu:not(.mobile) button.active { background: rgba(255,255,255,0.15); }
#header .nav-menu:not(.mobile) button .svg-icon { fill: rgba(255,255,255,0.5); }
#header .nav-menu:not(.mobile) li.current_page_item > span > a,
#header .nav-menu:not(.mobile) li.current-menu-item > span > a,
#header .nav-menu:not(.mobile) li.current-menu-ancestor > span > a,
#header .nav-menu:not(.mobile) li.current-post-parent > span > a { color: #fff; }
'."\n";
}
// comment bubble color
@ -200,27 +200,28 @@ body.page .entry-footer { max-width: '.esc_attr( get_theme_mod('page-content-wid
// footer menu color
if ( get_theme_mod('color-footer-menu','#ffffff') != '#ffffff' ) {
$styles .= '
#nav-footer.nav-container,
#footer .nav-menu:not(.mobile),
#footer .nav-menu.mobile,
#footer-bottom #back-to-top { background: '.esc_attr( get_theme_mod('color-footer-menu') ).'; }
#footer-bottom #back-to-top { color: #fff; }
#footer-bottom #back-to-top:hover { color: rgba(255,255,255,0.8); }
#nav-footer .nav-toggle { color: #fff; }
@media only screen and (min-width: 720px) {
#nav-footer .nav > li > a { color: rgba(255,255,255,0.8); }
#nav-footer .nav > li > a:hover,
#nav-footer .nav > li:hover > a { color: #fff; }
#nav-footer .nav > li.current_page_item > a,
#nav-footer .nav > li.current-menu-item > a,
#nav-footer .nav > li.current-menu-ancestor > a,
#nav-footer .nav > li.current-post-parent > a { color: #fff; }
}
@media only screen and (max-width: 719px) {
#nav-footer .nav li a { color: rgba(255,255,255,0.8); border-top-color: rgba(255,255,255,0.2); }
#nav-footer .nav li > a:hover { background: rgba(0,0,0,0.05); color: #fff; }
#nav-footer .nav li.current_page_item > a,
#nav-footer .nav li.current-menu-item > a,
#nav-footer .nav li.current-post-parent > a { background: rgba(0,0,0,0.05); color: #fff; }
}
#footer .nav-menu:not(.mobile) a { color: rgba(255,255,255,0.8); }
#footer .nav-menu:not(.mobile) a:hover { color: #fff; }
#footer .nav-menu:not(.mobile) button { color: #fff; }
#footer .nav-menu:not(.mobile) button.active { background: rgba(255,255,255,0.15); }
#footer .nav-menu:not(.mobile) button .svg-icon { fill: rgba(255,255,255,0.5); }
#footer .nav-menu:not(.mobile) li.current_page_item > span > a,
#footer .nav-menu:not(.mobile) li.current-menu-item > span > a,
#footer .nav-menu:not(.mobile) li.current-menu-ancestor > span > a,
#footer .nav-menu:not(.mobile) li.current-post-parent > span > a { color: #fff; }
#footer .nav-menu.mobile ul li a { color: #fff; }
#footer .nav-menu.mobile ul li .menu-item-wrapper,
#footer .nav-menu.mobile ul ul li .menu-item-wrapper { border-bottom: 1px solid rgba(255,255,255,0.15); }
#footer .nav-menu.mobile > div > ul > li:first-child .menu-item-wrapper { border-top: 1px solid rgba(255,255,255,0.15); }
#footer .nav-menu.mobile ul button,
#footer .nav-menu.mobile ul ul button { border-left: 1px solid rgba(255,255,255,0.15); }
#footer .nav-menu .svg-icon { fill: #fff; }
#footer .menu-toggle-icon span { background: #fff; }
#footer { border-top: 0; }
'."\n";
}

295
functions/nav.php Normal file
View file

@ -0,0 +1,295 @@
<?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase
/**
* An accessible and mobile-friendly implementation for navigation menus.
*/
namespace AlxMedia;
/**
* Object containing all methods and hooks to modify default menus.
*/
class Nav {
/**
* Whether the script has already been enqueued or not.
*
* @static
*
* @access protected
*
* @var bool
*/
protected static $enqueued = false;
/**
* Whether we added scripts & styles inline or not.
*
* @access protected
*
* @var bool
*/
protected $inline = false;
/**
* An array containing URLs for our assets.
*
* @access protected
*
* @var array
*/
protected $assets = [];
/**
* Prefix for asset handles.
*
* @access protected
*
* @var string
*/
protected $handle_prefix = 'alexmedia-nav';
/**
* Init.
*
* @access public
*
* @return void
*/
public function init() {
add_filter( 'walker_nav_menu_start_el', [ $this, 'add_nav_sub_menu_buttons' ], 10, 2 );
add_filter( 'nav_menu_item_title', [ $this, 'nav_menu_item_title' ], 10, 4 );
}
/**
* Enqueue assets.
*
* @access public
*
* @param array $args The arguments [script=>URL,style=>URL,inline=>true|false].
*
* @return void
*/
public function enqueue( $args = false ) {
if ( ! $args ) {
return;
}
// Early exit if we've already enqueued our assets.
if ( self::$enqueued ) {
return;
}
$args = wp_parse_args(
$args,
[
'script' => false,
'style' => false,
'inline' => false,
]
);
$this->assets['script'] = $args['script'];
$this->assets['style'] = $args['style'];
$this->inline = $args['inline'];
if ( $this->inline ) {
add_action( 'wp_footer', [ $this, 'inline_assets' ] );
} else {
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_assets' ] );
}
self::$enqueued = true;
}
/**
* Inline assets.
*
* @access public
*
* @return void
*/
public function inline_assets() {
if ( $this->assets['script'] ) {
echo '<script>';
include get_theme_file_path( $this->assets['script'] );
echo '</script>';
}
if ( $this->assets['style'] ) {
echo '<style>';
include get_theme_file_path( $this->assets['style'] );
echo '</style>';
}
}
/**
* Enqueue assets.
*
* @access public
*
* @return void
*/
public function enqueue_assets() {
if ( $this->assets['style'] ) {
wp_enqueue_style(
$this->handle_prefix . '-style',
get_theme_file_uri( $this->assets['style'] ),
[],
filemtime( get_theme_file_path( $this->assets['style'] ) )
);
}
if ( $this->assets['script'] ) {
wp_enqueue_script(
$this->handle_prefix . '-script',
get_theme_file_uri( $this->assets['script'] ),
[],
filemtime( get_theme_file_path( $this->assets['script'] ) ),
true
);
}
}
/**
* A wrapper for the wp_nav_menu function, adding our custom HTML for the expand/collapse button.
*
* @static
*
* @access public
*
* @param array $args The arguments to pass to wp_nav_menu().
* @param string|false $toggle_label The label for our toggle button.
* @param string $nav_classes CSS classes to add to the <nav> element.
* If left false then the default will be used.
* @return void
*/
public static function nav_menu( $args, $toggle_label = false, $nav_classes = 'main-navigation nav-menu' ) {
if ( false === $toggle_label ) {
$toggle_label = '<span class="screen-reader-text">' . esc_html__( 'Expand Menu', 'gridzone' ) . '</span><div class="menu-toggle-icon"><span></span><span></span><span></span></div>';
}
?>
<nav id="<?php echo esc_attr( $args['menu_id'] ); ?>-nav" class="<?php echo esc_attr( $nav_classes ); ?>">
<button class="menu-toggle" aria-controls="primary-menu" aria-expanded="false">
<?php
/**
* Note to code reviewers:
* The $toggle_label variable is hardcoded and there is no user input involved.
* There is no need to escape hardcoded strings, so we can ignore the PHPCS notices here.
*/
echo $toggle_label; // phpcs:ignore WordPress.Security.EscapeOutput
?>
</button>
<?php wp_nav_menu( $args ); ?>
</nav>
<?php
}
/**
* Filter the HTML output of a nav menu item to add the dropdown button that reveal the sub-menu.
*
* @access public
*
* @param string $item_output Nav menu item HTML.
* @param object $item Nav menu item.
*
* @return string Modified nav menu item HTML.
*/
public function add_nav_sub_menu_buttons( $item_output, $item ) {
$html = '<span class="menu-item-wrapper">';
// Skip when the item has no sub-menu.
if ( in_array( 'menu-item-has-children', $item->classes, true ) ) {
$html = '<span class="menu-item-wrapper has-arrow">';
$item_output .= '<button onClick="alxMediaMenu.toggleItem(this)"><span class="screen-reader-text">' . esc_html__( 'Toggle Child Menu', 'gridzone' ) . '</span><svg class="svg-icon" aria-hidden="true" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" width="14" height="8" viewBox="0 0 20 12"><polygon fill="" fill-rule="evenodd" points="1319.899 365.778 1327.678 358 1329.799 360.121 1319.899 370.021 1310 360.121 1312.121 358" transform="translate(-1310 -358)"></polygon></svg></button>';
}
$html .= $item_output;
$html .= '</span>';
return $html;
}
/**
* Filters a menu item's title.
*
* This is an accessibility improvement.
* Verbally highlights the current item for screen-readers.
*
* @access public
*
* @param string $title The menu item's title.
* @param WP_Post $item The current menu item.
* @param stdClass $args An object of wp_nav_menu() arguments.
* @param int $depth Depth of menu item. Used for padding.
*
* @return string
*/
public function nav_menu_item_title( $title, $item, $args, $depth ) {
// Classes that can be used to indicate the currently active menu item.
$is_current_classes = [
'current-menu-item',
'current_page_item',
];
// Classes that can be used to indicate the parent of a currently active menu item.
$is_current_parent_classes = [
'current-page-ancestor',
'current-menu-ancestor',
'current-menu-parent',
'current-page-parent',
'current_page_parent',
'current_page_ancestor',
];
// Figure out if this menu-item is the current one.
$is_current = false;
foreach ( $is_current_classes as $class ) {
if ( in_array( $class, $item->classes, true ) ) {
$is_current = true;
break;
}
}
// Figure out if this menu-item is a parent of the current one.
$is_current_parent = false;
if ( ! $is_current ) {
foreach ( $is_current_parent_classes as $class ) {
if ( in_array( $class, $item->classes, true ) ) {
$is_current_parent = true;
break;
}
}
}
// Change the title text for current items.
if ( $is_current ) {
/**
* Use sprintf() to allow LTR languages to reverse the order
* and put the title before the prefix.
*/
return sprintf(
/* Translators: %1$s: "Current Page:". %2$s: The menu-item title. */
__( '<span class="screen-reader-text">%1$s </span>%2$s', 'gridzone' ),
esc_html__( 'Current Page:', 'gridzone' ),
$title
);
}
// Change the title text for current item parents.
if ( $is_current_parent ) {
/**
* Use sprintf() to allow LTR languages to reverse the order
* and put the title before the prefix.
*/
return sprintf(
/* Translators: %1$s: "Current Page Parent:". %2$s: The menu-item title. */
__( '<span class="screen-reader-text">%1$s </span>%2$s', 'gridzone' ),
esc_html__( 'Current Page Parent', 'gridzone' ),
$title
);
}
return $title;
}
}

View file

@ -19,7 +19,7 @@
<div id="wrapper">
<div id="header-sticky">
<header id="header" class="hide-on-scroll-down">
<header id="header" class="hide-on-scroll-down nav-menu-dropdown-left">
<div class="group pad">
<?php echo minimer_site_title(); ?>
@ -31,7 +31,10 @@
<?php endif; ?>
<?php if ( get_theme_mod( 'header-search', 'on' ) == 'on' ): ?>
<div class="toggle-search"><i class="fas fa-search"></i></div>
<button class="toggle-search">
<svg class="svg-icon" id="svg-search" aria-hidden="true" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" width="23" height="23" viewBox="0 0 23 23"><path d="M38.710696,48.0601792 L43,52.3494831 L41.3494831,54 L37.0601792,49.710696 C35.2632422,51.1481185 32.9839107,52.0076499 30.5038249,52.0076499 C24.7027226,52.0076499 20,47.3049272 20,41.5038249 C20,35.7027226 24.7027226,31 30.5038249,31 C36.3049272,31 41.0076499,35.7027226 41.0076499,41.5038249 C41.0076499,43.9839107 40.1481185,46.2632422 38.710696,48.0601792 Z M36.3875844,47.1716785 C37.8030221,45.7026647 38.6734666,43.7048964 38.6734666,41.5038249 C38.6734666,36.9918565 35.0157934,33.3341833 30.5038249,33.3341833 C25.9918565,33.3341833 22.3341833,36.9918565 22.3341833,41.5038249 C22.3341833,46.0157934 25.9918565,49.6734666 30.5038249,49.6734666 C32.7048964,49.6734666 34.7026647,48.8030221 36.1716785,47.3875844 C36.2023931,47.347638 36.2360451,47.3092237 36.2726343,47.2726343 C36.3092237,47.2360451 36.347638,47.2023931 36.3875844,47.1716785 Z" transform="translate(-20 -31)"></path></svg>
<svg class="svg-icon" id="svg-close" aria-hidden="true" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" width="23" height="23" viewBox="0 0 16 16"><polygon fill="" fill-rule="evenodd" points="6.852 7.649 .399 1.195 1.445 .149 7.899 6.602 14.352 .149 15.399 1.195 8.945 7.649 15.399 14.102 14.352 15.149 7.899 8.695 1.445 15.149 .399 14.102"></polygon></svg>
</button>
<div class="search-expand">
<div class="search-expand-inner">
<?php get_search_form(); ?>
@ -40,19 +43,11 @@
<?php endif; ?>
<?php if ( has_nav_menu('header') ): ?>
<nav class="nav-container group" id="nav-header">
<div class="nav-toggle"><i class="fas fa-bars"></i></div>
<div class="nav-text"><!-- put your mobile menu text here --></div>
<div class="nav-wrap container"><?php wp_nav_menu(array('theme_location'=>'header','menu_class'=>'nav container-inner group','container'=>'','menu_id' => '','fallback_cb'=> false)); ?></div>
</nav><!--/#nav-header-->
<?php \AlxMedia\Nav::nav_menu(array('theme_location'=>'header','menu_id' => 'nav-header','fallback_cb'=> false)); ?>
<?php endif; ?>
<?php if ( has_nav_menu('mobile') ): ?>
<nav class="nav-container group" id="nav-mobile">
<div class="nav-toggle"><i class="fas fa-bars"></i></div>
<div class="nav-text"><!-- put your mobile menu text here --></div>
<div class="nav-wrap container"><?php wp_nav_menu(array('theme_location'=>'mobile','menu_class'=>'nav container-inner group','container'=>'','menu_id' => '','fallback_cb'=> false)); ?></div>
</nav><!--/#nav-mobile-->
<?php \AlxMedia\Nav::nav_menu(array('theme_location'=>'mobile','menu_id' => 'nav-mobile','fallback_cb'=> false)); ?>
<?php endif; ?>
</div>

319
js/nav.js Normal file
View file

@ -0,0 +1,319 @@
/**
* Polyfill for IE11 - adds NodeList.foreach().
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach
*/
if ( window.NodeList && ! NodeList.prototype.forEach ) {
NodeList.prototype.forEach = function( callback, thisArg ) {
thisArg = thisArg || window;
for ( var i = 0; i < this.length; i++ ) { // eslint-disable-line vars-on-top
callback.call( thisArg, this[ i ], i, this );
}
};
}
window.alxMediaMenu = {
/**
*
* @param {Object} args - The arguments.
* @param {string} args.selector - The navigation selector.
* @param {int} args.breakpoint - The breakpoint in pixels.
*/
init: function( args ) {
var self = this,
navs = document.querySelectorAll( args.selector );
if ( ! navs.length ) {
return;
}
navs.forEach( function( nav ) {
var menuToggler = nav.querySelector( '.menu-toggle' );
// Hide menu toggle button if menu is empty and return early.
if ( ! nav.querySelector( 'ul' ) && nav.querySelector( '.menu-toggle' ) ) {
nav.querySelector( '.menu-toggle' ).style.display = 'none';
}
// Add nav-menu class.
if ( ! nav.classList.contains( 'nav-menu' ) ) {
nav.classList.add( 'nav-menu' );
}
// Toggle the hover event listeners.
self.toggleHoverEventListeners( nav );
// Toggle focus classes on links.
nav.querySelectorAll( 'a,button' ).forEach( function( link ) {
link.addEventListener( 'focus', window.alxMediaMenu.toggleFocus, true );
link.addEventListener( 'blur', window.alxMediaMenu.toggleFocus, true );
});
menuToggler.addEventListener( 'click', function() {
if ( nav.classList.contains( 'toggled' ) ) {
menuToggler.setAttribute( 'aria-expanded', 'false' );
nav.classList.remove( 'toggled' );
} else {
menuToggler.setAttribute( 'aria-expanded', 'true' );
nav.classList.add( 'toggled' );
}
});
// If on mobile nav, close it when clicking outside.
// If on desktop, close expanded submenus when clicking outside.
document.addEventListener( 'click', function( event ) {
if ( ! nav.contains( event.target ) ) {
// Mobile.
nav.classList.remove( 'toggled' );
// Desktop.
nav.querySelectorAll( 'button.active,.sub-menu.active' ).forEach( function( el ) {
el.classList.remove( 'active' );
});
menuToggler.setAttribute( 'aria-expanded', 'false' );
}
});
});
// Toggle mobile classes on initial load.
window.alxMediaMenu.toggleMobile( args.selector, args.breakpoint );
// Toggle mobile classes on resize.
window.addEventListener( 'resize', function() {
// If timer is null, reset it to our bounceDelay and run, otherwise wait until timer is cleared.
if ( ! window.resizeDebouncedTimeout ) {
window.resizeDebouncedTimeout = setTimeout( function() {
window.resizeDebouncedTimeout = null;
window.alxMediaMenu.toggleMobile( args.selector, args.breakpoint );
}, 250 );
}
});
// Toggle focus classes to allow submenu access on tables.
document.querySelectorAll( args.selector ).forEach( function( el ) {
window.alxMediaMenu.toggleFocusTouch( el );
});
},
/**
* Expand a menu item.
*
* @param {Element} - The menu item (DOM element).
* @return {void}
*/
toggleItem: function( el ) {
var parentLi = this.helper.firstAncestorMatch( el, 'li' ),
parentUl = this.helper.firstAncestorMatch( el, 'ul' ),
ul = parentLi.querySelector( 'ul.sub-menu' );
parentLi.classList.remove( 'hover' );
ul.setAttribute( 'tabindex', '-1' );
this.helper.toggleClass( ul, 'active' );
this.helper.toggleClass( el, 'active' );
// Go one level up in the list, and close other items that are already open.
parentUl.querySelectorAll( 'ul.sub-menu' ).forEach( function( subMenu ) {
var subMenuButton;
if ( ! parentLi.contains( subMenu ) ) {
subMenu.classList.remove( 'active' );
subMenuButton = subMenu.parentNode.querySelector( 'button.active' );
if ( subMenuButton ) {
subMenuButton.classList.remove( 'active' );
}
}
});
},
/**
* Toggles a mobile class to elements matching our selector,
* depending on the defined breakpoint.
*
* @param {string} selector - The elements where we want to toggle our mobile class.
* @param {string} className - The class-name we want to toggle.
* @param {int} breakpoint - The breakpoint.
* @return {void}
*/
toggleMobile: function( selector, breakpoint ) {
var self = this,
screenWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
navs = document.body.querySelectorAll( selector ),
isMobile;
breakpoint = breakpoint || 720;
isMobile = breakpoint > screenWidth;
if ( isMobile ) {
navs.forEach( function( nav ) {
if ( ! nav.classList.contains( 'mobile' ) ) {
nav.classList.add( 'mobile' );
self.toggleHoverEventListeners( nav );
}
});
} else {
navs.forEach( function( nav ) {
if ( nav.classList.contains( 'mobile' ) ) {
nav.classList.remove( 'mobile' );
self.toggleHoverEventListeners( nav );
}
});
}
},
/**
* Add a "hover" class.
*
* @return {void}
*/
liMouseEnterEvent: function() {
this.classList.add( 'hover' );
},
/**
* Remove the "hover" class.
*
* @return {void}
*/
liMouseLeaveEvent: function() {
this.classList.remove( 'hover' );
},
/**
*
* @param {Element} nav - The nav element.
* @return {void}
*/
toggleHoverEventListeners: function( nav ) {
if ( nav.classList.contains( 'mobile' ) ) {
this.removeHoverEventListeners( nav );
} else {
this.addHoverEventListeners( nav );
}
},
/**
* Add event-listeners for hover events.
*
* @param {Element} nav - The nav element.
* @return {void}
*/
addHoverEventListeners: function( nav ) {
nav.querySelectorAll( 'li' ).forEach( function( li ) {
li.addEventListener( 'mouseenter', window.alxMediaMenu.liMouseEnterEvent );
li.addEventListener( 'mouseleave', window.alxMediaMenu.liMouseLeaveEvent );
});
},
/**
* Remove event-listeners for hover events.
*
* @param {Element} nav - The nav element.
* @return {void}
*/
removeHoverEventListeners: function( nav ) {
nav.querySelectorAll( 'li' ).forEach( function( li ) {
li.removeEventListener( 'mouseenter', window.alxMediaMenu.liMouseEnterEvent );
li.removeEventListener( 'mouseleave', window.alxMediaMenu.liMouseLeaveEvent );
});
},
/**
* Sets or removes .focus class on an element.
*
* @return {void}
*/
toggleFocus: function() {
var self = this;
// Move up through the ancestors of the current link until we hit .nav-menu.
while ( -1 === self.className.indexOf( 'nav-menu' ) ) {
// On li elements toggle the class .focus.
if ( 'li' === self.tagName.toLowerCase() ) {
if ( -1 !== self.className.indexOf( 'focus' ) ) {
self.className = self.className.replace( ' focus', '' );
} else {
self.className += ' focus';
}
}
self = self.parentElement;
}
},
/**
* Toggle focus classes to allow submenu access on tables.
*
* @param {Element} el - The menu element.
* @return {void}
*/
toggleFocusTouch: function( el ) {
var touchStartFn,
parentLinks = el.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' );
if ( 'ontouchstart' in window ) {
touchStartFn = function( e ) {
var menuItem = this.parentNode;
if ( ! menuItem.classList.contains( 'focus' ) ) {
e.preventDefault();
menuItem.parentNode.children.forEach( function( child ) {
if ( menuItem !== child ) {
child.classList.remove( 'focus' );
}
});
menuItem.classList.add( 'focus' );
} else {
menuItem.classList.remove( 'focus' );
}
};
parentLinks.forEach( function( parentLink ) {
parentLink.addEventListener( 'touchstart', touchStartFn, false );
});
}
},
/**
* Helper methods.
*/
helper: {
/**
* Toggle a class to an element.
*
* @param {Element} el - The element.
* @param {string} className - The class we want to toggle.
* @return {void}
*/
toggleClass: function( el, className ) {
if ( el.classList.contains( className ) ) {
el.classList.remove( className );
} else {
el.classList.add( className );
}
},
/**
* Get the 1st ancestor of an element that matches our selector.
*
* @param {Element} el - The element.
* @param {string} selector - The class we want to toggle.
* @return {Element}
*/
firstAncestorMatch: function( el, selector ) {
if ( el.parentNode.matches( selector ) ) {
return el.parentNode;
}
return this.firstAncestorMatch( el.parentNode, selector );
}
}
};
window.alxMediaMenu.init({
selector: '.main-navigation.nav-menu',
breakpoint: 720
});

View file

@ -2,7 +2,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Minimer\n"
"POT-Creation-Date: 2020-03-23 21:25+0100\n"
"POT-Creation-Date: 2020-08-11 19:09+0200\n"
"PO-Revision-Date: 2018-09-21 21:27+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -51,19 +51,19 @@ msgstr ""
msgid "Continue reading..."
msgstr ""
#: footer.php:71
#: footer.php:67
msgid "Y"
msgstr ""
#: footer.php:71
#: footer.php:67
msgid "All Rights Reserved."
msgstr ""
#: footer.php:77
#: footer.php:73
msgid "Powered by"
msgstr ""
#: footer.php:77
#: footer.php:73
msgid "Theme by"
msgstr ""
@ -79,75 +79,75 @@ msgstr ""
msgid "Footer"
msgstr ""
#: functions.php:160
#: functions.php:173
msgid "Primary"
msgstr ""
#: functions.php:160
#: functions.php:173
msgid "Normal full width sidebar"
msgstr ""
#: functions.php:162 functions/theme-options.php:307
#: functions.php:175 functions/theme-options.php:307
msgid "Footer Ads"
msgstr ""
#: functions.php:162
#: functions.php:175
msgid "Footer ads area"
msgstr ""
#: functions.php:164
#: functions.php:177
msgid "Frontpage Top 1"
msgstr ""
#: functions.php:164 functions.php:165 functions.php:166 functions.php:167
#: functions.php:177 functions.php:178 functions.php:179 functions.php:180
msgid "Frontpage area"
msgstr ""
#: functions.php:165
#: functions.php:178
msgid "Frontpage Top 2"
msgstr ""
#: functions.php:166
#: functions.php:179
msgid "Frontpage Bottom 1"
msgstr ""
#: functions.php:167
#: functions.php:180
msgid "Frontpage Bottom 2"
msgstr ""
#: functions.php:169
#: functions.php:182
msgid "Footer 1"
msgstr ""
#: functions.php:169 functions.php:170 functions.php:171 functions.php:172
#: functions.php:182 functions.php:183 functions.php:184 functions.php:185
msgid "Widgetized footer"
msgstr ""
#: functions.php:170
#: functions.php:183
msgid "Footer 2"
msgstr ""
#: functions.php:171
#: functions.php:184
msgid "Footer 3"
msgstr ""
#: functions.php:172
#: functions.php:185
msgid "Footer 4"
msgstr ""
#: functions.php:663
#: functions.php:676
msgid "Alx Extensions"
msgstr ""
#: functions.php:667
#: functions.php:680
msgid "Meta Box"
msgstr ""
#: functions.php:671
#: functions.php:684
msgid "Regenerate Thumbnails"
msgstr ""
#: functions.php:675
#: functions.php:688
msgid "WP-PageNavi"
msgstr ""
@ -176,6 +176,27 @@ msgstr ""
msgid "Post Options"
msgstr ""
#: functions/nav.php:167
msgid "Expand Menu"
msgstr ""
#: functions/nav.php:203
msgid "Toggle Child Menu"
msgstr ""
#: functions/nav.php:273 functions/nav.php:287
#, php-format
msgid "<span class=\"screen-reader-text\">%1$s </span>%2$s"
msgstr ""
#: functions/nav.php:274
msgid "Current Page:"
msgstr ""
#: functions/nav.php:288
msgid "Current Page Parent"
msgstr ""
#: functions/theme-options.php:16
msgid "AlxMedia"
msgstr ""

View file

@ -2,7 +2,7 @@
Contributors: alxmedia
Requires at least: 5.0
Tested up to: 5.5
Version: 1.2.1
Version: 1.2.2
License: GPLv3
License URI: http://www.gnu.org/licenses/gpl-3.0
Tags: blog, one-column, two-columns, right-sidebar, left-sidebar, custom-colors, custom-menu, featured-images, flexible-header, full-width-template, post-formats, sticky-post, theme-options, threaded-comments, translation-ready, custom-logo, custom-header, custom-background
@ -71,6 +71,10 @@ Sidebar images
== Changelog ==
= 1.2.2 - 2020-08-11 =
* Improved a11y
* Added new menu
= 1.2.1 - 2020-08-11 =
* Updated to Kirki 3.1.5

View file

@ -105,10 +105,10 @@
.site-title { padding: 10px 0; margin: 0; width: 100%; float: none; line-height: 50px; border-bottom: 1px solid #eee; }
.site-title a { text-align: center; }
#header .social-links { float: none; text-align: center; padding: 10px 0; margin-top: 0; margin-bottom: 0; border-left: 0; border-bottom: 1px solid #e5e5e5; }
.toggle-search { position: absolute; left: 20px; bottom: 6px; z-index: 103; color: #333; margin-top: 0; margin-left: 0; }
.toggle-search { position: absolute; left: 20px; bottom: -14px; width: 30px; z-index: 103; color: #333; margin-top: 0; margin-left: 0; }
.toggle-search:hover,
.toggle-search.active { color: #000; }
.search-expand { top: auto; left: 0; bottom: -36px; width: 100%; }
.search-expand { background: transparent; padding: 0; top: auto; left: 0; bottom: -36px; width: 100%; }
.search-expand-inner { padding: 0; width: 100%; }
.search-expand .themeform input { border-radius: 0; }
#nav-header.nav-container { border-bottom: 1px solid #eee; margin-top: 0; }

270
style.css
View file

@ -1,7 +1,7 @@
/*
Theme Name: Minimer
Theme URI: http://alx.media/themes/minimer/
Version: 1.2.1
Version: 1.2.2
Requires at least: 5.0
Requires PHP: 5.6
Tested up to: 5.5
@ -70,7 +70,7 @@ table { border-collapse: collapse; border-spacing: 0; }
body { background: #eee; font-size: 15px; line-height: 1.5em; color: #444; font-weight: 300; }
::selection { background: #eee; color: #333; }
::-moz-selection { background: #eee; color: #333; }
a { color: #333; text-decoration: none; outline: 0; }
a { color: #333; text-decoration: none; }
a:hover { color: #333; }
img { max-width: 100%; height: auto; }
a,
@ -622,88 +622,164 @@ box-shadow: 0 0 2px rgba(255,255,255,0.4);
/* header : search
/* ------------------------------------ */
.toggle-search { color: #555; font-size: 18px; line-height: 24px; cursor: pointer; padding: 6px 0; display: block; float: right; margin-top: 20px; margin-left: 24px; }
.toggle-search:hover,
.toggle-search { background: transparent; float: right; border: 0; width: 30px; color: #333; text-align: center; font-size: 20px; line-height: 24px; cursor: pointer; border-radius: 10px; padding: 16px 0; margin: 10px 0 10px 6px; display: block; }
.toggle-search:hover { color: #333; }
.toggle-search.active { color: #333; }
.toggle-search.active i:before { content: "\f00d"; font-size: 22px; }
.search-expand { display: none; position: absolute; top: 30px; right: 70px; width: 340px; z-index: 103; }
.search-expand-inner { padding: 0 10px 10px; }
.search-expand .themeform input { background: #f2f2f2; width: 100%; border: 1px solid #eee; border-radius: 20px; }
.toggle-search.active i:before { content: "\f00d"; }
.search-expand { display: none; position: absolute; top: 31px; right: 88px; width: 320px; z-index: 10; }
.search-expand-inner { }
.search-expand .themeform input { background: #fff; width: 100%; border: 1px solid #ddd; }
.search-expand .themeform input:focus { border-color: #ccc; }
.toggle-search.active { padding-top: 18px; padding-bottom: 19px; }
.toggle-search .svg-icon { fill: #333; margin: 0 auto; }
.toggle-search #svg-close { display: none; }
.toggle-search.active #svg-search { display: none; }
.toggle-search.active #svg-close { display: block; }
/* header : nav mobile
/* ------------------------------------ */
#nav-mobile.nav-container { background: transparent; }
#nav-mobile .nav-toggle { background: transparent; color: #333; }
#nav-mobile .nav-text { color: #999; }
@media only screen and (max-width: 719px) {
/* common */
#nav-mobile.nav-container { background: #eee; float: none; width: 100%; }
#nav-mobile .nav { padding: 0 0 50px; }
#nav-mobile .nav li a { color: rgba(0,0,0,0.7); border-bottom: 1px solid #e5e5e5; }
/* level 1 */
#nav-mobile .nav li > a:hover,
#nav-mobile .nav li.current_page_item > a,
#nav-mobile .nav li.current-menu-item > a,
#nav-mobile .nav li.current-post-parent > a { background: transparent; color: #000; }
}
/* ------------------------------------------------------------------------- *
* Section: Navigation
/* ------------------------------------------------------------------------- */
/* hide and display */
/* menu hamburger */
.menu-toggle-icon { float: right; width: 30px; height: 20px; position: relative; transform: rotate(0deg); transition: .5s ease-in-out; cursor: pointer; }
.menu-toggle-icon span { display: block; position: absolute; height: 2px; width: 100%; background: #333; border-radius: 2px; opacity: 1; left: 0; transform: rotate(0deg); transition: .25s ease-in-out; }
.menu-toggle-icon span:nth-child(1) { top: 0px; transform-origin: left center; }
.menu-toggle-icon span:nth-child(2) { top: 8px; transform-origin: left center; }
.menu-toggle-icon span:nth-child(3) { top: 16px; transform-origin: left center; }
.toggled .menu-toggle-icon span:nth-child(1) { transform: rotate(45deg); top: -2px; left: 5px; }
.toggled .menu-toggle-icon span:nth-child(2) { width: 0%; opacity: 0; }
.toggled .menu-toggle-icon span:nth-child(3) { transform: rotate(-45deg); top: 19px; left: 5px; }
/* menu hide and display */
@media only screen and (min-width: 720px) {
.mobile-menu #nav-mobile { display: none; }
.mobile-menu #nav-mobile-nav { display: none; }
}
@media only screen and (max-width: 719px) {
.mobile-menu #nav-header { display: none; }
.mobile-menu #nav-header-nav { display: none; }
#nav-mobile,
#nav-header,
#nav-footer { display: none; }
.mobile #nav-mobile,
.mobile #nav-header,
.mobile #nav-footer { display: block; }
}
/* header : nav header
/* ------------------------------------ */
#nav-header.nav-container { background: transparent; float: right; margin: 12px 0 0 0; }
#nav-header .nav-toggle { background: transparent; color: #333; }
#nav-header .nav-text { color: #999; }
/* menu base */
.nav-menu > .menu-toggle { display: none; }
.nav-menu.mobile > .menu-toggle { display: block; }
.nav-menu.mobile > .menu-toggle ~ * { max-height: 4000px; overflow: hidden; width: 100%; transition: max-height 0.5s cubic-bezier(1, 0, 1, 0); }
.nav-menu.mobile > .menu-toggle[aria-expanded="false"] ~ * { max-height: 0; transition: max-height 0.5s cubic-bezier(0, 1.05, 0, 1); }
.menu,
.menu ul { display: flex; list-style: none; list-style-type: none; margin: 0; padding: 0; }
.nav-menu a { display: block; text-decoration: none; width: 100%; }
.nav-menu.mobile ul { flex-direction: column; }
.menu ul { flex-direction: column; max-width: 0; max-height: 0; overflow: hidden; }
.menu ul.active,
.nav-menu:not(.mobile) .menu li.hover > ul { max-width: 100vw; max-height: 300vh; }
.nav-menu:not(.mobile) .menu .sub-menu { position: absolute; }
.nav-menu .screen-reader-text { display: none; }
.nav-menu .menu-item-wrapper { display: flex; }
.nav-menu { line-height: 20px; }
.nav-menu button { color: inherit; cursor: pointer; font-family: inherit; position: relative; text-align: inherit; user-select: none; background: none; border: none; box-shadow: none; border-radius: 0; font-size: inherit; font-weight: 400; letter-spacing: inherit; padding: 0; text-transform: none; }
.nav-menu.mobile .menu ul { transition: max-height 500ms; max-width: 100%; }
@media only screen and (min-width: 720px) {
.nav-menu:not(.mobile) .menu { flex-wrap: wrap; justify-content: flex-start; }
.nav-menu:not(.mobile) .menu ul.active,
.nav-menu:not(.mobile) .menu li.hover > ul { overflow: visible; width: 180px; opacity: 1; transform: translateY(0); transition: opacity 0.15s linear, transform 0.15s linear; }
.nav-menu:not(.mobile) .menu ul .sub-menu { left: 200px; top: 0; }
.nav-menu:not(.mobile) .menu { position: relative; }
.nav-menu:not(.mobile) .menu ul { font-size: 15px; opacity: 0; padding: 10px 0; position: absolute; top: calc(100% + 20px); transition: opacity 0.15s linear, transform 0.15s linear, right 0s 0.15s; transform: translateY(6px); z-index: 1; }
.nav-menu:not(.mobile) .menu ul li { position: relative; }
.nav-menu:not(.mobile) .menu ul a { display: block; padding: 7px 20px; transition: background-color 0.15s linear; width: 100%; }
.nav-menu:not(.mobile) .menu li.menu-item-has-children.focus > ul { min-width: 180px; max-width: 180px; max-height: 300vh; overflow: visible; opacity: 1; transform: translateY(0); transition: opacity 0.15s linear, transform 0.15s linear; }
/* common */
#nav-header .nav { font-weight: 600; }
#nav-header .nav li a { font-size: 16px; color: #666; }
#nav-header .nav > li:last-child { margin-right: 0; }
/* level 1 */
#nav-header .nav > li { border-right: none; margin-right: 24px; }
#nav-header .nav > li > a { padding: 18px 0; margin-bottom: -1px; }
#nav-header .nav > li > a:hover,
#nav-header .nav > li:hover > a { background: transparent; color: #555; }
#nav-header .nav li > a:hover,
#nav-header .nav li:hover > a { color: #333; }
#nav-header .nav li.current_page_item > a,
#nav-header .nav li.current-menu-item > a,
#nav-header .nav li.current-menu-ancestor > a,
#nav-header .nav li.current-post-parent > a { color: #333; }
/* level 2 & 3 */
#nav-header .nav > li > ul { top: 52px; }
#nav-header .nav ul { background: #fff; border-radius: 4px; border: 1px solid rgba(0,0,0,0.15); box-shadow: 3px 3px 0 0 rgba(0,0,0,0.05); }
#nav-header .nav > li > ul:after { content:''; display: inline-block; border-left: 8px solid transparent; border-right: 8px solid transparent; border-top: 8px solid transparent; border-bottom: 8px solid #fff; position: absolute; top: -15px; left: 21px; }
#nav-header .nav > li > ul:before { content:''; display: inline-block; border-left: 9px solid transparent; border-right: 9px solid transparent; border-top: 9px solid transparent; border-bottom: 9px solid #ddd; position: absolute; top: -18px; left: 20px; }
#nav-header .nav ul li { border-bottom: none; }
#nav-header .nav ul li:last-child { border-bottom: none; }
#nav-header .nav ul li a { font-size: 14px; border: none; padding-top: 6px; padding-bottom: 6px; }
}
@media only screen and (max-width: 719px) {
/* common */
#nav-header.nav-container { background: #eee; float: none; width: 100%; }
#nav-header .nav { padding: 0 0 50px; }
#nav-header .nav li a { color: rgba(0,0,0,0.7); border-bottom: 1px solid #e5e5e5; }
/* level 1 */
#nav-header .nav li > a:hover,
#nav-header .nav li.current_page_item > a,
#nav-header .nav li.current-menu-item > a,
#nav-header .nav li.current-post-parent > a { background: transparent; color: #000; }
}
.nav-menu:not(.mobile) .menu ul:before,
.nav-menu:not(.mobile) .menu ul:after { content: ""; display: block; position: absolute; bottom: 100%; }
.nav-menu:not(.mobile) .menu ul:before { left: 0; right: 0; height: 20px; }
.nav-menu:not(.mobile) .menu ul:after { border: 8px solid transparent; border-bottom-color: transparent; left: 18px; }
.nav-menu:not(.mobile) .menu ul ul { left: calc(100% + 20px); top: -10px !important; }
.nav-menu:not(.mobile) .menu ul ul:before { bottom: 0; height: auto; left: auto; left: -20px; top: 0; width: 22px; }
.nav-menu:not(.mobile) .menu ul ul:after { border-bottom-color: transparent; bottom: auto; left: -16px; top: 20px; }
.nav-menu-dropdown-left .nav-menu:not(.mobile) .menu ul ul:before { left: auto; right: -20px; }
.nav-menu-dropdown-left .nav-menu:not(.mobile) .menu ul ul { right: calc(100% + 20px); left: auto; }
.nav-menu-dropdown-left .nav-menu:not(.mobile) .menu ul ul:after { border-right-color: transparent; right: -16px; left: auto; }
.nav-menu-dropdown-left .nav-menu:not(.mobile) ul ul button .svg-icon { transform: none; }
.nav-menu:not(.mobile) a,
.nav-menu:not(.mobile) span { transition: all 0.3s ease; }
.nav-menu.mobile { padding: 0; }
.nav-menu.mobile button:focus { outline: none; }
.nav-menu.mobile > button { padding: 16px 20px; float: right; }
.nav-menu.mobile button .svg-icon { transition: all 250ms; }
.nav-menu.mobile button.active .svg-icon { transform: rotate(180deg); }
.nav-menu.mobile ul { border: 0; }
.nav-menu.mobile ul li .menu-item-wrapper { justify-content: space-between; width: 100%; }
.nav-menu.mobile > div > ul > li:last-child { margin-bottom: 52px; }
.nav-menu.mobile ul li a { font-size: 16px; font-weight: 600; padding: 14px 20px; }
.nav-menu.mobile ul ul li a { font-size: 14px; }
.nav-menu.mobile ul ul li a { padding: 12px 0 12px 40px; }
.nav-menu.mobile ul ul ul li a { padding: 12px 0 12px 60px; }
.nav-menu.mobile ul button { margin: 10px 0; padding: 0 20px; }
/* menu styling */
.nav-menu a { color: #fff; font-weight: 600; }
.nav-menu .svg-icon { fill: #333; }
.nav-menu:not(.mobile) .menu ul { background: #333; color: #fff; border-radius: 4px; }
.nav-menu:not(.mobile) .menu ul:after { border-bottom-color: #333; }
.nav-menu:not(.mobile) .menu ul ul:after { border-right-color: #333; }
.nav-menu-dropdown-left .nav-menu:not(.mobile) .menu ul ul:after { border-left-color: #333; }
.nav-menu:not(.mobile) { font-size: 16px; font-weight: 400; float: right; padding: 12px 0 20px 0; }
.nav-menu:not(.mobile) a { color: #666; }
.nav-menu:not(.mobile) a:hover { color: #333; }
.nav-menu:not(.mobile) ul ul a { font-size: 14px; }
.nav-menu:not(.mobile) ul ul a:hover { color: #ccc; }
.nav-menu:not(.mobile) ul ul > li:hover > span { background: rgba(255,255,255,0.1); }
.nav-menu:not(.mobile) ul ul a { color: #eee; }
.nav-menu:not(.mobile) button { background: none; color: #666; padding: 0 4px; margin-left: 2px; border-radius: 4px; }
.nav-menu:not(.mobile) button.active { background: #eee; color: #333; }
.nav-menu:not(.mobile) button .svg-icon { fill: #bbb; }
.nav-menu:not(.mobile) ul ul button { background: none; color: #eee; padding: 0 5px; margin: 0 10px 0 0; }
.nav-menu:not(.mobile) ul ul button.active { background: #444; color: #eee; }
.nav-menu:not(.mobile) ul ul button .svg-icon { transform: rotate(-90deg); }
.nav-menu:not(.mobile) .menu > li { margin: 16px 20px 0 0; position: relative; }
.nav-menu:not(.mobile) .menu > li:last-child { margin-right: 0; }
.nav-menu:not(.mobile) .menu a { padding: 0; }
.nav-menu:not(.mobile) li.current_page_item > span > a,
.nav-menu:not(.mobile) li.current-menu-item > span > a,
.nav-menu:not(.mobile) li.current-menu-ancestor > span > a,
.nav-menu:not(.mobile) li.current-post-parent > span > a { color: #333; }
.nav-menu:not(.mobile) ul ul li.current_page_item > span > a,
.nav-menu:not(.mobile) ul ul li.current-menu-item > span > a,
.nav-menu:not(.mobile) ul ul li.current-menu-ancestor > span > a,
.nav-menu:not(.mobile) ul ul li.current-post-parent > span > a { color: #aaa; }
.nav-menu.mobile { background: #eee; }
.nav-menu.mobile button.active .svg-icon { fill: #333; }
.nav-menu.mobile ul ul { background: rgba(0,0,0,0.03); }
.nav-menu.mobile ul li .menu-item-wrapper,
.nav-menu.mobile ul ul li .menu-item-wrapper { border-bottom: 1px solid rgba(0,0,0,0.07); }
.nav-menu.mobile > div > ul > li:first-child .menu-item-wrapper { border-top: 1px solid rgba(0,0,0,0.07); }
.nav-menu.mobile ul li a { color: #333; }
.nav-menu.mobile ul button,
.nav-menu.mobile ul ul button { border-left: 1px solid rgba(0,0,0,0.07); }
/* menu footer styling */
#footer .nav-menu:not(.mobile) { background: #fff; float: none; padding-top: 8px; padding-left: 20px; padding-right: 20px; position: relative; z-index: 2; }
#footer .nav-menu:not(.mobile) button { transform: rotate(-180deg); }
#footer .nav-menu:not(.mobile) .menu ul button { transform: none; }
#footer .nav-menu:not(.mobile) .menu { justify-content: center; }
#footer .nav-menu:not(.mobile) .menu ul { top: auto; bottom: calc(100% + 19px); }
#footer .nav-menu:not(.mobile) .menu ul ul { bottom: auto; }
#footer .nav-menu:not(.mobile) .menu > li > ul:before,
#footer .nav-menu:not(.mobile) .menu > li > ul:after { bottom: auto; top: 100%; }
#footer .nav-menu:not(.mobile) .menu ul:after { border-bottom-color: transparent; border-top-color: #333; }
#footer .nav-menu:not(.mobile) .menu ul ul:after { border-right-color: #333; border-top-color: transparent; }
#footer .nav-menu.mobile { background: #fff; }
/* ------------------------------------------------------------------------- *
@ -711,7 +787,7 @@ box-shadow: 0 0 2px rgba(255,255,255,0.4);
/* ------------------------------------------------------------------------- */
#page { padding-top: 60px; padding-bottom: 80px; }
.slick-posts { background: #eee; border-top: 1px solid #e5e5e5; margin-bottom: 0; overflow: hidden; }
.slick-posts { background: #eee; border-top: 1px solid rgba(0,0,0,0.07); margin-bottom: 0; overflow: hidden; }
.slick-posts:after { content: ""; background: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.1) 100%); height: 30px; width: 100%; bottom: 0; position: absolute; left: 0; right: 0; pointer-events: none; }
.featured-post { background: #fff; transition: all 0.3s ease; position: relative; bottom: -20px; margin: 20px 10px 0; box-shadow: 0 -1px 1px rgba(0,0,0,0.1); }
@ -783,7 +859,7 @@ box-shadow: 0 0 2px rgba(255,255,255,0.4);
#footer-widgets { background: #fff; border-bottom: 1px solid #eee; }
#footer-widgets .widget { padding: 20px 0; }
#footer-bottom { position: relative; z-index: 99; text-align: center; }
#footer-bottom { position: relative; overflow: hidden; z-index: 99; text-align: center; }
#footer-bottom img { box-shadow: none; }
#footer-bottom .pad { padding-top: 20px; }
#footer-bottom a { color: #444; }
@ -802,52 +878,6 @@ box-shadow: 0 0 2px rgba(255,255,255,0.4);
#footer-bottom .social-links .social-tooltip:hover:after { background: #333; color: #fff; }
#footer-bottom .social-links .social-tooltip:hover:before { border-color: #333 transparent; }
/* footer : nav
/* ------------------------------------ */
#nav-footer.nav-container { background: #fff; text-align: center; z-index: 97; border-bottom: 1px solid #e5e5e5; padding-left: 20px; padding-right: 20px; }
#nav-footer .nav-toggle { background: transparent; color: #333; }
#nav-footer .nav-text { color: #666; }
@media only screen and (min-width: 720px) {
/* common */
#nav-footer .nav { font-weight: 600; }
#nav-footer .nav li a { font-size: 16px; color: #666; }
#nav-footer .nav > li:last-child { margin-right: 0; }
/* level 1 */
#nav-footer .nav > li { border-right: none; margin-right: 24px; }
#nav-footer .nav > li > a { padding: 18px 0; margin-bottom: -1px; }
#nav-footer .nav > li > a:hover,
#nav-footer .nav > li:hover > a { background: transparent; color: #555; }
#nav-footer .nav li > a:hover,
#nav-footer .nav li:hover > a { color: #333; }
#nav-footer .nav li.current_page_item > a,
#nav-footer .nav li.current-menu-item > a,
#nav-footer .nav li.current-menu-ancestor > a,
#nav-footer .nav li.current-post-parent > a { color: #333; }
/* level 2 & 3 */
#nav-footer .nav > li > ul { bottom: 55px; top: auto; text-align: left; }
#nav-footer .nav ul { background: #fff; border-radius: 4px; border: 1px solid rgba(0,0,0,0.15); box-shadow: 3px 3px 0 0 rgba(0,0,0,0.05); }
#nav-footer .nav > li > ul:after { content:''; display: inline-block; border-left: 8px solid transparent; border-right: 8px solid transparent; border-top: 8px solid #fff; border-bottom: 8px solid transparent; position: absolute; bottom: -15px; left: 21px; }
#nav-footer .nav > li > ul:before { content:''; display: inline-block; border-left: 9px solid transparent; border-right: 9px solid transparent; border-top: 9px solid #ddd; border-bottom: 9px solid transparent; position: absolute; bottom: -18px; left: 20px; }
#nav-footer .nav ul li { border-bottom: none; }
#nav-footer .nav ul li:last-child { border-bottom: none; }
#nav-footer .nav ul li a { font-size: 14px; border: none; padding-top: 6px; padding-bottom: 6px; }
}
@media only screen and (max-width: 719px) {
/* common */
#nav-footer .nav { padding-bottom: 20px; text-align: left; }
#nav-footer .nav li a { color: #666; border-top: 1px solid #f1f1f1; }
/* level 1 */
#nav-footer .nav li > a:hover { background: #f1f1f1; color: #333; }
#nav-footer .nav li.current_page_item > a,
#nav-footer .nav li.current-menu-item > a,
#nav-footer .nav li.current-post-parent > a { background: #eee; color: #333; }
}
/* ------------------------------------------------------------------------- *
* Post Entry