It started very well for the French, who went 5-1 up on 10 minutes, Nikola Karabatic scoring twice and adding an assist.
Croatia started to close the scores, with Zlatko Horvat particularly clinical as he scored his fifth goal on 25 minutes to bring the scores to 10-9 to France.
France edged the closing stages of the half and the teams went in closely matched at 12-10.
The French looked to be pulling away early in the second half and they were 18-13 up after 13 minutes. However, Croatia refused to lie down and they were within three points of the French after 54 minutes, Ivano Balic firing in at 21-18.
France, however, were always able to retain a cushion and they pulled five ahead on 59 minutes, Samuel Honrubia scoring his fourth to make it 25-20.
Croatia got another couple in the last minute, but France were deserving winners taking the game 25-22 to face Sweden in Sunday's final.