//* Define variables and html elements
const sidebar = document.querySelector('.sidebar');
const arrow = document.querySelector('.arrow');
//* Add event listeners
sidebar.addEventListener('mouseout', () => {
arrow.style.transitionDelay = '0s';
sidebar.style.transitionDelay = '0.05s';
})
sidebar.addEventListener('mouseover', () => {
arrow.style.transitionDelay = '0.05s';
sidebar.style.transitionDelay = '0s';
})
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
height: 100vh;
width: 100vw;
display: flex;
}
.sidebar {
position: fixed;
height: 100vh;
background-color: black;
width: 80px;
transition: all 0.5s ease;
z-index: 0;
}
.arrow {
position: relative;
left: 7.5px;
right: 7.5px;
top: 7.5px;
width: 65px;
height: 65px;
fill: rgb(115, 151, 162);
transition: all 0.5s ease;
z-index: 2;
}
.arrowBackground {
position: absolute;
top: 0;
width: 82px;
height: 80px;
background-color: rgb(30, 30, 30);
z-index: 1;
border: 2px solid rgb(50, 50, 50);
transition: all 0.5s ease;
}
.sidebar:hover {
width: 240px;
}
body:has(.sidebar:hover) .arrow {
transform: rotate(180deg);
left: 167.5px;
}
body:has(.sidebar:hover) .arrowBackground {
left: 160px;
}
<section class="sidebar">
<div class="icons">
<div>
<svg class="icon arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
<div class="arrowBackground"></div>
</div>
</div>
</section>
when i hover over the side bar the arrow and sidebar take 0.5s to transition but the arrow background class does it straight away and i dont know why and i want to it to take 0.5s to transition but i dont know how i would fix it
i tried rearranging some code but nothing worked at all and i tried setting the transition delay in javascript but that still didnt work
>Solution :
Add left: 0;
to arrowBackground
otherwise it doesn’t know what it’s transitioning from
//* Define variables and html elements
const sidebar = document.querySelector('.sidebar');
const arrow = document.querySelector('.arrow');
//* Add event listeners
sidebar.addEventListener('mouseout', () => {
arrow.style.transitionDelay = '0s';
sidebar.style.transitionDelay = '0.05s';
})
sidebar.addEventListener('mouseover', () => {
arrow.style.transitionDelay = '0.05s';
sidebar.style.transitionDelay = '0s';
})
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
height: 100vh;
width: 100vw;
display: flex;
}
.sidebar {
position: fixed;
height: 100vh;
background-color: black;
width: 80px;
transition: all 0.5s ease;
z-index: 0;
}
.arrow {
position: relative;
left: 7.5px;
right: 7.5px;
top: 7.5px;
width: 65px;
height: 65px;
fill: rgb(115, 151, 162);
transition: all 0.5s ease;
z-index: 2;
}
.arrowBackground {
position: absolute;
left: 0;
top: 0;
width: 82px;
height: 80px;
background-color: rgb(30, 30, 30);
z-index: 1;
border: 2px solid rgb(50, 50, 50);
transition: all 0.5s ease;
}
.sidebar:hover {
width: 240px;
}
body:has(.sidebar:hover) .arrow {
transform: rotate(180deg);
left: 167.5px;
}
body:has(.sidebar:hover) .arrowBackground {
left: 160px;
}
<section class="sidebar">
<div class="icons">
<div>
<svg class="icon arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
<div class="arrowBackground"></div>
</div>
</div>
</section>