Si potrebbe fare anche con HTML e CSS3 ma per ottenere massima compatibilità è meglio utilizzare JavaScript.