#javascript #css
#javascript #css
Вопрос:
У меня проблема на моем сайте WordPress здесь: https://nazim.skypage.in /
На мобильном устройстве, когда вы переключаете меню, оно сразу же исчезает, как только вы начинаете прокручивать вниз. Действительно странно то, что этого не происходит в инспекторе Chrome, я могу прокручивать меню вверх и вниз просто отлично.
Любые рекомендации были бы очень полезны. Спасибо!
Вот мой исходный код HTML:
<nav class="clearfix" id='cssmenu'>
<div id="head-mobile"></div>
<div class="button">Menu</div>
<ul id="menu-main-menu" class="menu"><li id="menu-item-10" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-10"><a href="https://nazim.skypage.in/" aria-current="page">Home</a></li>
<li id="menu-item-237" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-237"><a href="https://example.com/blog/">Blog</a></li>
<li id="menu-item-313" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-313"><a href="#">Link 1</a>
<ul class="sub-menu">
<li id="menu-item-317" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-317"><a href="#">Sub Menu</a></li>
</ul>
</li>
<li id="menu-item-314" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-314"><a href="#">Link 2</a>
<ul class="sub-menu">
<li id="menu-item-318" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-318"><a href="#">Sub Menu</a></li>
</ul>
</li>
<li id="menu-item-315" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-315"><a href="#">Link 3</a></li>
<li id="menu-item-316" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-316"><a href="#">Link 4</a></li>
</ul></nav>
Вот меню CSS:
nav ul {
padding: 0;
margin: 0
}
nav .button {
display: none
}
#cssmenu,
#cssmenu #head-mobile,
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul li a {
border: 0;
list-style: none;
line-height: 1;
display: block;
position: relative;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box
}
#cssmenu:after,
#cssmenu>ul:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0
}
#cssmenu #head-mobile {
display: none
}
#cssmenu {
float: right;
padding: .5% 0
}
#cssmenu>ul>li {
float: left
}
#cssmenu>ul>li>a {
padding: 17px;
font-size: 15px;
letter-spacing: 1px;
text-decoration: none;
color: #42474e;
text-transform: uppercase
}
#cssmenu>ul>li>a:hover {
color: #265683
}
ul#menu-menu {
float: right
}
#cssmenu ul li.active a,
#cssmenu>ul>li:hover>a {
color: #265683
}
#cssmenu ul li.active,
#cssmenu ul li.active:hover,
#cssmenu ul li.has-sub.active:hover,
#cssmenu>ul>li:hover {
border-bottom: 3px solid #265683;
-webkit-transition: background .3s ease;
-ms-transition: background .3s ease;
transition: background .3s ease
}
#cssmenu>ul>li.has-sub>a:after,
#cssmenu>ul>li.has-sub>a:before {
display: block;
background: #185387;
content: '';
position: absolute
}
#cssmenu ul ul li,
#cssmenu>ul>li.has-sub>a:before {
-webkit-transition: all .25s ease;
-ms-transition: all .25s ease
}
#cssmenu>ul>li.has-sub>a {
padding-right: 30px
}
#cssmenu>ul>li.has-sub>a:after {
top: 24px;
right: 11px;
width: 8px;
height: 2px
}
#cssmenu>ul>li.has-sub>a:before {
top: 21px;
right: 14px;
width: 2px;
height: 8px;
transition: all .25s ease
}
#cssmenu>ul>li.has-sub:hover>a:before {
top: 23px;
height: 0
}
#cssmenu ul ul {
position: absolute;
left: -9999px
}
#cssmenu ul ul li {
height: 0;
background: #333;
transition: all .25s ease
}
#cssmenu ul ul li.has-sub>a:after,
#cssmenu ul ul li.has-sub>a:before {
position: absolute;
display: block;
background: #ddd;
content: ''
}
#cssmenu li:hover>ul {
left: auto
}
#cssmenu li:hover>ul>li {
height: 35px
}
#cssmenu ul ul ul {
margin-left: 100%;
top: 0
}
#cssmenu ul ul li a {
border-bottom: 1px solid rgba(150, 150, 150, .15);
padding: 11px 15px;
width: 190px;
font-size: 15px;
text-decoration: none;
color: #ddd;
font-weight: 400
}
#cssmenu ul ul li.last-item>a,
#cssmenu ul ul li:last-child>a {
border-bottom: 0
}
#cssmenu ul ul li a:hover,
#cssmenu ul ul li:hover>a {
color: #fff
}
#cssmenu ul ul li.has-sub>a:after {
top: 16px;
right: 11px;
width: 8px;
height: 2px
}
#cssmenu ul ul li.has-sub>a:before {
top: 13px;
right: 14px;
width: 2px;
height: 8px;
-webkit-transition: all .25s ease;
-ms-transition: all .25s ease;
transition: all .25s ease
}
#cssmenu ul ul>li.has-sub:hover>a:before {
top: 17px;
height: 0
}
#cssmenu ul li.has-sub ul li.has-sub ul li:hover,
#cssmenu ul ul li.has-sub:hover {
background: #363636
}
#cssmenu ul ul ul li.active a {
border-left: 1px solid #333
}
#cssmenu>ul ul>li.has-sub>ul>li.active>a,
#cssmenu>ul>li.has-sub>ul>li.active>a {
border-top: 1px solid #333
}
@media screen and (max-width:1000px) {
#cssmenu ul,
#cssmenu ul ul>li.has-sub>a:after,
#cssmenu ul ul>li.has-sub>a:before,
#cssmenu>ul>li.has-sub>a:after,
#cssmenu>ul>li.has-sub>a:before {
display: none
}
#cssmenu,
#cssmenu ul,
nav {
width: 100%
}
#cssmenu ul li {
width: 100%;
border-top: 1px solid #eee
}
#cssmenu li:hover>ul>li,
#cssmenu ul ul li {
height: auto
}
#cssmenu ul li a,
#cssmenu ul ul li a {
width: 100%;
border-bottom: 0
}
#cssmenu>ul>li {
float: none
}
#cssmenu ul ul li a {
padding-left: 25px;
color: #ddd;
background: 0 0
}
#cssmenu ul ul li {
background: #333!important
}
#cssmenu ul ul li:hover {
background: #363636!important
}
#cssmenu ul ul ul li a {
padding-left: 35px
}
#cssmenu ul ul li.active>a,
#cssmenu ul ul li:hover>a {
color: #fff
}
#cssmenu ul ul,
#cssmenu ul ul ul {
position: relative;
left: 0;
width: 100%;
margin: 0;
text-align: left
}
#cssmenu #head-mobile {
display: block;
color: #ddd;
font-size: 12px;
font-weight: 700
}
nav .button {
width: 94%;
padding: 3%;
right: 0;
top: 0;
cursor: pointer;
z-index: 12399994;
display: block;
box-shadow: none;
border-radius: 0;
background: #f2b74c;
color: #fff;
text-transform: uppercase;
font-size: 100%
}
nav .button:after,
nav .button:before {
right: 20px;
width: 20px;
position: absolute;
display: block;
content: ''
}
nav .button:after {
top: 22px;
height: 4px;
border-top: 2px solid #fff;
border-bottom: 2px solid #fff
}
nav .button:before {
-webkit-transition: all .3s ease;
-ms-transition: all .3s ease;
transition: all .3s ease;
top: 16px;
height: 2px;
background: #fff
}
nav .button.menu-opened:after {
-webkit-transition: all .3s ease;
-ms-transition: all .3s ease;
transition: all .3s ease;
top: 23px;
border: 0;
height: 2px;
width: 19px;
background: #fff;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg)
}
nav .button.menu-opened:before {
top: 23px;
background: #fff;
width: 19px;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg)
}
#cssmenu .submenu-button {
position: absolute;
z-index: 99;
right: 0;
top: 0;
display: block;
border-left: 1px solid #eee;
height: 50px;
width: 50px;
cursor: pointer
}
#cssmenu .submenu-button.submenu-opened {
background: #262626
}
#cssmenu ul ul .submenu-button {
height: 38px;
width: 38px
}
#cssmenu .submenu-button:after {
position: absolute;
top: 23px;
right: 21px;
width: 8px;
height: 2px;
display: block;
background: #ddd;
content: ''
}
#cssmenu ul ul .submenu-button:after {
top: 17px;
right: 15px
}
#cssmenu .submenu-button.submenu-opened:after {
background: #fff
}
#cssmenu .submenu-button:before {
position: absolute;
top: 20px;
right: 24px;
display: block;
width: 2px;
height: 8px;
background: #ddd;
content: ''
}
#cssmenu ul ul .submenu-button:before {
top: 14px;
right: 18px
}
#cssmenu .submenu-button.submenu-opened:before {
display: none
}
#cssmenu ul ul ul li.active a {
border-left: none
}
#cssmenu>ul ul>li.has-sub>ul>li.active>a,
#cssmenu>ul>li.has-sub>ul>li.active>a {
border-top: none
}
Вот мои js-коды меню:
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
<script>(function($) {
$.fn.menumaker = function(options) {
var cssmenu = $(this), settings = $.extend({
format: "dropdown",
sticky: false
}, options);
return this.each(function() {
$(this).find(".button").on('click', function(){
$(this).toggleClass('menu-opened');
var mainmenu = $(this).next('ul');
if (mainmenu.hasClass('open')) {
mainmenu.slideToggle().removeClass('open');
}
else {
mainmenu.slideToggle().addClass('open');
if (settings.format === "dropdown") {
mainmenu.find('ul').show();
}
}
});
cssmenu.find('li ul').parent().addClass('has-sub');
multiTg = function() {
cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
cssmenu.find('.submenu-button').on('click', function() {
$(this).toggleClass('submenu-opened');
if ($(this).siblings('ul').hasClass('open')) {
$(this).siblings('ul').removeClass('open').slideToggle();
}
else {
$(this).siblings('ul').addClass('open').slideToggle();
}
});
};
if (settings.format === 'multitoggle') multiTg();
else cssmenu.addClass('dropdown');
if (settings.sticky === true) cssmenu.css('position', 'fixed');
resizeFix = function() {
var mediasize = 1000;
if ($( window ).width() > mediasize) {
cssmenu.find('ul').show();
}
if ($(window).width() <= mediasize) {
cssmenu.find('ul').hide().removeClass('open');
}
};
resizeFix();
return $(window).on('resize', resizeFix);
});
};
})(jQuery);
(function($){
$(document).ready(function(){
$("#cssmenu").menumaker({
format: "multitoggle"
});
});
})(jQuery);
</script>
Комментарии:
1. Я проверил ваш сайт, но такой проблемы нет. Можете ли вы объяснить это, добавив изображения
2. Это ваша тема WordPress, проверьте, как управлять ею с помощью WordPress
Ответ №1:
Я ничего не смог найти в вашем коде, так что это просто дикое предположение. Но это звучит как проблема с javascript. Я думаю, что меню (и его стили) сбрасываются, когда пользователь изменяет размер окна. Большинство мобильных браузеров скрывают строку URL при прокрутке, что вызывает событие изменения размера окна в javascript.
Комментарии:
1. Не могли бы вы рассказать мне, как это исправить.?
2. Да, он скрывается при изменении размера экрана. Я проверил его в Chrome с помощью опции mobile responsive, а затем попытался изменить размер окна, в результате открытое меню скрылось. Есть ли какое-либо решение для этого?
3. Я обновил свой вопрос с помощью js-кодов меню. Пожалуйста, посмотрите и помогите мне исправить проблему исчезновения меню при прокрутке / изменении размера окна.
Ответ №2:
Для меня предположение СКурентьеса было правдой. Что сработало для меня:
- избавьтесь от всех событий изменения размера в js
- дублируйте HTML-код меню, например, в классе. .menu.mobile, другое в разделе .menu.desktop. Каждый из них не отображается / отображается медиа-запросом.
- затем привяжите различное поведение js к классам .menu и .desktop.