In a frantic game, Willy Caballero’s howler gifted the opening goal to Ante Rebic, who volleyed home, before Luka Modric beat the goalkeeper from 25 yards to seal the three points. Ivan Rakitic added a third in injury time.
The South Americans missed a number of chances in the first half, the best of which fell to Enzo Perez who missed an open goal after the ball fell to him following a mix-up in the Croatian defence.
Maximiliano Meza earlier had a goal-bound shot blocked and Marcus Acuna hit the crossbar. Croatia also missed a sitter when Mario Mandzukic headed wide when in acres of space inside the penalty area.
Argentina needed a win after a surprise 1-1 draw against Iceland in their opening game, while Croatia knew a win would see them reach the last-16 stage after beating Nigeria 2-0 last week.
Messi and Sergio Aguero were kept quiet in the second half – the latter not touching the ball for the final 20 minutes of the first half – and frustrations were growing as decisions went against them.
Their night got worse soon after the restart as Caballero inexplicably attempted to lift the ball over Rebic only for his attempt to lack power and the midfielder simply volleyed a return into the back of the net.
It was a horrific mistake, which head coach Jorge Sampaoli reacted to by taking off Aguero and throwing on Gonzalo Higuain.
Argentina were getting desperate but pushed Croatia further and further back in the final 15 minutes until Modric’s sucker punch on the counter.
Substitute Andrej Kramaric held the ball up on the left before finding Modric centrally. A little shimmy to the right and Modric fired home from distance.
Rakitic put the icing on the result by tapping home into an empty net in injury time.