Вернуть действие медиа запроса
Написал небольшой скрипт адаптивного меню, при ширине экрана менее 999px меню исчезает и появляется иконка, чтобы открыть это меню. Но если скрыть его в маленком размере экрана а потом увеличить размер браузера (то есть сделать его больше 999px), меню не появляется обратно, надеюсь понятно объяснил. Помогите исправить это пожалуйста
$(document).ready(function() {
var menuIcon = $('.menuIcon');
menuIcon.on('click', function(e){
e.preventDefault;
$(this).toggleClass('menuIconActive');
});
menuIcon.on('click', function(){
$('#menu').toggleClass('menuOpen');
if($('#menu').hasClass('menuOpen')){
$('#menu').fadeIn(500);
} else {
$('#menu').fadeOut(500);
}
});
if ($(window).width() >= '999') {
$('#menu').css(display, flex);
}
});
header {
width: 100%;
height: 70px;
background: var(--dark);
}
.menuItems {
display: flex;
justify-content: space-around;
}
.menuItem {
display: inline-block;
text-transform: uppercase;
}
.menuIcon {
display: none;
position: relative;
width: 50px;
height: 50px;
cursor: pointer;
}
.menuIcon a {
display: block;
}
.menuIcon span,
.menuIcon span::before,
.menuIcon span::after {
position: absolute;
top: 50%;
margin-top: -1px;
left: 50%;
margin-left: -10px;
width: 20px;
height: 2px;
background-color: var(--light);
}
.menuIcon span::before,
.menuIcon span::after {
content: '';
display: block;
transition: .3s;
}
.menuIcon span::before {
transform: translateY(-5px);
}
.menuIcon span::after {
transform: translateY(5px);
}
.menuIconActive span {
height: 0;
}
.menuIconActive span::before {
transform: rotate(45deg);
}
.menuIconActive span::after {
transform: rotate(-45deg);
}
@media screen and (max-width:999px) {
.menu {
display: none;
}
.menuIcon {
display: inline-block;
}
.menuItems {
position: fixed;
display: block;
top: 0;
right: 0;
left: 0;
margin-top: 52px;
background-color: var(--mainColor);
z-index: 1000;
overflow: auto;
}
.menuItem {
display: block;
padding: 10px 0;
text-align: center;
color: var(--light);
}
}
.menuOpen .menuItem {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<header>
<div class="menu" id="menu">
<div class="menuItems">
<a href="#" class="menuItem">Главная</a>
<a href="#" class="menuItem">Наша команда</a>
<a href="#" class="menuItem">Приемущества</a>
<a href="#" class="menuItem">Связь с нами</a>
</div>
</div>
<!-- Mobile menu icon -->
<div class="menuIcon">
<a href="#">
<span></span>
</a>
</div>
</header>
Ответы (2 шт):
Автор решения: fanfer
→ Ссылка
$(document).ready(function() {
function someFunc() {
var menuIcon = $('.menuIcon');
menuIcon.on('click', function(e) {
e.preventDefault;
$(this).toggleClass('menuIconActive');
});
menuIcon.on('click', function() {
$('#menu').toggleClass('menuOpen');
if ($('#menu').hasClass('menuOpen')) {
$('#menu').fadeIn(500);
} else {
$('#menu').fadeOut(500);
}
});
if ($(window).width() >= '999') {
$('#menu').css(display, flex);
}
}
someFunc();
$(window).resize(function() {
someFunc();
})
});
header {
width: 100%;
height: 70px;
background: var(--dark);
}
.menuItems {
display: flex;
justify-content: space-around;
}
.menuItem {
display: inline-block;
text-transform: uppercase;
}
.menuIcon {
display: none;
position: relative;
width: 50px;
height: 50px;
cursor: pointer;
}
.menuIcon a {
display: block;
}
.menuIcon span,
.menuIcon span::before,
.menuIcon span::after {
position: absolute;
top: 50%;
margin-top: -1px;
left: 50%;
margin-left: -10px;
width: 20px;
height: 2px;
background-color: var(--light);
}
.menuIcon span::before,
.menuIcon span::after {
content: '';
display: block;
transition: .3s;
}
.menuIcon span::before {
transform: translateY(-5px);
}
.menuIcon span::after {
transform: translateY(5px);
}
.menuIconActive span {
height: 0;
}
.menuIconActive span::before {
transform: rotate(45deg);
}
.menuIconActive span::after {
transform: rotate(-45deg);
}
@media screen and (max-width:999px) {
.menu {
display: none;
}
.menuIcon {
display: inline-block;
}
.menuItems {
position: fixed;
display: block;
top: 0;
right: 0;
left: 0;
margin-top: 52px;
background-color: var(--mainColor);
z-index: 1000;
overflow: auto;
}
.menuItem {
display: block;
padding: 10px 0;
text-align: center;
color: var(--light);
}
}
.menuOpen .menuItem {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<header>
<div class="menu" id="menu">
<div class="menuItems">
<a href="#" class="menuItem">Главная</a>
<a href="#" class="menuItem">Наша команда</a>
<a href="#" class="menuItem">Приемущества</a>
<a href="#" class="menuItem">Связь с нами</a>
</div>
</div>
<!-- Mobile menu icon -->
<div class="menuIcon">
<a href="#">
<span></span>
</a>
</div>
</header>
Автор решения: Denis640Kb
→ Ссылка
Вам необходимо отслеживать размеры окна, и в зависимости от этого проверять ширину.
Так же лучше использовать параметр block вместо flex, чтобы они в одно слово не сливались.
Пример:
$(document).ready(function() {
var menuIcon = $('.menuIcon');
menuIcon.on('click', function(e){
e.preventDefault;
$(this).toggleClass('menuIconActive');
});
menuIcon.on('click', function(){
if($('#menu').hasClass('menuOpen')){
$('#menu').fadeIn(500);
} else {
$('#menu').fadeOut(500);
}
$('#menu').toggleClass('menuOpen');
});
$(window).resize(function () {
if ($(window).width() >= '999') {
$('#menu').css('display', 'block');
}
})
});
header {
width: 100%;
height: 70px;
background: var(--dark);
}
.menuItems {
display: flex;
justify-content: space-around;
}
.menuItem {
display: inline-block;
text-transform: uppercase;
}
.menuIcon {
display: none;
position: relative;
width: 50px;
height: 50px;
cursor: pointer;
}
.menuIcon a {
display: block;
}
.menuIcon span,
.menuIcon span::before,
.menuIcon span::after {
position: absolute;
top: 50%;
margin-top: -1px;
left: 50%;
margin-left: -10px;
width: 20px;
height: 2px;
background-color: var(--light);
}
.menuIcon span::before,
.menuIcon span::after {
content: '';
display: block;
transition: .3s;
}
.menuIcon span::before {
transform: translateY(-5px);
}
.menuIcon span::after {
transform: translateY(5px);
}
.menuIconActive span {
height: 0;
}
.menuIconActive span::before {
transform: rotate(45deg);
}
.menuIconActive span::after {
transform: rotate(-45deg);
}
@media screen and (max-width:999px) {
.menu {
display: none;
}
.menuIcon {
display: inline-block;
}
.menuItems {
position: fixed;
display: block;
top: 0;
right: 0;
left: 0;
margin-top: 52px;
background-color: var(--mainColor);
z-index: 1000;
overflow: auto;
}
.menuItem {
display: block;
padding: 10px 0;
text-align: center;
color: var(--light);
}
}
.menuOpen .menuItem {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<header>
<div class="menu" id="menu">
<div class="menuItems">
<a href="#" class="menuItem">Главная</a>
<a href="#" class="menuItem">Наша команда</a>
<a href="#" class="menuItem">Приемущества</a>
<a href="#" class="menuItem">Связь с нами</a>
</div>
</div>
<!-- Mobile menu icon -->
<div class="menuIcon">
<a href="#">
<span>123</span>
</a>
</div>
</header>