кажется всю эту функцию можно описать в CSS