Senza toccare tanti margin etc.. non ti bastava aggiungere "clear:both;" all'Id del footer?