Вопрос достаточно абстрактный, но в большинстве случаев правильным ответом будет ""js - эффективнее.
Что же такое эффективность:
- дальнейшая поддержка
- расширяемость
- заменяемость
Как можно заметить тут ничего нет про скорость, поскольку она не будет сильно отличаться от решения к решению.
Дальнейшая поддержка - структурировать js код проще чем каскадные таблицы. Здесь вам и ООП с состояния и многое другое.
Расширяемость - у решения на CSS будут ограничения по вложенности, по работе на тач устройствах, по доступности (a11y).
Заменяемость - вообще вам не стоит делать меню с нуля, а стоит выбрать одну из популярных библиотек компонентов. Все что вас в ней не устроит - доделать стилями. Как было написано в предыдущих пунктах у меню, как и у любых UI элементов, много скрытых требований, которые уже учтены в популярных библиотеках. И не стоит придумывать их заново.
Для начала рассмотрите MaterialUI. Потом познакомьтесь с альтернативами. И если уж ничего не подойдет - пишите собственное меню на js.