{"id":328499,"date":"2026-06-19T19:38:50","date_gmt":"2026-06-19T19:38:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/quick-sticky-header-menu-on-scroll\/"},"modified":"2026-07-26T20:12:55","modified_gmt":"2026-07-26T20:12:55","slug":"menudoc-sticky-header-menu-on-scroll","status":"publish","type":"plugin","link":"https:\/\/tt.wordpress.org\/plugins\/menudoc-sticky-header-menu-on-scroll\/","author":15876460,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0.3","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"Sticky Header Menu on Scroll","header_author":"Jose Varghese","header_description":"Automatically makes your site's header\/menu sticky on scroll with smart auto-detection, animations, and scroll direction control. No coding required.","assets_banners_color":"f1f3fc","last_updated":"2026-07-26 20:12:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":283,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"josevarghese","date":"2026-06-19 20:18:56"},"1.0.1":{"tag":"1.0.1","author":"josevarghese","date":"2026-07-26 20:06:47"},"1.0.2":{"tag":"1.0.2","author":"josevarghese","date":"2026-07-26 20:12:55"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3579157,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3579157,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3579157,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3579182,"resolution":"1","location":"assets","locale":"","width":1396,"height":835},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3579182,"resolution":"2","location":"assets","locale":"","width":1444,"height":1078},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3579182,"resolution":"3","location":"assets","locale":"","width":1514,"height":1079},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3579182,"resolution":"4","location":"assets","locale":"","width":1446,"height":1077}},"screenshots":{"1":"Frontend - Sticky header with slide-down animation active on the default WordPress theme Twenty Twenty Five, which is not having a sticky menu.","2":"Settings page - Detection and behavior options.","3":"Settings page - Appearance and animation options.","4":"Settings page - Responsive and advanced options."}},"plugin_section":[],"plugin_tags":[10215,267989,10213,10214,45081],"plugin_category":[],"plugin_contributors":[237124],"plugin_business_model":[],"class_list":["post-328499","plugin","type-plugin","status-publish","hentry","plugin_tags-fixed-header","plugin_tags-scroll-header","plugin_tags-sticky-header","plugin_tags-sticky-menu","plugin_tags-sticky-navigation","plugin_contributors-josevarghese","plugin_committers-josevarghese"],"banners":{"banner":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/banner-772x250.png?rev=3579157","banner_2x":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/banner-1544x500.png?rev=3579157","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/icon-128x128.gif?rev=3579157","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/screenshot-1.png?rev=3579182","caption":"Frontend - Sticky header with slide-down animation active on the default WordPress theme Twenty Twenty Five, which is not having a sticky menu."},{"src":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/screenshot-2.png?rev=3579182","caption":"Settings page - Detection and behavior options."},{"src":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/screenshot-3.png?rev=3579182","caption":"Settings page - Appearance and animation options."},{"src":"https:\/\/ps.w.org\/menudoc-sticky-header-menu-on-scroll\/assets\/screenshot-4.png?rev=3579182","caption":"Settings page - Responsive and advanced options."}],"raw_content":"<!--section=description-->\n<p>MenuDoc Sticky Header Menu on Scroll is a lightweight WordPress plugin that turns any theme's header or navigation menu into a sticky element as soon as the user starts scrolling. It works out of the box with most themes thanks to smart auto-detection, and provides a full settings panel for fine-tuning every detail of the sticky behavior, appearance, and visibility rules.<\/p>\n\n<p>There is no need to touch any code. Install, activate, and the plugin immediately starts working on your site.<\/p>\n\n<h4>Key Features<\/h4>\n\n<p><strong>Smart Header Auto-Detection<\/strong>\nThe plugin scans your page for common header selectors and HTML structures used by popular WordPress themes, including full-site editing (FSE\/block) themes. It checks for semantic roles, well-known CSS classes and IDs, and falls back gracefully to the outermost header tag or a nav element. In the vast majority of cases the correct element is found without any configuration.<\/p>\n\n<p><strong>Custom CSS Selector<\/strong>\nIf auto-detection selects the wrong element, you can switch to Custom Selector mode and enter any valid CSS selector (for example <code>.site-header<\/code>, <code>#masthead<\/code>, or <code>header.main-nav<\/code>) to target the exact element you want to stick.<\/p>\n\n<p><strong>Scroll Trigger Distance<\/strong>\nControl how far the user must scroll down the page before the header becomes sticky. The default is 0 px, meaning the header sticks immediately. You can increase this value (up to 5000 px) so the header only sticks after the user has scrolled past the hero or page banner, keeping the top of the page clean.<\/p>\n\n<p><strong>Top Spacing (Sticky Offset)<\/strong>\nAdd extra pixel space between the very top of the viewport and the sticky header. This is useful when you want breathing room above the header or when other fixed elements occupy part of the top of the screen.<\/p>\n\n<p><strong>WordPress Admin Bar Awareness<\/strong>\nWhen a user is logged in to WordPress, the admin toolbar appears at the top of the page and the sticky header automatically positions itself directly below it, with no overlap. This adjustment happens in real time and accounts for any height changes the admin bar makes at different screen widths.<\/p>\n\n<p><strong>Hide on Scroll Down<\/strong>\nEnable this option to slide the sticky header out of view while the user is scrolling down the page. This reclaims screen real estate and gives readers more room to focus on content. When the user scrolls back up, the header smoothly returns to view.<\/p>\n\n<p><strong>Show on Scroll Up<\/strong>\nWorks together with Hide on Scroll Down. When enabled, the header reappears as soon as an upward scroll is detected. You can leave this off if you only want the header to return after the user scrolls all the way back to the top of the page.<\/p>\n\n<p><strong>Scroll-Up Distance Threshold<\/strong>\nWhen Hide on Scroll Down and Show on Scroll Up are both active, this setting controls how many pixels upward the user must scroll before the header reappears. The default is 0 px, which means the header reappears instantly on any upward movement. Increasing this value (up to 300 px) prevents the header from flickering back into view when the user makes small, accidental upward movements at the bottom of a page.<\/p>\n\n<p><strong>Shrink on Scroll (Compact Mode)<\/strong>\nWhen enabled, the sticky header automatically reduces its top and bottom padding as soon as it becomes sticky, giving it a slimmer, more modern look. A configurable Sticky Padding slider (0\u201350 px, default 8 px) lets you set exactly how much vertical padding the header should have while it is sticky. The transition between normal and compact size is animated using the same speed setting as other transitions. This is one of the most popular patterns in modern web design and requires no custom CSS.<\/p>\n\n<p><strong>Push-Up Element<\/strong>\nSpecify a CSS selector for an element (such as a footer or an in-page banner) that will push the sticky header out of view as it scrolls into the header's position. This prevents the sticky header from overlapping important content near the bottom of the page. The push-up movement is calculated in real time based on the element's position relative to the header.<\/p>\n\n<p><strong>Enter Animations<\/strong>\nChoose an animation that plays once when the header first becomes sticky:\n- None: The header sticks instantly with no animation.\n- Fade In: The header fades in from transparent to fully visible.\n- Slide Down: The header slides in from above the viewport, which provides the most polished and natural feel for most sites.<\/p>\n\n<p><strong>Animation Speed<\/strong>\nWhen an animation is selected, you can set the exact duration in milliseconds (from 0 to 1000 ms) to match the pace and personality of your site.<\/p>\n\n<p><strong>Drop Shadow<\/strong>\nAdds a soft box-shadow beneath the sticky header to visually separate it from the page content below. The shadow color and opacity are both configurable so you can match your design exactly. The shadow transitions in smoothly as the header sticks.<\/p>\n\n<p><strong>Custom Sticky Background Color, Opacity, and Glassmorphism<\/strong>\nIf your header uses a transparent background when it is in its normal position, enabling this option lets you set a background color that is applied only when the header is sticky. A Background Opacity slider (0\u2013100%) allows you to make the background semi-transparent rather than fully solid. A Backdrop Blur slider (0\u201320 px) adds a CSS <code>backdrop-filter: blur()<\/code> effect behind the header, creating the popular frosted-glass (glassmorphism) look. Combine a white background at around 85% opacity with 8\u201312 px of blur for a clean, modern glass-effect sticky header \u2014 no custom CSS required.<\/p>\n\n<p><strong>Responsive Breakpoint Control<\/strong>\nTwo independent width controls let you disable the sticky behavior at specific screen sizes:\n- Disable Below Width: Enter a pixel value and the sticky header will not activate on screens narrower than that width. Set to 0 to enable on all screen sizes. Useful if your mobile header uses a different layout or a hamburger menu that should not be sticky.\n- Disable Above Width: Enter a pixel value and the sticky header will not activate on screens wider than that value. Set to 0 to enable on all screen sizes.<\/p>\n\n<p><strong>Configurable Z-Index<\/strong>\nSet the CSS z-index value for the sticky header directly from the settings page. The default is 1000, which works for most themes. If another plugin or theme element appears on top of your sticky header, increase this value until the header sits on top.<\/p>\n\n<p><strong>CSS State Classes<\/strong>\nWhen enabled, the plugin adds the class <code>mshms-is-sticky<\/code> to the header element whenever it is in its sticky state, and <code>mshms-not-sticky<\/code> when it is not. These classes make it easy for developers and theme customizers to write CSS that targets each state independently, for example to change the logo size, font color, or padding when the header is sticky.<\/p>\n\n<p><strong>Display On (Page Type Control)<\/strong>\nChoose exactly which types of pages the sticky header should be active on. The available options are:\n- Home Page\n- Blog \/ Posts Page\n- Posts (single post pages)\n- Pages (single page entries)\n- Archives (category, tag, date, and author archives)\n- Search Results\n- 404 Page\n- Attachments\n- Any public custom post types registered on your site<\/p>\n\n<p><strong>Debug Mode<\/strong>\nDisplays a small overlay on the frontend of your site showing the currently detected header element and its CSS selector path, and logs detailed messages to the browser console. Use this mode when setting up the plugin or troubleshooting detection issues. Turn it off before going live.<\/p>\n\n<p><strong>Reset to Defaults<\/strong>\nA Reset to Defaults button on the settings page restores every option to its original out-of-the-box value in a single click. A confirmation prompt prevents accidental resets. This is useful when experimenting with settings and wanting to start fresh without manually adjusting each option.<\/p>\n\n<p><strong>No Coding Required<\/strong>\nAll settings are controlled from the WordPress admin panel under Settings - Sticky Header Menu. There is no need to edit any theme files, add custom code snippets, or write PHP. The plugin loads its scripts only on pages where the sticky header is enabled and only when the plugin itself is active.<\/p>\n\n<p><strong>Cache Compatibility<\/strong>\nWhen you save settings the plugin automatically clears caches for the most popular WordPress caching solutions, including WP Rocket, LiteSpeed Cache, WP Super Cache, W3 Total Cache, WP Fastest Cache, Cache Enabler, Hummingbird, SiteGround Optimizer, Breeze, and FlyingPress.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>menudoc-sticky-header-menu-on-scroll<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin directly from the WordPress plugin repository via Plugins - Add New.<\/li>\n<li>Activate the plugin through the Plugins menu in WordPress.<\/li>\n<li>Go to Settings - Sticky Header Menu to review and adjust the configuration. The plugin works with default settings for most themes.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20work%20with%20my%20theme%3F\"><h3>Will this work with my theme?<\/h3><\/dt>\n<dd><p>Yes, in almost all cases. The plugin uses a prioritised list of selectors and HTML structures that covers the vast majority of WordPress themes, including classic themes, popular page builder themes, and full-site editing (block) themes built with the WordPress Site Editor.<\/p><\/dd>\n<dt id=\"what%20if%20the%20wrong%20element%20becomes%20sticky%3F\"><h3>What if the wrong element becomes sticky?<\/h3><\/dt>\n<dd><p>Switch the detection mode to Custom Selector and enter the CSS selector for your exact header element. You can find the correct selector by inspecting the header in your browser's developer tools.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20add%20any%20front-end%20overhead%20when%20i%20disable%20it%3F\"><h3>Does the plugin add any front-end overhead when I disable it?<\/h3><\/dt>\n<dd><p>No. When the plugin is disabled from the settings page, no CSS or JavaScript is loaded on the front end at all.<\/p><\/dd>\n<dt id=\"can%20i%20style%20the%20sticky%20header%20differently%20with%20css%3F\"><h3>Can I style the sticky header differently with CSS?<\/h3><\/dt>\n<dd><p>Yes. Enable the CSS State Classes option and use <code>.mshms-is-sticky<\/code> in your custom CSS to target the header in its sticky state. You can apply any CSS property: different background, reduced padding, smaller logo via a child selector, and so on.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20transparent%20headers%3F\"><h3>Does it work with transparent headers?<\/h3><\/dt>\n<dd><p>Yes. Enable the Custom Background option and choose a color. That color is applied only when the header becomes sticky, so the header can remain transparent at the top of the page and switch to a solid (or semi-transparent) background once the user scrolls. Use the Background Opacity and Backdrop Blur sliders for a frosted-glass effect.<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20a%20frosted-glass%20sticky%20header%3F\"><h3>How do I create a frosted-glass sticky header?<\/h3><\/dt>\n<dd><p>Enable Custom Background, set the background color to white (or your site's primary color), reduce Background Opacity to around 80\u201390%, and set Backdrop Blur to 8\u201312 px. That produces a translucent, blurred header with no custom CSS required. Browser support for <code>backdrop-filter<\/code> is excellent in all modern browsers.<\/p><\/dd>\n<dt id=\"how%20do%20i%20stop%20the%20header%20from%20flickering%20when%20i%20scroll%20up%20slightly%3F\"><h3>How do I stop the header from flickering when I scroll up slightly?<\/h3><\/dt>\n<dd><p>Enable Hide on Scroll Down and Show on Scroll Up, then set the Scroll-Up Distance Threshold to a value like 80\u2013120 px. The header will only reappear after the user has scrolled upward by that many pixels, eliminating flicker caused by small accidental upward movements.<\/p><\/dd>\n<dt id=\"can%20i%20make%20the%20header%20smaller%20when%20it%20is%20sticky%3F\"><h3>Can I make the header smaller when it is sticky?<\/h3><\/dt>\n<dd><p>Yes. Enable Shrink on Scroll in the Appearance card and use the Sticky Padding slider to set the desired padding when the header is sticky. The transition is smooth and animated. If you need to change font size or logo size in addition to padding, enable CSS State Classes and write a rule targeting <code>.mshms-is-sticky<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed WordPress Plugin Check coding standards issues in the admin settings page: removed a UTF-8 byte order mark from the file, prefixed a global variable name, corrected placeholder ordering and translator comment placement in a translatable string, and ensured all dynamic output is properly escaped.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added Shrink on Scroll (Compact Mode): a new Appearance setting that reduces the header's top and bottom padding when sticky, with a configurable Sticky Padding slider (0\u201350 px) and smooth animated transition.<\/li>\n<li>Added Scroll-Up Distance Threshold: a new Behavior setting that requires the user to scroll upward by a configurable number of pixels (0\u2013300 px) before the header reappears, preventing flicker when Hide on Scroll Down and Show on Scroll Up are both active.<\/li>\n<li>Added Background Opacity slider (0\u2013100%) to the Custom Background option, allowing semi-transparent sticky headers.<\/li>\n<li>Added Backdrop Blur slider (0\u201320 px) to the Custom Background option, enabling a frosted-glass (glassmorphism) effect via CSS <code>backdrop-filter<\/code>.<\/li>\n<li>Added Reset to Defaults button on the settings page that restores all options to their original values in a single click, with a confirmation prompt to prevent accidental resets.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release of MenuDoc Sticky Header Menu on Scroll.<\/li>\n<li>Smart auto-detection of the header element using a prioritised selector list covering classic themes, page builder themes, and full-site editing block themes.<\/li>\n<li>Custom CSS selector mode for manual header targeting when auto-detection is not suitable.<\/li>\n<li>Scroll trigger distance setting to control how far the user must scroll before the header sticks.<\/li>\n<li>Top spacing (sticky offset) setting to add pixel space between the top of the viewport and the sticky header.<\/li>\n<li>WordPress admin bar awareness that automatically positions the sticky header below the admin toolbar on logged-in pages.<\/li>\n<li>Hide on Scroll Down option that slides the header out of view while the user scrolls down, reclaiming screen space.<\/li>\n<li>Show on Scroll Up option that brings the header back into view as soon as the user scrolls upward.<\/li>\n<li>Push-Up Element feature that smoothly slides the sticky header out of view when a specified page element (such as a footer) scrolls into its area.<\/li>\n<li>Three entry animations when the header first becomes sticky: None, Fade In, and Slide Down.<\/li>\n<li>Configurable animation speed in milliseconds.<\/li>\n<li>Drop Shadow option with configurable shadow color and opacity.<\/li>\n<li>Custom Sticky Background Color option for themes that use a transparent header.<\/li>\n<li>Responsive Disable Below Width control to turn off the sticky header on narrow screens.<\/li>\n<li>Responsive Disable Above Width control to turn off the sticky header on wide screens.<\/li>\n<li>Configurable z-index to control stacking order relative to other fixed elements.<\/li>\n<li>CSS State Classes that add mshms-is-sticky and mshms-not-sticky to the header element for custom CSS targeting.<\/li>\n<li>Debug Mode with a visual frontend overlay and browser console logging to assist with troubleshooting.<\/li>\n<li>Display On controls to enable the sticky header per page type: Home Page, Blog Page, Posts, Pages, Archives, Search Results, 404 Page, Attachments, and custom post types.<\/li>\n<li>Automatic cache clearing on settings save for WP Rocket, LiteSpeed Cache, WP Super Cache, W3 Total Cache, WP Fastest Cache, Cache Enabler, Hummingbird, SiteGround Optimizer, Breeze, and FlyingPress.<\/li>\n<li>Zero front-end scripts or styles loaded when the plugin is disabled.<\/li>\n<\/ul>","raw_excerpt":"Makes your site&#039;s header or menu sticky on scroll with auto-detection, animations, scroll direction control, and breakpoints. No coding required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/328499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=328499"}],"author":[{"embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/josevarghese"}],"wp:attachment":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=328499"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=328499"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=328499"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=328499"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=328499"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=328499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}