Ludovic Giuly's fine second-half strike gave Barcelona a crucial advantage after the first leg of their Champions League semi-final with AC Milan.
Ludovic Giuly holds off Kakha Kaladze to score for Barcelona
Giuly raced on to a perfect Ronaldinho pass and fired past Dida to earn the visitors a win their display deserved.
They could have scored more, with Giuly forcing Dida to save and Ronaldinho hitting the inside of a post too.
Milan's best chances fell to Alberto Gilardino, but he hit an upright with one and and poked another effort wide.
Having started brightly Milan ended the contest in forlorn fashion, and will perhaps even be pleased the margin of defeat was not greater.
Yet it began as a classic cat-and-mouse game of intense, high-pressure European football.
After the initial probing, Milan twice exposed alarming frailities in the visitors defence and twice should have gone ahead.
First Gilardino controlled a long throw into the box and shot against the post from four yards, before an Andriy Shevchenko header forced a low save from Victor Valdes after a fine Clarence Seedorf cross.
Samuel Eto'o was being starved of possession at the top of Barcelona's attacking triangle, though the Cameroonian did fire at Dida from 20 yards having brilliantly created himself some space.
As the game developed, Barca improved. Giuly was teed up by some combined Ronaldinho and Eto'o trickery, but shot low into Dida's arms.
Eto'o's movement was causing a problem, but twice he showed a bizarre lack of composure to blaze woefully off target when team-mates were well-placed in the box.
Milan nearly made him pay too, when Shevchenko clipped in Kaka and the Brazilian centred for Gilardino, who could only prod inches wide of Valdes' right-hand post.
Just before the hour mark, Ronaldinho finally stamped his class all over the contest.
He picked the ball up 40 yards out, skipped past Jaap Stam and whipped an inch-perfect ball in to Giuly, who did not need to break his stride before lashing left-footed past a stranded Dida.
Milan upped the tempo, but they only became more susceptible to a lightening break from their younger, less leg-weary opponents.
Ronaldinho supported Giuly on one attack and when he was fed in, the Fifa World Player of the Year saw his shot cannon back off the post and roll agonisingly across the goalline.
Milan did create one more chance to level, Kaka playing in Massimo Ambrosini, but the substitute lost his composure and dragged dreadfully wide.
AC Milan manager Carlo Ancelotti:
"It was a very balanced match. Milan played well and produced some good scoring chances that unfortunately we did not turn into goals.
"The result still let's us hope to reverse the situation in the second leg. They won at San Siro, we can win at Barcelona."
Barcelona goalscorer Ludovic Giuly:
"Ronaldinho passed me the perfect ball. I attempted a shot from the left and the ball went in.
"Now we've got one foot in the final, but we have to remain cool and work hard to try and go all the way."
AC Milan: Dida, Stam (Cafu 77), Kaladze, Nesta, Serginho, Gattuso (Ambrosini 73), Pirlo (Maldini 67), Seedorf, Kaka, Shevchenko, Gilardino.
Subs Not Used: Kalac, Rui Costa, Vogel, Amoroso.
Barcelona: Valdes, Oleguer (Motta 75), Puyol, Marquez, Van Bronckhorst, Edmilson, Van Bommel, Iniesta, Giuly (Belletti 70), Ronaldinho (Maxi Lopez 89), Eto'o.
Subs Not Used: Jorquera, Ezquerro, Sylvinho, Gabri.
Booked: Puyol, Valdes.
Goals: Giuly 57.
Ref: Alain Sars (France).