Barcelona striker Henrik Larsson returned to Celtic Park to help destroy his old club's unbeaten home record in the Champions League.
Deco shot the impressive visitors ahead after 20 minutes and David Marshall, who made a number of fine saves, stopped a Ronaldinho penalty kick.
Chris Sutton slid in an equaliser on the hour but Ludovic Giuly's deflected shot put Barca back in front.
Larsson then showed neat control and a calm head to slot home a late third.
There was an early scare for Celtic when Jackie McNamara allowed a long ball to run by him and Marshall had to race of his line to kick the ball away from Juliano Belletti.
Ronaldinho then sent a fierce shot flashing wide when he found space on the edge of the penalty area.
A neat interchange involving Samuel Eto'o and Giovanni van Bronckhorst saw the former Rangers and Arsenal player's low shot saved by the feet of Marshall.
But Marshall was beaten when a loose pass from Didier Agathe prompted a swift counter-attack and Ronaldinho fed Deco, who sent an angled strike into the corner of the net.
Soon after, Belletti's great run and cut-back set-up Ronaldinho for a shot that Marshall pushed away smartly and the move ended with Xavi smashing the ball into the side-netting.
Celtic were struggling for scraps of possession and rarely troubled the visiting defence.
And when Alan Thompson found Stanislav Varga with a free-kick, the defender could only head the ball over the crossbar.
Marshall made another fine save at his near post when Giuly found room behind the Celtic defence.
Giuly was then released by a Xavi pass and the Frenchman rounded Marshall, only to be denied by a fantastic sliding challenge from Bobo Balde.
Thompson had a sight of goal right on half-time but his raking shot from 20 yards was comfortably held by Victor Valdes.
With Sutton replacing Juninho, Celtic started the second half brightly but conceded a penalty after 53 minutes when McNamara bundled into Giuly.
However, Marshall produced a wonderful save to claw away Ronaldinho's spot-kick.
Marshall then had to react quickly to keep out Rafael Marquez's header and Xavi shot narrowly wide.
But Celtic were level on 59 minutes when Henri Camara burst down the right flank and his flashing cross was met by the outstretched leg of Sutton six yards out and the ball flew high into the net.
Barcelona reacted by sending on former Celtic favourite Larsson in place of Ronaldinho.
Stilian Petrov conjured up some great skill to flick the ball over an opponent with his right foot and fire in a dipping left foot strike that Valdes tipped over.
Barca had lost their earlier composure and Belletti was inches away from an own goal when he prodded the ball away from Thompson.
But, just when Celtic looked the more menacing side, Giuly's shot from 18 yards took a slight deflection off McNamara and evaded the grasp of Marshall.
With eight minutes remaining Larsson latched on to a poor back-header from Thompson and took the ball beyond Marshall with his chest before guiding the ball into an empty net.
Petrov almost got one back but his smashed free-kick was blocked by the flying Valdes and Sutton sent a header just over the bar.
Celtic: Marshall, Agathe, Balde, Varga, McNamara (Sylla 80),
Petrov, Lennon, Thompson, Juninho Paulista (Sutton 45),
Hartson (Valgaeren 63), Camara.
Subs Not Used: Douglas, Pearson, Lambert, McGeady.
Booked: Hartson, Juninho Paulista, McNamara.
Goals: Sutton 59.
Barcelona: Valdes, Belletti, Puyol, Marquez (Oleguer 62),
Van Bronckhorst, Deco, Gerard, Xavi, Giuly, Eto'o (Iniesta 74),
Ronaldinho (Larsson 62).
Subs Not Used: Ruben Martinez, Sylvinho, Gabri, Fernando.
Goals: Deco 20, Giuly 78, Larsson 82.
Ref: Markus Merk (Germany).