diff --git a/addons/website/static/src/js/content/menu.js b/addons/website/static/src/js/content/menu.js
index 1b6fa07a5c0..0f70408fc47 100644
--- a/addons/website/static/src/js/content/menu.js
+++ b/addons/website/static/src/js/content/menu.js
@@ -15,7 +15,7 @@ publicWidget.registry.affixMenu = publicWidget.Widget.extend({
var def = this._super.apply(this, arguments);
var self = this;
- this.$headerClone = this.$target.clone().addClass('o_header_affix affix').removeClass('o_affix_enabled').removeAttr('id');
+ this.$headerClone = this.$target.clone().addClass('o_header_affix affix o_top_fixed_element').removeClass('o_affix_enabled').removeAttr('id');
this.$headerClone.insertAfter(this.$target);
this.$headers = this.$target.add(this.$headerClone);
this.$dropdowns = this.$headers.find('.dropdown');
diff --git a/addons/website/static/src/js/content/snippets.animation.js b/addons/website/static/src/js/content/snippets.animation.js
index a4c82cfe2de..e0cf1df3fcd 100644
--- a/addons/website/static/src/js/content/snippets.animation.js
+++ b/addons/website/static/src/js/content/snippets.animation.js
@@ -908,11 +908,22 @@ registry.anchorSlide = publicWidget.Widget.extend({
/**
* @private
* @param {jQuery} $el the element to scroll to.
+ * @param {string} [scrollValue='true'] scroll value
*/
- _scrollTo: function ($el) {
+ _scrollTo: function ($el, scrollValue = 'true') {
+ const headerHeight = this._computeHeaderHeight();
$('html, body').animate({
- scrollTop: $el.offset().top,
- }, 500);
+ scrollTop: $el.offset().top - headerHeight,
+ }, scrollValue === 'true' ? 500 : 0);
+ },
+ /**
+ * @private
+ */
+ _computeHeaderHeight: function () {
+ let headerHeight = 0;
+ const $navbarFixed = $('.o_top_fixed_element');
+ _.each($navbarFixed, el => headerHeight += $(el).outerHeight());
+ return headerHeight;
},
//--------------------------------------------------------------------------
@@ -931,11 +942,12 @@ registry.anchorSlide = publicWidget.Widget.extend({
return;
}
var $anchor = $(hash);
- if (!$anchor.length || !$anchor.attr('data-anchor')) {
+ const scrollValue = $anchor.attr('data-anchor');
+ if (!$anchor.length || !scrollValue) {
return;
}
ev.preventDefault();
- this._scrollTo($anchor);
+ this._scrollTo($anchor, scrollValue);
},
});
diff --git a/addons/website/views/website_navbar_templates.xml b/addons/website/views/website_navbar_templates.xml
index e32dff679f3..56a4d6c264b 100644
--- a/addons/website/views/website_navbar_templates.xml
+++ b/addons/website/views/website_navbar_templates.xml
@@ -6,7 +6,7 @@
-