The result left France second in the group on 10 points from four games, behind Portugal on goal difference after the European champions brushed aside Sweden 3-0. Croatia have three points and the Swedes none.
France beat Croatia 4-2 in the 2018 World Cup final before defeating them by the same score in last month's reverse Nations League fixture.
"We knew we'd be in a real battle," France coach Didier Deschamps told French TF1 television.
"We started very well and it's a pity we didn't go two goals clear as Kylian had a big chance. We did what we needed to do in the second half.
"It's not because we won a trophy in 2018 that you win by clicking your fingers. You have to look at the way the opponents play too."
Antoine Griezmann fired France into an eighth-minute lead when he drilled the ball home off the underside of the bar from 12 metres after Domagoj Vida failed to clear a Ferland Mendy cross from the right.
Mbappe missed a gilt-edged opportunity to make it 2-0 as he shot wide from close range with the goal at his mercy, while visiting keeper Hugo Lloris kept out Mario Pasalic's shot from three metres with a reflex save.
Substitute Paul Pogba missed a sitter for France before the visitors secured victory 11 minutes from time.
It was a crafty three-touch move as Pogba found Lucas Digne with a long pass from inside his own half and the left back volleyed a cross into the penalty area for Mbappe to slide in and steer the ball past keeper Dominik Livakovic.
Croatia defender Dejan Lovren rued his team's concentration lapses.
"France are ruthlessly efficient and they will punish you every time you switch off, even for a split second," he told reporters.
"Playing against them is very frustrating because you can be as entertaining as you like but to no avail. The three points is all that matters."