Как правильно зафиксировать меню с вкладками над контентом внутри страницы?
Есть контентная область с верхним меню (переключение вкладок), нужно сделать так чтобы при скроллинге страницы, когда карточки уходят вверх, меню оставалось на том же месте фиксированно. Переделывать верстку шаблона нет желания и времени, т.к это конструктор на WordPress и нужно будет все переверстывать. Пробовал задавать позицию position: fixed = не работает, далее пробовал динамически менять высоту при скроллинге на jQuery = работает но криво и дергано, переопределил общий скролл страницы и задал блоку фикс высоту, работало но на Маке сказали что работает криво и не приняли т_т. Прошу ваш совет, то что придумал, я пробовал. Очень нужна ваша помощь, я новичок в этом, готов оплатить.
2 варианта, которые я делал, еще в стилях CSS убирал скролл:
|
1 |
jQuery(document).scroll(function () { var scroll = jQuery(this).scrollTop(); var topDist = jQuery('.wpb_wrapper.tabbed.clearfix').eq(0).position(); var tabMenu = jQuery('.wpb_tabs_nav.ui-tabs-nav').eq(0); if (scrollTimeout) { clearTimeout(scrollTimeout); } if (tabMenu.css('visibility') != 'hidden') { tabMenu.css('visibility', 'hidden'); console.info('TT:0'); } if (scroll > topDist.top) { console.info('TT:1'); scrollTimeout = setTimeout(function() { tabMenu = jQuery('.wpb_tabs_nav.ui-tabs-nav').eq(0); console.info('TT:2'); if (tabMenu.css('visibility') == 'hidden') { console.info('TT:3'); tabMenu.css({ "position":"relative", "top": (scroll - 30) + "px", "border-bottom-left-radius" : "12px", "border-bottom-right-radius" : "12px", "border-top-right-radius" : "12px", "box-shadow" : "0 2px 12px rgb(0 0 0 / 7%)", "visibility": "visible" }); } }, 700); } else { tabMenu.css({ "position":"relative", "top":"-10px", "border-bottom-left-radius" : "0", "border-bottom-right-radius" : "0", "border-top-right-radius" : "0", "box-shadow" : "none", "visibility": "visible" }); } }); } // вариант 2 if (jQuery(window).width() >= 768) { // Функция для переопределения стандартного скроллинга jQuery(document).bind('mousewheel DOMMouseScroll wheel', function(e) { e.preventDefault(); var delta = e.originalEvent.deltaY || e.originalEvent.detail || e.originalEvent.wheelDelta; var $element = jQuery('.wpb_wrapper.tabbed.clearfix').eq(0); var scrollTop = $element.scrollTop(); var scrollAmount = 300; if (delta < 0) { scrollTop -= scrollAmount; } else { scrollTop += scrollAmount; } $element.stop().animate({ scrollTop: scrollTop }, 300); }); } |
Вот пример (tab1, tab2, tab3 - меню которое нужно зафиксировать):
Дополнительно:
Содержание
position: sticky; top: 0;?
ну или в top высоту header-а, если он тоже сверху страницы всегда болтается
Ответы:
1. замеряем сколько Px от верах страницы до табов (a)
2. при скролле замеряем насколько проскроллили (b)
3. если b > a, добавляем блоку табов класс is-active (например)
4. в стилях описываем его положение, проще всего через fixed
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?

Для зафиксирования меню с вкладками над контентом внутри страницы можно использовать CSS и JavaScript. Для начала создадим HTML структуру страницы с меню и контентом:
htmlTab 1 Content
This is the content of Tab 1.
Tab 2 Content
This is the content of Tab 2.
Tab 3 Content
This is the content of Tab 3.
Теперь создадим стили для меню и контента в файле styles.css:
css.tabs {
overflow: hidden;
background-color: #f1f1f1;
}
.tablink {
float: left;
display: block;
background-color: #ccc;
color: black;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
.tabcontent {
display: none;
padding: 20px;
border: 1px solid #ccc;
}
.tablink:hover {
background-color: #ddd;
}
.tablink.active {
background-color: #e9e9e9;
}
Наконец, добавим JavaScript для функциональности переключения вкладок в файле script.js:
javascript
function openTab(evt, tabName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablink");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabName).style.display = "block";
evt.currentTarget.className += " active";
}
Теперь при прокрутке страницы меню с вкладками будет оставаться видимым над контентом благодаря CSS свойству
position: fixed;. Важно протестировать на различных устройствах и браузерах, чтобы убедиться, что меню корректно работает и отображается.