I believe that setting a transition on an element should mean that when its style changes (in this case from opacity: 0 to opacity: 1 that the specified transition should run. However, I'm finding in my case it does not it simply "appears".
https://codepen.io/asos-francesca/pen/xxOroON
I am adjusting the opacity of the element by way of its parent receiving a hover, could this be the reason why it doesn't work?
.submenu {
display: none;
opacity: 0;
transition: opacity 0.5s ease-in-out;
transition-delay: 0.2s;
}
.hoverable:hover .submenu {
display: block;
opacity: 1;
}