Shopify themes, liquid, logos, and UX
This is an advanced tutorial and is not supported by Shopify. It is specific to an unedited version of the Debut theme, released 7th of March. We cannot guarantee results for themes that have been modified with custom coding and/or apps.
We suggest hiring a Shopify Expert if you are not comfortable proceeding with the following tutorial, or wish to make any variations to this tutorial. We would also advise making a backup of your theme.
Having a sticky header means that the navigation, logo, and icons will follow the user while they scroll down the page. This is really useful if you want to ensure that your customers will have easy access to your navigation at all times! Let’s take a look at how to implement this for the Debut theme.
We recommend having your header set as Logo Alignment: Left. This is the default setting for the Debut Theme but it can be changed. To do this, you would need to open the Theme Editor.
On the left-hand side, click on the Header section and, from here, you will be able to change the alignment.
This is an important step, as the header will be shown on every portion of the page as you scroll. Setting the logo alignment to left will ensure the header takes up less space on the screen. We also can't ensure that the customization will work if this setting is not activated.
If you have an Announcement bar, and would like for it to not move with the rest of the header, please refer to option 2 of this guide.
This will make the whole header sticky, including the announcement bar.
theme.scss.liquid
file.#SearchDrawer { z-index:1001; } #shopify-section-header { position: fixed; z-index:1000; left:0; right:0; -webkit-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -moz-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -ms-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -o-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); background-color: {{ settings.color_body_bg }}; } #PageContainer { padding-top: 80px; } @media screen and (max-width: 749px) { #PageContainer { padding-top: 70px; } }
theme.js
file.function headerSize() { var $headerHeight = $('div#shopify-section-header').outerHeight(); $('#PageContainer').css('padding-top', $headerHeight); } $(window).on("load", headerSize); $(window).on("resize", $.debounce(500, headerSize));
And that's it! If you would prefer for the announcement bar to not scroll with the user, then you would need to follow the steps below.
In this section of the guide, we are assuming that you did not use the code above. If you have used it previously to make the whole header sticky, then you would need to revert your changes to make sure that you are working on an untouched theme.
theme.scss.liquid
file.#SearchDrawer { z-index:1001; } .site-header { position: fixed; z-index:1000; left:0; right:0; -webkit-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -moz-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -ms-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -o-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); } #PageContainer { padding-top: 80px; } @media screen and (max-width: 749px) { #PageContainer { padding-top: 70px; } }
theme.js
file.function headerSize() { var $headerHeight = $('div#shopify-section-header').outerHeight(); $('#PageContainer').css('padding-top', $headerHeight); } $(window).on("load", headerSize); $(window).on("resize", $.debounce(500, headerSize)); $(window).scroll(function() { scroll = $(window).scrollTop(); if (scroll >= 1) { $('.site-header').css('top', '0'); } else { $('.site-header').css('top', 'initial'); } });
To learn more visit the Shopify Help Center or the Community Blog.
Is there a way to do this in the Narrative Theme?
I am using Narrative theme. And it's pretty easy to this in that theme. Just follow the steps mentioned above.
good to see
@kwaris @AustinK @rahulmittal79
You may want to give a try to this solution if you're still having trouble with it.
Kind regards,
Diego
Awesome tutorial!
I do have a little problem though.... after I scroll down the page and then back to the top, the top bar covers the content underneath it.
if that makes sense....
Hei! I have the same problem. Did you find the solution?
No, not as yet...
Hi Rabbie and Alice,
My guess would be that the code that is being used is coming from Option II of the guide, and not Option I. The code in Option II will _only_ work correctly if the announcement bar is enabled.
If the announcement bar is not enabled, then it might create the behaviour that you are seeing. Could you please make sure that you are definitely using the CSS and Javascript from Option I of the guide, and not Option II?
Please keep in mind that this tutorial is strictly for the Debut theme and will not work for any other themes.
Let us know!
Sean
To learn more visit the Shopify Help Center or the Community Blog.
Ahh so I am using the Pt 2 code but with the bar dissabled in the theme....
Same here!
It's working now. Thank you!
So I have enabled the announcement bar but the announcement bar is still there...
iquid error shopify: could not find asset snippets / cart-popup.liquid ... is appearing on every page of my site .... what is this? Debut theme
Yes, I have that same issue,
Does someone have a solution?
At the bottom part of the code that goes into the theme.css.liquid there is the line of code called #page container {padding-top:80px;
The number 80 is what needs to be changed. For my case I changed the number 80 to 107. Let me know if that works
#SearchDrawer { z-index:1001; } #shopify-section-header { position: fixed; z-index:1000; left:0; right:0; -webkit-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -moz-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -ms-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); -o-box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); box-shadow:0px 2px 4px 0px rgba(0,0,0,.1); background-color: {{ settings.color_body_bg }}; } #PageContainer { padding-top: 80px; } @media screen and (max-width: 749px) { #PageContainer { padding-top: 70px; } }
Unfortunately it didn't work out, but thanks anyway!
Hi Sean,
Thank you for this tutorial. I am having the same problem as the users above except that I am using Option 1 -AND- I have the announcement bar enabled. The header and announcement bar stick to the top of the site and look great, but now the rest of the page content starts at the top of the page underneath the header. Any ideas how to move the page content down to begin underneath the header? Thanks!
I should add that I am also seeing the following error in my browser's debugger:
$(window).on("resize", $.debounce(500, headerSize)); <<<<<<<<< [$.debounce is not a function.]
Is there some library I'm missing here? I've copied the code exactly.
Thank you!
hi @SeanP
We seen all the comments and code , but all the codes may be not full-fill your needs .
We provide you a very simple code for "Debut" theme .
Any way here the code 🙂
<script>
//announcement bar
$("[data-section-id = header]").css({"position":"fixed","z-index":"99999","width":"100%","top":0,"background-color":"#f8f8f8"});
var header_height = $("[data-section-id = header]").height();
$("#PageContainer").css("margin-top",header_height);
</script>
Before you add the code please remove all the previous code what you use for it .
After remove Previous code, you add our code before the closing </body> tag.
Please see the ref: screenshot
This code is tested. Here the preview link : https://vuj4ixbxw35vpnro-29765088.shopifypreview.com
Thank you
I am using Minimal theme and the code above did not seem to work properly for me, although I do see that it works well on the sample site provided. So take that as you will. I also prefer the slight drop shadow that Sean's original code gives to the header, so I wanted to find a way to make the original code work with my theme.
Here is a solution I came up for Sean's / Shopify's sticky header code that works on my site. I'm not a professional developer, so buyer beware.
1. In the theme.js code, replace
$('#PageContainer').css('padding-top', $headerHeight);
with
$('.main-content').css('padding-top', $headerHeight);
2. In timber.scss.liquid, locate
.main-content { display: block; margin-top: $gutter * 2; padding-bottom: $gutter * 2; }
and add a line for padding-top with some hard-coded placeholder pixels
.main-content { display: block; margin-top: $gutter * 2; padding-bottom: $gutter * 2;
padding-top: 180px; }
Mess around with the "180px" number to find a padding that works for your site/header. This is just a placeholder to make sure the content loads immediately some place below the header before the javascript has a chance to kick in and calculate the actual padding required by your specific header. Before I added this second step, the site would immediately load with content behind the header and then after a second or two the content would be pushed down to the correct position. By making both these changes, the content will load in a way that is not disruptive to the user. I'm assuming it's not good to have such a hard-coded pixel value for padding-top, so this is a hybrid solution that holds the page content in roughly the right place while javascript comes up behind and changes it into a more precise number in the spirit of adaptivity.
Again, I'm not a professional developer and maybe a professional developer can offer some advice or improvements. But so far this is working well for me on both desktop and mobile.
hi
@wmwm wrote:I am using Minimal theme and the code above did not seem to work properly for me, although I do see that it works well on the sample site provided. So take that as you will. I also prefer the slight drop shadow that Sean's original code gives to the header, so I wanted to find a way to make the original code work with my theme.
Here is a solution I came up for Sean's / Shopify's sticky header code that works on my site. I'm not a professional developer, so buyer beware.
1. In the theme.js code, replace
$('#PageContainer').css('padding-top', $headerHeight);with
$('.main-content').css('padding-top', $headerHeight);2. In timber.scss.liquid, locate
.main-content { display: block; margin-top: $gutter * 2; padding-bottom: $gutter * 2; }and add a line for padding-top with some hard-coded placeholder pixels
.main-content { display: block; margin-top: $gutter * 2; padding-bottom: $gutter * 2;
padding-top: 180px; }Mess around with the "180px" number to find a padding that works for your site/header. This is just a placeholder to make sure the content loads immediately some place below the header before the javascript has a chance to kick in and calculate the actual padding required by your specific header. Before I added this second step, the site would immediately load with content behind the header and then after a second or two the content would be pushed down to the correct position. By making both these changes, the content will load in a way that is not disruptive to the user. I'm assuming it's not good to have such a hard-coded pixel value for padding-top, so this is a hybrid solution that holds the page content in roughly the right place while javascript comes up behind and changes it into a more precise number in the spirit of adaptivity.
Again, I'm not a professional developer and maybe a professional developer can offer some advice or improvements. But so far this is working well for me on both desktop and mobile.
Above code absolute perfect .
We provide that code for debut theme . If there you change the selector that code will also work perfect.
For that pushing effect you need to add initial padding-top in css.
Code works great, just would like to remove it from the cart page as it is blocking my upsell.
Thanks in advance.
If a menu with sub menu is longer than a phone screen you cannot see all the menu. Is there a bit of code that I can use to turn off Sticky/Fixed Header when viewed on phones. Thanks in advanced.
does anyone else get an issue with their cart when the header is sticky.
When i open the side cart the frozen header cuts off the top of the cart.
Anyone find a work around
Hello jtan,
Please share your site url.
So that i can check and let you know the exact solution here.
i found a work around but thank you for the help
.............
Hi guys,
Any reason why the header isn't sticky on desktop?
Also on mobile, it looks like the header isn't pushing down the rest of the page beneath it –– more so just cutting it off. How do we fix that?
https://sounds-of-crenshaw.myshopify.com/
Password is aoffaw
great code ty
Here's the fix to the Header covering the contents of the Body of the page.
You need to increase the space between the Header and the Body of the page. I found that this can be adjusted by changing the values in the code above (see my example below in bold) which had acceptable results for my site. Note that the top value changes the desktop version of the theme and the value below changes the mobile version.
#PageContainer {
padding-top: 130px;
}
@media screen and (max-width: 749px) {
#PageContainer {
padding-top: 200px;
thanks for posting @MinusH2O . I changed the values you gave to the following to fix the header on my page.
#PageContainer {
padding-top: 201px;
}
@media screen and (max-width: 749px) {
#PageContainer {
padding-top: 301px;
}
}
Hi Sean or anyone who can help.
Thanks for the detailed solution, which is very helpful...and now comes the however. I cannot find the under Assets mentioned file /theme.scss.liquid
I've looked at other posts and found out that the file may be named css.theme (no s at the beginning and no .liquid at the end) and accordong to the authors, that should also do the job.
So I pasted the code at the bottom of the file and then the second block of code in the Assets theme.js. file and it still doesn't work. I've made sure the Logo is aligned left before atarting the c.n.p action.
Any suggestion?
Thanks
Neil
UPDATE ...I read on until I found a suggestion from Silverclouding Shopify Expert. This seems to have solved the issues. So thanks and I'll close this message
Regards
hi @SeanP
We seen all the comments and code , but all the codes may be not full-fill your needs .
We provide you a very simple code for "Debut" theme .
Any way here the code 🙂
<script>
//announcement bar
$("[data-section-id = header]").css({"position":"fixed","z-index":"99999","width":"100%","top":0,"background-color":"#f8f8f8"});
var header_height = $("[data-section-id = header]").height();
$("#PageContainer").css("margin-top",header_height);
</script>
Before you add the code please remove all the previous code what you use for it .
After remove Previous code, you add our code before the closing </body> tag.
Please see the ref: screenshot
This code is tested. Here the preview link : https://vuj4ixbxw35vpnro-29765088.shopifypreview.com
Thank you
Hello @Silverclouding,
Is it possible for you to please help me with having a Sticky Header on my website?
This is my store URL: https://us-women.com
I am using the supply theme
!
I would really appreciate if you can please help me!
Thanks in advance,
Andi
User | RANK |
---|---|
142 | |
110 | |
79 | |
64 | |
63 |
Explore the 30-30-30 rule, a dynamic social media strategy for new businesses. Learn how t...
By Trevor Sep 20, 2023Discover how to leverage the often overlooked footer of your ecommerce site to gain custom...
By Skye Sep 15, 2023In this blog, we’ll be shining a light on Shopify Partners, Experts, and Affiliates. Who a...
By Imogen Sep 13, 2023