Croatia then went ahead with a soft header in the eleventh minute of extra time but Brazilian-born Fernandes headed the hosts level with five minutes of play remaining to send the game to penalties.
Russia had already surpassed expectations by reaching the last eight, ousting Spain on the way.
After a lively opening, the game dropped off, with sessions of head tennis in midfield, but it was Russia’s more rustic approach which paid off first as they went ahead out of the blue.
Cheryshev collected the ball near the halfway line, exchanged passes with Artem Dzyuba and curled a 25-meter shot past Subasic.
But slack defending allowed Croatia to level eight minutes later. Mario Mandzukic ran unchallenged into the penalty area and chipped a low ball back into the center where unmarked Kramaric scored with a glancing header.
Croatia was agonizingly close to scoring on the hour when Russia’s defense failed to clear the ball and Ivan Perisic’s shot hit the inside of the post but rebounded harmlessly across the face of the goal.
Croatia appeared to have the tie in the bag after Vida’s extra-time goal until Fernandes rose to head in a free kick and send both teams to their second penalty shootout of the tournament.