Second-half goals from Luis Suarez, Lionel Messi and Aleix Vidal gave the Catalans a club-record third win in a row in a league match at the home of their fierce rivals and saw them move nine points clear of Atletico Madrid at the top of the table.
Zinedine Zidane's reigning champions, who had Dani Carvajal sent off for a deliberate handball just before Messi's strike from the penalty spot, are now 14 points adrift of the leaders and, despite having played a game less, their title hopes appear to have been dealt a crushing blow.
Madrid trounced Barca in the Supercopa de Espana in August but the latter have gone unbeaten since that two-legged tie in all competitions, and they seemed happy to frustrate the home side in the first half in the knowledge that the onus was on Madrid to chase the win.
The hosts, who surprisingly matched Barca's four-man midfield by starting Mateo Kovacic, saw Cristiano Ronaldo – passed fit after an injury scare this week – and Karim Benzema come closest to breaking the deadlock before Suarez struck nine minutes after half-time at the end of a slick move.
Zidane prepared to bring on attacking reinforcements but the game was taken out of his hands when Carvajal was sent off and Messi swept home from the spot for his 17th LaLiga goal against Madrid, more than any other player in history has managed.
Substitute Gareth Bale nearly halved the deficit but Vidal squeezed in a third in injury time, leaving Madrid – along with Atletico, losers to Espanyol on Friday – staring at what looks to be an insurmountable task of hauling in the leaders in 2018.
The Santiago Bernabeu roared its approval as the home side started strongly, and Ronaldo headed the ball into the net inside two minutes only for a correctly raised offside flag to cut short the celebrations.
Barca appeared content to allow Madrid a greater share of possession as they maintained a more rigid shape and it kept both the home players and crowd frustrated, as the game entered something of a walking pace.
There was a sudden explosion into life half an hour in, though, as Keylor Navas made a brilliant save to tip over Paulinho's shot following Messi's sublime pass, before Ronaldo drove down the other end and forced Marc-Andre ter Stegen to save well at the near post.
With the game at last coming to life, Paulinho was again denied when Navas kept out his header, while Benzema glanced Marcelo's cross off the base of the right-hand post, with Ter Stegen beaten.
6 - Karim Benzema has hit the woodwork more than times (6) than he has scored (5) in all competitions this season. Unlucky. pic.twitter.com/8mvmkcKhSD— OptaJose (@OptaJose) December 23, 2017
If Madrid began the first half better, it was Barca who came out flying for the second period – and, unlike the home side, they made their dominant spell count.
Ivan Rakitic was allowed to burst right through the heart of the Madrid midfield and play the ball out wide to Sergi Roberto, whose first-time cross was finished with aplomb by Suarez as he arrived unmarked from the left.
Frustrations were growing rapidly for the home side and particularly with Suarez, who was booed resoundingly for his reaction to a Casemiro challenge before he was caught round the face by a stray arm from Sergio Ramos, which earned the Madrid captain a booking.
Zidane was preparing to make some changes but, in the 63rd minute, the match was put beyond the champions. Suarez missed two golden opportunities to score, denied first by Navas and then the post, and as Paulinho tried to prod home the rebound, Carvajal blocked his attempt with a clear raised arm.
The ball was eventually put into the net but, rather than allow the goal to stand, referee Jose Maria Sanchez Martinez brought it back for a penalty and sent off Carvajal, before Messi swept the spot-kick high past Navas.
Marco Asensio and Bale were at last introduced and nearly combined to give Madrid a lifeline, with the Welshman just denied by Ter Stegen after Asensio had found space. Ramos then had a shot blocked and just failed to turn a Ronaldo cross home.
But Ernesto Valverde's side made absolutely sure of what could prove to be a pivotal win in injury time, as Messi teed up Vidal on the edge of the area and his low shot squirmed through Navas' grasp and into the net.
Key Opta Facts:
- Zinedine Zidane is the first Real Madrid manager to lose consecutive home games against Barcelona in LaLiga history.
- Barcelona haven't lost any of their 16 La Liga games with Thomas Vermaelen (W13 D3).
- Barcelona have scored in their last 20 Clasicos LaLiga, their best streak in the competition.
- The last six Clasico red cards have been received by Real Madrid players (Ramos 3, Isco, Cristiano Ronaldo and Carvajal).