У меня возникли проблемы с выяснением причины, по которой меню мобильной навигации для мобильных устройств не отображается в Safari. Он отлично работает на chrome и firefox. Изначально у меня было меню флажков, и оно делало то же самое. Поэтому я переключился на меню на основе классов, которое запускается с функциями javascript, и оно все еще работает.
Это модифицированная версия этого из w3schools https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_overlay
javascript просто добавляет и удаляет стили, mobile-overlay-button-hidden используется для того, чтобы кнопка исчезла за кнопкой закрытия. body.style.overflow = 'hidden' используется для предотвращения прокрутки, когда окно открыто.
Вот оно живое: ryanjthacker.com
nav {
position: fixed;
font-size: 14px;
width: 100%;
overflow: hidden;
top: 0;
padding-top: 14px;
padding-bottom: 14px;
z-index: 1;
@media (max-width: #{map-get($breakpoints, "tablet")}) {
width: 100vw;
font-size: $font-size-mobile-p;
}
}
.desktop-nav {
@media (max-width: #{map-get($breakpoints, "tablet")}) {
display: none;
}
}
.nav-img {
height: 20px;
float: left;
padding-left: 40px;
margin: auto;
z-index: 2;
position: relative;
@media (max-width: #{map-get($breakpoints, "tablet")}) {
padding-left: 20px;
}
}
.nav-links {
margin-right: 60px;
text-decoration: none;
float: right;
color: white;
letter-spacing: 1.5px;
@media (max-width: #{map-get($breakpoints, "tablet")}) {
margin-top: 2px;
margin-right: 20px;
}
}
/* Mobile Menu Overlay */
.mobile-overlay {
display: none;
@media (max-width: #{map-get($breakpoints, "tablet")}) {
display: block;
height: 100%;
width: 0%;
position: fixed;
z-index: 1;
top: 0;
right: 0;
background-color: rgba(12, 12, 12, 0.959);
overflow-x: hidden;
transition: 0.7s;
}
}
.mobile-overlay-content {
position: relative;
top: 50%;
transform: translateY(-50%);
width: 100%;
text-align: center;
margin-top: 30px;
}
.mobile-overlay a {
padding: 15px;
text-decoration: none;
font-size: 26px;
color: $clr-default;
display: block;
transition: 0.3s;
}
.mobile-overlay a:hover,
.mobile-overlay a:focus {
color: $clr-default;
}
.mobile-overlay .closebtn {
position: absolute;
top: -30px;
right: 4px;
font-size: 50px;
}
.mobile-overlay-button {
display: none;
@media (max-width: #{map-get($breakpoints, "tablet")}) {
display: block;
position: absolute;
top: 50%;
transform: translateY(-50%);
right: 0;
font-size: 30px;
margin-right: 18px;
cursor: pointer;
}
}
.mobile-overlay-button-hidden {
opacity: 0;
transition: opacity 1s, height 0 1s;
height: 0;
}
const mobileNav = document.getElementById('mobile-nav');
const closeBtn = document.querySelector('.closebtn');
const openBtn = document.querySelector('.mobile-overlay-button');
const body = document.querySelector('body');
function openNav() {
mobileNav.style.width = '100%';
closeBtn.classList.remove('mobile-overlay-button-hidden');
openBtn.classList.add('mobile-overlay-button-hidden');
body.style.overflow = 'hidden';
}
function closeNav() {
mobileNav.style.width = '0%';
closeBtn.classList.add('mobile-overlay-button-hidden');
openBtn.classList.remove('mobile-overlay-button-hidden');
body.style.overflow = 'visible';
}