Хочу добавить, что, помимо прочего, важна масштабируемость. Например, в будущем, вы захотите сделать блоки с табами анимированными. Если они у вас сделаны на CSS, то это будет гораздо сложнее, нежели если бы они были сделаны на JS. Во втором случае вам придётся добавить 1-2 строки кода, в первом — переписывать классы, либо также добавлять к ним скриптовый функционал.
Так что, моё мнение: если CSS-реализация подчиняется закону Парето, либо мешает масштабируемости, либо настолько сложна, что для другого разработчика она будет неочевидна с первого взгляда, то делаем на JS.
Как пример, что можно сделать на CSS, но, тем не менее, я всегда делаю на JS: табы, аккордеон, слайдеры, выпадающие меню (P.S. в большинстве случаев, код для этих элементов заключается лишь в паре строк манипулирования классами).