По моему опыту, в зависимости от css статуса недостаточно, чтобы делать то, что вы ищете здесь. Он будет работать только на настольных компьютерах или только на мобильных устройствах. Вместо этого я бы использовал для этого javascript событие ontouchstart (https://developer.mozilla.org/en-US/docs/Web/API/Touch_events).
Предполагая, что ваш css выглядит примерно так:
.your-hoverable-class:hover .submenu{
display: block;
}
Вы можно переместить это: состояние наведения на собственный класс (.is-hovered), например:
.your-hoverable-class.is-hovered .submenu{
display: block;
}
Затем вы можете выполнить переключение состояния следующим образом: Javascript (ES6)
const hoverableElem = document.querySelector('.your-hoverable-class');
hoverableElem.addEventListener('touchstart',(event)=>{
event.target.classList.toggle('is-hovered')
});
Теперь пользователь может «нажать» на этот элемент, если он использует мобильное устройство. : hover css работает достаточно хорошо с мышью, поэтому вы можете оставить: hover включенным, как и он. В противном случае вы можете просто использовать события onmouseover и onmouseout, как указано выше, если вы хотите придерживаться чистого javascript решения.