mirror of
https://ghproxy.net/https://github.com/AlxMedia/gridzone.git
synced 2025-08-27 01:40:13 +08:00
Start of new menu
This commit is contained in:
parent
7b520d7161
commit
24d1722903
7 changed files with 771 additions and 194 deletions
0
css/nav.css
Normal file
0
css/nav.css
Normal file
82
dark.css
82
dark.css
|
@ -75,48 +75,9 @@ h1, h2, h3, h4, h5, h6,
|
|||
#footer-bottom .social-links a { color: rgba(255,255,255,0.7); }
|
||||
#footer-bottom .social-links a:hover { color: #fff; }
|
||||
|
||||
#nav-mobile .nav-toggle { color: #fff; }
|
||||
@media only screen and (min-width: 720px) {
|
||||
#nav-mobile .nav > li > a { color: rgba(255,255,255,0.7); }
|
||||
#nav-mobile .nav > li > a:hover,
|
||||
#nav-mobile .nav > li:hover > a { background: transparent; color: #fff; }
|
||||
#nav-mobile .nav > li.current_page_item > a,
|
||||
#nav-mobile .nav > li.current-menu-item > a,
|
||||
#nav-mobile .nav > li.current-menu-ancestor > a,
|
||||
#nav-mobile .nav > li.current-post-parent > a { color: #fff; }
|
||||
}
|
||||
@media only screen and (max-width: 719px) {
|
||||
.toggle-search,
|
||||
.toggle-search.active { background: transparent; }
|
||||
#nav-mobile.nav-container { background: #333; }
|
||||
#nav-mobile .nav li a { color: #999; border-bottom: 1px solid #3a3a3a; }
|
||||
#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: #fff; }
|
||||
|
||||
}
|
||||
|
||||
#nav-header .nav-toggle { color: #fff; }
|
||||
@media only screen and (min-width: 720px) {
|
||||
#nav-header .nav > li > a { color: rgba(255,255,255,0.7); }
|
||||
#nav-header .nav > li > a:hover,
|
||||
#nav-header .nav > li:hover > a { background: transparent; 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) {
|
||||
.toggle-search,
|
||||
.toggle-search.active { background: transparent; }
|
||||
#nav-header.nav-container { background: #333; }
|
||||
#nav-header .nav li a { color: #999; border-bottom: 1px solid #3a3a3a; }
|
||||
#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: #fff; }
|
||||
|
||||
}
|
||||
|
||||
.entry table tr.alt { background: #262626; }
|
||||
|
@ -296,4 +257,45 @@ h1, h2, h3, h4, h5, h6,
|
|||
|
||||
@media only screen and (min-width: 480px) and (max-width: 1024px) {
|
||||
.sidebar .widget { border-top-color: #444; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------- *
|
||||
* Section: Navigation
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* desktop */
|
||||
.nav-menu:not(.mobile) .menu ul { background: #fff; }
|
||||
.nav-menu:not(.mobile) .menu ul:after { border-bottom-color: #fff; }
|
||||
.nav-menu:not(.mobile) .menu ul ul:after { border-right-color: #fff; }
|
||||
.nav-menu-dropdown-left .nav-menu:not(.mobile) .menu ul ul:after { border-left-color: #fff; }
|
||||
|
||||
.nav-menu:not(.mobile) a { color: #bbb; }
|
||||
.nav-menu:not(.mobile) a:hover { color: #fff; }
|
||||
.nav-menu:not(.mobile) ul ul a:hover { color: #333; }
|
||||
.nav-menu:not(.mobile) ul ul > li:hover > span { background: rgba(0,0,0,0.07); }
|
||||
.nav-menu:not(.mobile) ul ul a { color: #666; }
|
||||
|
||||
.nav-menu:not(.mobile) button { color: #666; }
|
||||
.nav-menu:not(.mobile) button.active { background: #222; color: #333; }
|
||||
.nav-menu:not(.mobile) button .svg-icon { fill: #666; }
|
||||
.nav-menu:not(.mobile) ul ul button { color: #666; }
|
||||
.nav-menu:not(.mobile) ul ul button.active { background: #eee; color: #666; }
|
||||
|
||||
.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: #fff; }
|
||||
.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: #333; }
|
||||
|
||||
/* mobile */
|
||||
.nav-menu.mobile button.active .svg-icon { fill: #fff; }
|
||||
.nav-menu.mobile ul ul { background: #303030; }
|
||||
.nav-menu.mobile ul li .menu-item-wrapper { border-bottom: 1px solid #3a3a3a; }
|
||||
.nav-menu.mobile > div > ul > li:first-child .menu-item-wrapper { border-top: 1px solid #3a3a3a; }
|
||||
.nav-menu.mobile ul li a { color: #fff; }
|
||||
.nav-menu.mobile ul button { border-left: 1px solid #3a3a3a; }
|
||||
|
||||
.menu-toggle-icon span { background: #fff; }
|
|
@ -97,6 +97,19 @@ if ( ! function_exists( 'gridzone_setup' ) ) {
|
|||
add_action( 'after_setup_theme', 'gridzone_setup' );
|
||||
|
||||
|
||||
/* Custom navigation
|
||||
/* ------------------------------------ */
|
||||
require_once 'functions/nav.php';
|
||||
$nav = new \AlexMedia\Nav();
|
||||
$nav->enqueue(
|
||||
[
|
||||
'script' => 'js/nav.js', // Relative to the theme's root folder.
|
||||
'style' => 'css/nav.css', // Relative to the theme's root folder.
|
||||
'inline' => false,
|
||||
]
|
||||
);
|
||||
$nav->init();
|
||||
|
||||
/* Custom logo
|
||||
/* ------------------------------------ */
|
||||
if ( ! function_exists( 'gridzone_custom_logo' ) ) {
|
||||
|
|
295
functions/nav.php
Normal file
295
functions/nav.php
Normal file
|
@ -0,0 +1,295 @@
|
|||
<?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase
|
||||
/**
|
||||
* An accessible and mobile-friendly implementation for navigation menus.
|
||||
*/
|
||||
|
||||
namespace AlexMedia;
|
||||
|
||||
/**
|
||||
* 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', 'textdomain' ) . '</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', 'textdomain' ) . '</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', 'textdomain' ),
|
||||
esc_html__( 'Current Page:', 'textdomain' ),
|
||||
$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', 'textdomain' ),
|
||||
esc_html__( 'Current Page Parent', 'textdomain' ),
|
||||
$title
|
||||
);
|
||||
}
|
||||
|
||||
return $title;
|
||||
}
|
||||
}
|
14
header.php
14
header.php
|
@ -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">
|
||||
<?php echo gridzone_site_title(); ?>
|
||||
|
@ -28,19 +28,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 \AlexMedia\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 \AlexMedia\Nav::nav_menu(array('theme_location'=>'mobile','menu_id' => 'nav-mobile','fallback_cb'=> false)); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
|
319
js/nav.js
Normal file
319
js/nav.js
Normal 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' ).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
|
||||
});
|
242
style.css
242
style.css
|
@ -647,85 +647,6 @@ box-shadow: 0 0 2px rgba(255,255,255,0.4);
|
|||
-webkit-border-radius: 3px; border-radius: 3px; }
|
||||
.thumb-icon.small i { font-size: 12px; line-height: 16px; padding: 5px 0; }
|
||||
|
||||
/* common : nav
|
||||
/* ------------------------------------ */
|
||||
.nav-container { background: #888; z-index: 99; position: relative; }
|
||||
.nav-toggle { display: none; background: #777; cursor: pointer; float: right; height: 48px; width: 60px; color: #fff; text-align: center; }
|
||||
.nav-toggle i { font-size: 24px; padding: 10px 0; }
|
||||
.nav-text { display: none; float: right; font-size: 16px; line-height: 24px; padding: 13px 20px; }
|
||||
.nav li > a:after,
|
||||
.nav > li > a:after { font-family: "Font Awesome 5 Free"; font-weight: 900; display: inline-block; }
|
||||
|
||||
@media only screen and (min-width: 720px) {
|
||||
|
||||
.nav-wrap { height: auto!important; }
|
||||
/* common */
|
||||
.nav { font-size: 0; position: relative; }
|
||||
.nav li a { color: #ccc; display: block; line-height: 20px; }
|
||||
/* dropdown arrows */
|
||||
.nav li > a:after { content: "\f0da"; float: right; opacity: 0.35; }
|
||||
.nav > li > a:after {content: "\f0d7"; float: none; margin-left: 6px; font-size: 14px; line-height: 1.2em; }
|
||||
.nav li > a:only-child:after {content: ""; margin: 0; }
|
||||
#footer .nav li > a:after { content: "\f0da"; }
|
||||
#footer .nav > li > a:after { content: "\f0d8"; }
|
||||
#footer .nav li > a:only-child:after { content: ""; }
|
||||
/* level 1 */
|
||||
.nav > li { font-size: 16px; border-right: 1px solid #999; display: inline-block; position: relative; }
|
||||
.nav > li > a { padding: 14px; }
|
||||
.nav > li > a:hover,
|
||||
.nav > li:hover > a { background: #777; }
|
||||
.nav li > a:hover,
|
||||
.nav li:hover > a,
|
||||
.nav li.current_page_item > a,
|
||||
.nav li.current-menu-item > a,
|
||||
.nav li.current-menu-ancestor > a,
|
||||
.nav li.current-post-parent > a { color: #fff; }
|
||||
/* level 2 & 3 */
|
||||
.nav li:hover > ul { display: block; }
|
||||
.nav ul { display: none; background: #777; position: absolute; left: 0; top: 48px; width: 180px; padding: 10px 0; z-index: 2; -webkit-transform: translateZ(0);
|
||||
-webkit-box-shadow: 0 2px 2px rgba(0,0,0,0.15);
|
||||
box-shadow: 0 2px 2px rgba(0,0,0,0.15); }
|
||||
.nav ul li { font-size: 14px; position: relative; display: block; padding: 0; }
|
||||
.nav ul li a { padding: 10px 20px; }
|
||||
.nav ul li:last-child { border-bottom: 0!important; }
|
||||
/* level 3 */
|
||||
.nav ul ul { position: absolute; top: -10px; left: 180px; }
|
||||
|
||||
}
|
||||
@media only screen and (max-width: 719px) {
|
||||
|
||||
.nav { font-weight: 600; }
|
||||
.nav-container { text-transform: none; }
|
||||
.nav-toggle,
|
||||
.nav-text { display: block; }
|
||||
.nav-wrap { position: relative; float: left; width: 100%; height: 0; overflow: hidden; }
|
||||
.nav-wrap.transition {
|
||||
-webkit-transition: height 0.35s ease;
|
||||
-moz-transition: height 0.35s ease;
|
||||
-o-transition: height 0.35s ease;
|
||||
transition: height 0.35s ease; }
|
||||
.expand .nav-wrap { height: auto; }
|
||||
/* common */
|
||||
.nav { float: left; width: 100%; }
|
||||
.nav li a { line-height: 20px; display: block; padding: 8px 20px; }
|
||||
.nav li li a { padding-left: 15px; padding-right: 15px; }
|
||||
/* dropdown arrows */
|
||||
.nav li > a:after { content: '\f0d7'; opacity: 0.5; margin-left: 6px; }
|
||||
.nav > li > a:after { content: '\f0d7'; font-size: 14px; }
|
||||
.nav li > a:only-child:after { content: ''; }
|
||||
/* level 1 */
|
||||
.nav > li { font-size: 15px; }
|
||||
.nav li > a:hover,
|
||||
.nav li.current_page_item > a,
|
||||
.nav li.current-menu-item > a,
|
||||
.nav li.current-post-parent > a { color: #fff; }
|
||||
/* level 2 & 3 */
|
||||
.nav ul { display: block!important; margin-left: 40px; }
|
||||
.nav ul li { font-weight: 300; }
|
||||
.nav ul li a { padding-top: 6px; padding-bottom: 6px; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------- *
|
||||
* Section: Header
|
||||
|
@ -774,79 +695,114 @@ box-shadow: 0 0 2px rgba(255,255,255,0.4);
|
|||
.search-expand .themeform input { background: #fff; width: 100%; border: 1px solid #ddd; }
|
||||
.search-expand .themeform input:focus { border-color: #ccc; }
|
||||
|
||||
/* 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: #fff; 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 #f1f1f1; }
|
||||
/* 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 */
|
||||
@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 { display: none; }
|
||||
.mobile #nav-mobile,
|
||||
.mobile #nav-header { 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; }
|
||||
.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%; }
|
||||
.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; color: #fff; 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: 100vh; }
|
||||
.nav-menu:not(.mobile) .menu .sub-menu { position: absolute; }
|
||||
.screen-reader-text { display: none; }
|
||||
.nav-menu .menu-item-wrapper { display: flex; }
|
||||
.nav-menu { line-height: 20px; }
|
||||
.nav-menu .svg-icon { fill: #999; }
|
||||
.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; }
|
||||
|
||||
@media only screen and (min-width: 720px) {
|
||||
.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 { background: #333; border-radius: 4px; color: #fff; 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%; }
|
||||
|
||||
/* common */
|
||||
#nav-header .nav { font-weight: 400; }
|
||||
#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: #fff; 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 #f1f1f1; }
|
||||
/* 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; border-bottom-color: #333; 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; border-right-color: #333; 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; border-left-color: #333; right: -16px; left: auto; }
|
||||
.nav-menu-dropdown-left .nav-menu:not(.mobile) ul ul button .svg-icon { transform: none; }
|
||||
|
||||
.nav-menu:not(.mobile) { font-size: 16px; font-weight: 400; float: right; padding: 12px 0 20px 0; margin-top: 8px; }
|
||||
.nav-menu:not(.mobile) a { color: #666; }
|
||||
.nav-menu:not(.mobile) a:hover { color: #333; }
|
||||
.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: #aaa; }
|
||||
.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: 8px 0 0 20px; }
|
||||
.nav-menu:not(.mobile) .menu a { padding: 0; }
|
||||
|
||||
.nav-menu:not(.mobile) a,
|
||||
.nav-menu:not(.mobile) span { transition: all 0.3s ease; }
|
||||
|
||||
.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 { 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); fill: #333; }
|
||||
.nav-menu.mobile ul { border: 0; }
|
||||
.nav-menu.mobile ul ul { background: #f5f5f5; }
|
||||
.nav-menu.mobile ul li .menu-item-wrapper { justify-content: space-between; width: 100%; border-bottom: 1px solid #eee; }
|
||||
.nav-menu.mobile > div > ul > li:first-child .menu-item-wrapper { border-top: 1px solid #eee; }
|
||||
.nav-menu.mobile > div > ul > li:last-child { margin-bottom: 48px; }
|
||||
.nav-menu.mobile ul li a { font-size: 16px; color: #333; 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; border-left: 1px solid #eee; }
|
||||
.nav-menu.mobile .menu ul { transition: max-height 500ms; max-width: 100%; }
|
||||
.nav-menu.mobile > .menu-toggle ~ * { transition: max-height 0.5s cubic-bezier(1, 0, 1, 0); }
|
||||
|
||||
/* 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; }
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------- *
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue