It was the second defeat in four days for Barca -- who progress to the last 16 as runners-up to Juve -- following Saturday's surprise defeat at Cadiz in La Liga.
Ronaldo opened the scoring with his first of two penalties, converting from the spot after being fouled by Ronald Araujo. United States international Weston McKennie then made it two in the 20th minute with an acrobatic effort from close range.
Barca's misery was complete in the 52nd minute when Ronaldo scored from the spot for the second time after Clement Lenglet handled the ball inside the area.
Araujo and Samuel Umtiti both made their long-awaited returns to the first team to ease Barca's shortage in defence. Whether they are good enough to help Ronald Koeman's team turn things around is another matter.
Barca had already qualified for the last 16 but handing the top spot to Juve means they are likely to draw one of the favourites in the next round.
That's the least of their worries at the moment, though. Koeman's side have now been beaten five times in all competitions this season and don't look like they're improving.
They're making mistake after mistake in defence -- they're really missing Gerard Pique -- and are being overrun in midfield. Further forward, the tactic still seems to be give the ball to Lionel Messi and hope for the best. They had seven shots on target against Juve, all of them by Messi. In short, they have weaknesses in every area of the pitch.
Their form at Camp Nou used to at least be a plus. That now seems to have disappeared, too, although the disappearance of fans could also be a factor in that. This was a first defeat at home in Europe since 2013, when they lost to Bayern Munich. In that time frame, they had won 34 and drawn four of their home games in the Champions League.
Manager rating out of 10
5 -- Koeman deserves a certain amount of credit due to the state of the club when he took over. But he's using it up quickly. His insistence on playing 4-2-3-1 sees Barcelona repeatedly battered in midfield and it was easy for Juve here in the first 20 minutes.
Player ratings (1-10; 10 = best. Players introduced after 70 minutes get no rating)
GK Marc-Andre ter Stegen, 6 -- Conceded two penalties and a stunning effort from McKennie, so couldn't be blamed for the goals.
DF Sergino Dest, 6 -- Giving his all in attack and defence but has been thrown into a team in disarray since arriving from Ajax.
DF Ronald Araujo, 5 -- The Uruguayan returned to the starting lineup for the first time since October, but it would be unfair to expect the inexperienced 21-year-old to cure all of Barca's problems.
DF Clement Lenglet, 4 -- Another game another mistake, giving the second penalty away with an unnecessary handball.
DF Jordi Alba, 5 -- Still capable of increasing in attack but lapses in concentration have crept into his game. Taken off early in the second half on a booking.
MF Miralem Pjanic, 6 -- Will have been embarrassed by his team's performance against his former side. Is deserving of a longer run in the side to stake his claim for a regular spot in the XI.
MF Frenkie de Jong, 6 -- All-action once again but still missing that spark he had in his final season at Ajax.
FW Francisco Trincao, 4 -- Taken off after a poor first half on the right-wing. Questions are starting to be asked about the €30 million Barca shelled out for him last January.
FW Lionel Messi, 7 -- Will be criticised again after losing the personal duel with Ronaldo but was Barca's liveliest player by a distance, creating or having all his side's best chances.
FW Pedri, 6 -- Good pressing but not so good with the ball. Another night of learning for the 18-year-old.
FW Antoine Griezmann, 5 -- Worked hard but nothing came off. Came close to scoring with a flicked header from a Messi free kick that hit the bar and missed an even better chance 10 minutes later.
FW Martin Braithwaite, 6 -- Came on to offer a presence in attack but this game was always out of Barca's reach.
DF Samuel Umtiti, 5 -- Will have been happy to make his first appearance since June after recovering from a knee injury.
DF Junior Firpo, 5 -- Replaced Alba, who had been booked, but didn't do much.
MF Riqui Puig, 6 -- Was bright when he came on, getting on the ball and offering a dynamic that had been missing in midfield.
DF Oscar Mingueza, N/R -- Came on for the final few minutes.