У вас может быть второй прозрачный элемент, который появляется над тем, который вы нажали.Таким образом, когда пользователь снова нажмет, он выберет другой элемент, и первый из них потеряет свое состояние при наведении:
<div class="blocker" onclick="void()"></div>
<div class="menuItem" onclick="void()"></div>
<style>
.blocker, .menuItem {
/* use the same position, width, height, etc */
}
.menuItem {
/* make it look pretty */
z-index: 100;
}
.blocker {
z-index: 99;
}
.menuItem:hover {
z-index: 98;
}
</style>
Конечно, это отрицательно скажется на рабочем столе, поэтому вы будетехотите сделать что-то вроде:
<style>
.blocker { display: none; }
.touchevents .blocker { display: block; }
</style>
<script>
if('ontouchstart' in document)
document.body.className += ' touchevents';
</script>
ОБНОВЛЕНИЕ Добавлены события onclick, чтобы сделать их кликабельными.
Вы можете увидеть рабочую демонстрацию здесь: http://fiddle.jshell.net/vfkqS/6/
К сожалению, я не смог найти решение, которое не требовало бы изменений HTML или JavaScript, но я смог свести их к минимуму.
Вам нужно всего сделать два изменения не-CSS:
- Добавить механизм JavaScript для определения, поддерживаются ли сенсорные события.См. Пример с двумя строками выше.
- Добавьте один div в меню, которое можно активировать (
onclick="void()"
) и которое имеет уникальный идентификатор, который может связать его с меню.
You может быть в состоянии сделать эти две вещи с помощью CSS, но я не уверен.Обнаружение планшета было бы немного схематичным в CSS, и я не думаю, что вы можете сделать что-то более сложное с псевдоселектором: before или: after.