The Bilbao 'keeper used his feet to save a penalty by Lovro Majer when the shootout was level at 3-3 and then dived full-length to tip Bruno Petkovic's spot kick around the post.
Dani Carvajal converted his penalty to seal the victory in Rotterdam.
Spain's last tournament win came at the 2012 European Championship.
La Roja did not manage a shot on target until the 84th minute of the tense match and when substitute Ansu Fati finally looked like breaking the stalemate, Ivan Perisic was on the goal line to block his effort. It was Spain's only goal-bound attempt, compared to Croatia's five.
In the first period of extra time, Majer broke through and fell in the penalty area under a challenge by Nacho, but German referee Felix Zwayer ruled that the Spain defender had played the ball and waved off Croatia's appeals for a penalty.
Croatia's fans – many wearing shirts with talismanic captain Luka Modric's name and No.10 on the back - far outnumbered their Spanish counterparts at Feyenoord's De Kuip Stadium.
But they were forced to leave disappointed as their nation and the 37-year-old Modric continued their wait for a first international title.
Earlier in Enschede, Italy claimed the consolation bronze medals, and added to a disappointing week for their Dutch hosts, as they edged their hosts 3-2 in the third place play-off.
Federico Dimarco thrashed the ball home at the far post in the sixth minute and Davide Frattesi doubled the score in the 20th minute to give Italy a comfortable halftime lead.
But the Netherlands launched a concerted second-half comeback, making three attacking changes at the break and laying siege to Italy's goal before Steven Bergwijn pulled a goal back in the 68th minute.
Federico Chiesa restored the two-goal advantage at the end of a 73rd minute counter-attack but there was an exciting conclusion as Georginio Wijnaldum got a second for the Dutch in the 89th.
But even though nine minutes of stoppage time was added on, Italy held out under home pressure for victory.
Wijnaldum's late goal had renewed hopes of a comeback but it was not to be for the Dutch, who had high hopes of home success in the tournament but were beaten 4-2 in extra time by Croatia in Wednesday's first semi-final.
Italy lost to a last-minute goal in their semi against Spain on Thursday.
With AP.