У меня есть сайт, который я разрабатываю для друга для развлечения, и у меня проблемы с CSS. Я следовал руководству https://www.fireship.io об изменении темы. Моя проблема в том, что когда я нажимаю тему в сафари, мой раскрывающийся список не будет хорошо ... раскрывающийся. (ps. отлично работает в любом другом браузере)
// DOM Elements
const darkButton = document.getElementById("dark");
const lightButton = document.getElementById("light");
const solarButton = document.getElementById("solar");
const body = document.body;
// Apply the cached theme on reload
const theme = localStorage.getItem("theme");
const isSolar = localStorage.getItem("isSolar");
if (theme) {
body.classList.add(theme);
isSolar && body.classList.add("solar");
}
// Button Event Handlers
darkButton.onclick = () => {
body.classList.replace("light", "dark");
localStorage.setItem("theme", "dark");
};
lightButton.onclick = () => {
body.classList.replace("dark", "light");
localStorage.setItem("theme", "light");
};
solarButton.onclick = () => {
if (body.classList.contains("solar")) {
body.classList.remove("solar");
localStorage.removeItem("isSolar");
} else {
body.classList.add("solar");
localStorage.setItem("isSolar", true);
}
};
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500&display=swap");
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
nav {
display: flex;
justify-content: space-around;
align-items: center;
height: 10vh;
background: var(--bg-nav);
font-family: "Poppins", sans-serif;
}
.logo {
color: var(--text);
text-transform: capitalize;
letter-spacing: 5px;
font-weight: 500;
font-size: 20;
}
.nav-links {
align-items: center;
display: flex;
justify-content: space-around;
width: 50%;
}
.nav-links a {
text-decoration: none;
color: var(--text);
font-weight: 300;
letter-spacing: 3px;
font-size: 14px;
}
.nav-links li {
list-style: none;
}
.burger {
display: none;
}
.burger div {
width: 25px;
height: 2px;
background-color: var(--burger-color);
margin: 6px;
transition: all 0.3s ease;
}
.contact {
background-color: rgb(37, 192, 192);
padding: 8px 30px;
border-radius: 25px;
color: var(--text);
border: none;
cursor: pointer;
font-size: 14px;
}
.contact:hover {
opacity: 0.8;
}
.dropdown {
position: absolute;
width: 500px;
opacity: 0;
z-index: 2;
background: var(--bg-dropdown);
border-top: 2px solid var(--border-color);
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: flex;
display: none;
align-items: center;
justify-content: space-around;
height: 3rem;
margin-top: 1.22rem;
padding: 0.5rem;
box-shadow: rgba(2, 8, 20, 0.1) 0px 0.175em 0.5em;
transform: translateX(-40%);
transition: opacity 0.15s ease-out;
}
.hasDropdown:hover .dropdown {
display: flex;
opacity: 1;
pointer-events: auto;
}
.dropdown-item a {
width: 100%;
height: 100%;
size: 0.7rem;
padding-left: 10px;
font-weight: bold;
}
.dropdown-item a::before {
content: " ";
border: 2px solid var(--border-color);
border-radius: 50%;
width: 2rem;
height: 2rem;
display: inline-block;
vertical-align: middle;
margin-right: 10px;
}
@media screen and (max-width: 1024px) {
.nav-links {
width: 60%;
}
}
@media screen and (max-width: 768px) {
body {
overflow-x: hidden;
}
.nav-links {
position: absolute;
right: 0px;
height: 90vh;
top: 10vh;
background-color: rgb(87, 87, 87);
display: flex;
flex-direction: column;
align-items: center;
width: 50%;
transform: translateX(100%);
transition: transform 0.4s ease-in;
z-index: 1;
}
.nav-links li {
opacity: 0;
background-color: gray;
padding: 5px 35px;
border-radius: 10px;
}
.burger {
display: block;
cursor: pointer;
}
}
@media screen and (max-width: 450px) {
body {
overflow-x: hidden;
}
.nav-links {
position: absolute;
right: 0px;
height: 90vh;
top: 10vh;
background-color: rgb(87, 87, 87);
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
transform: translateX(100%);
transition: transform 0.4s ease-in;
}
.nav-links li,
button {
opacity: 0;
}
.burger {
display: block;
cursor: pointer;
}
}
.nav-active {
transform: translateX(0%);
}
@keyframes navLinkFade {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0px);
}
}
.toggle .line1 {
transform: rotate(-45deg) translate(-5px, 6px);
}
.toggle .line2 {
opacity: 0;
}
.toggle .line3 {
transform: rotate(45deg) translate(-5px, -6px);
}
:root {
--white: #ffffff;
--gray0: #f8f8f8;
--gray1: #dbe1e8;
--gray2: #b2becd;
--gray3: #6c7983;
--gray4: #454e56;
--gray5: #2a2e35;
--gray6: #12181b;
--black: #000000;
--blue: #0084a5;
--purple: #a82dd1;
--yellow: #fff565;
}
.light {
--bg: var(--gray3);
--bg-nav: linear-gradient(to right, var(--gray1), var(--gray3));
--bg-dropdown: var(--gray0);
--text: var(--gray6);
--border-color: var(--blue);
--bg-solar: var(--yellow);
--burger-color: var(--black);
}
.dark {
--bg: var(--gray5);
--bg-nav: linear-gradient(to right, var(--gray5), var(--gray6));
--bg-dropdown: var(--gray6);
--text: var(--gray0);
--border-color: var(--purple);
--bg-solar: var(--blue);
--burger-color: var(--white);
}
.solar {
--gray0: #fbffd4;
--gray1: #f7f8d0;
--gray2: #b6f880;
--gray3: #5ec72d;
--gray4: #3ea565;
--gray5: #005368;
--gray6: #003d4c;
}
#dark::before {
background: #2a2e35;
}
#light::before {
background: #ffffff;
}
#solar::before {
background: var(--bg-solar);
}
<nav>
<div class="logo">
Jeno
</div>
<ul class="nav-links">
<li><a href="pages/projects.html">Projects</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">About</a></li>
<li class="hasDropdown">
<a href="#">Theme</a>
<ul class="dropdown">
<li class="dropdown-item">
<a id="light" href="#">light</a>
</li>
<li class="dropdown-item">
<a id="dark" href="#">dark</a>
</li>
<li class="dropdown-item">
<a id="solar" href="#">solarize</a>
</li>
</ul>
</li>
<button class="contact">Contact</button>
</ul>
<div class="burger">
<div class="line1"></div>
<div class="line2"></div>
<div class="line3"></div>
</div>
</nav>
(этот фрагмент не будет работать, поэтому вот код: https://codepen.io/ksaeidnia0/pen/VwvrEBr)