HistoryART, не могу согласиться. Без JS не обойтись, чтобы сделать нормально. Если только на CSS делать, то придётся упрощать все интеракции.
К примеру, то же закрытие или действия по клику вне родителя будет недоступно. Или же наоборот — когда заходим запретить закрытие при клике вне родителя — оно всё равно будет закрываться. Так же с :hover и :active не сделать механизм перетаскивания а-ля слайдер, если человек таки хочет всё же реализовать первоначальную идею. Ну и т. п.
catssss, следите за событием прокрутки, положением нужных элементов, считайте расстояние до них от верха. По-моему, сейчас есть метод определения нахождения элемента в зоне видимости, делайте троттлинг, чтобы не видеть на производительность. Ну и т. п.
Ну или же просто используйте ту кроссбраузерную библиотеку, которую разрабатывали не одну сотню часов.