This tutorial is by Sridhar Katakam - https://sridharkatakam.com/header-search-in-genesis/
1. Replace the entire content of js/genesis-sample.js with:
/** * Genesis Sample entry point. * * @package GenesisSample\JS * @author StudioPress * @license GPL-2.0+ */ var genesisSample = ( function( $ ) { 'use strict'; /** * Adjust site inner margin top to compensate for sticky header height. * * @since 2.6.0 */ var moveContentBelowFixedHeader = function() { var siteInnerMarginTop = 0; if( $('.site-header').css('position') === 'fixed' ) { siteInnerMarginTop = $('.site-header').outerHeight(); } $('.site-inner').css('margin-top', siteInnerMarginTop); }, /** * Initialize Genesis Sample. * * Internal functions to execute on document load can be called here. * * @since 2.6.0 */ init = function() { // Run on first load. moveContentBelowFixedHeader(); // Run after window resize. $( window ).resize(function() { moveContentBelowFixedHeader(); }); // Run after the Customizer updates. // 1.5s delay is to allow logo area reflow. if (typeof wp.customize != "undefined") { wp.customize.bind( 'change', function ( setting ) { setTimeout(function() { moveContentBelowFixedHeader(); }, 1500); }); } // Make sure JS class is added. $('body').addClass('js'); // set the variables. var $header = $('.site-header'), $hsToggle = $('.toggle-header-search'), $hsWrap = $('#header-search-wrap'), $hsInput = $hsWrap.find('input[type="search"]'); // Handler for click a show/hide button. $hsToggle.on('click', function (event) { event.preventDefault(); if ($(this).hasClass('close')) { hideSearch(); } else { showSearch(); } }); // Handler for pressing show/hide button. $hsToggle.on('keydown', function (event) { // If tabbing from toggle button, and search is hidden, exit early. if (event.keyCode === 9 && !$header.hasClass('search-visible')) { return; } event.preventDefault(); handleKeyDown(event); }); // Handler for tabbing out of the search bar when focused. $hsInput.on('keydown', function (event) { if (event.keyCode === 9) { hideSearch(event.target); } }); // Helper function to show the search form. function showSearch() { $header.addClass('search-visible'); $hsWrap.fadeIn('fast').find('input[type="search"]').focus(); $hsToggle.attr('aria-expanded', true); } // Helper function to hide the search form. function hideSearch() { $hsWrap.fadeOut('fast').parents('.site-header').removeClass('search-visible'); $hsToggle.attr('aria-expanded', false); } // Keydown handler function for toggling search field visibility. function handleKeyDown(event) { // Enter/Space, respectively. if (event.keyCode === 13 || event.keyCode === 32) { event.preventDefault(); if ($(event.target).hasClass('close')) { hideSearch(); } else { showSearch(); } } } }; // Expose the init function only. return { init: init }; })( jQuery ); jQuery( window ).on( 'load', genesisSample.init );
2. Open functions.php and paste below code inside genesis_sample_enqueue_scripts_styles(), add at the end
wp_enqueue_style( 'monochrome-ionicons', '//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css', array(), CHILD_THEME_VERSION );
3. Paste below code at the end of functions.php
add_action( 'genesis_header', 'custom_get_header_search_toggle' ); /** * Outputs the header search form toggle button. */ function custom_get_header_search_toggle() { printf( '<a href="#header-search-wrap" aria-controls="header-search-wrap" aria-expanded="false" role="button" class="toggle-header-search"><span class="screen-reader-text">%s</span><span class="ionicons ion-ios-search"></span></a>', __( 'Show Search', 'genesis-sample' ) ); } add_action( 'genesis_header', 'custom_do_header_search_form' ); /** * Outputs the header search form. */ function custom_do_header_search_form() { $button = sprintf( '<a href="#" role="button" aria-expanded="false" aria-controls="header-search-wrap" class="toggle-header-search close"><span class="screen-reader-text">%s</span><span class="ionicons ion-ios-close-empty"></span></a>', __( 'Hide Search', 'genesis-sample' ) ); printf( '<div id="header-search-wrap" class="header-search-wrap">%s %s</div>', get_search_form( false ), $button ); }
4. Open style.css and paste below CSS just above the media queries
.site-header > .wrap { position: relative; } .menu-toggle { margin: 10px 30px 0 auto; } .header-search-wrap { display: none; } .js .header-search-wrap { position: absolute; z-index: 1001; /* Show above the menu toggle button */ top: 0; left: 0; width: 100%; height: 100%; -webkit-transition: none; transition: none; -webkit-transform: translate3d(0,-100%,0); transform: translate3d(0,-100%,0); } .js .header-search-wrap .search-form, .js .header-search-wrap input[type="search"] { height: 100%; } .search-visible .header-search-wrap { -webkit-transform: translate3d(0,0,0); transform: translate3d(0,0,0); } .header-search-wrap:target { display: block; clear: both; position: relative; } .header-search-wrap input[type="search"] { padding: 0; border: 0; } .header-search-wrap input[type="submit"]:focus { right: 50px; margin-top: 1px; padding: 20px; border-radius: 3px; } .js .toggle-header-search.close:focus { outline: 0; } .toggle-header-search.close { position: absolute; z-index: 100; top: 0; right: 0; width: 30px; height: 100%; padding: 0; color: #000; -webkit-transition: -webkit-transform 0.2s ease-in-out; transition: -webkit-transform 0.2s ease-in-out; transition: transform 0.2s ease-in-out; transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; -webkit-transform: translate3d(-6px,0,0); transform: translate3d(-6px,0,0); } .header-search-wrap:target .toggle-header-search.close { -webkit-transform: none; transform: none; } .toggle-header-search .ionicons { font-size: 12px; font-size: 1.2rem; -webkit-transform: scale(2); transform: scale(2); } .toggle-header-search.close .ionicons { position: absolute; top: calc(50% - 5px); right: 0; -webkit-transform: scale(3); transform: scale(3); } .toggle-header-search { position: absolute; right: 5px; top: 20px; }
5. Paste below code at the end of 960px min-width media query in style.css
/* Header Search --------------------------------------------- */ .site-header > .wrap { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; } .title-area, .nav-primary { float: none; } .nav-primary { -webkit-box-flex: 1; -ms-flex: 1; flex: 1; text-align: right; margin-right: 60px; } .toggle-header-search { position: absolute; display: block; padding: 6px 0 15px; line-height: 1; margin-left: 20px; }