A cagey first half saw the home side dominate the ball, but struggle to find a way through a resilient rearguard effort from Jose Mourinho's men.
But the match changed completely in the second-half, as Cristiano Ronaldo gave the visitors a shock lead in the 55th minute with a header from a corner.
Barca would hit back instantly through Pedro, before a Lionel Messi penalty and a beautifully worked goal from Xavi put the club in the driving seat.
However, a moment of madness from Victor Valdes gifted Angel Di Maria a goal with five minutes to go, leaving matters finely poised for the second leg in six days at Santiago Bernabeu.
Tito Vilanova dropped Christian Tello to the bench for Alexis Sanchez, despite the former’s impressive performance in the 5-1 win over Real Sociedad last weekend, but new signing Alex Song did not make the match day squad in time.
Mourinho, meanwhile, drafted in Raul Albiol in the center of defense for the injured Pepe, while Karim Benzema started as the lone striker ahead of Gonzalo Higuain.
Madrid started brightly, but was not able to sustain it for long as Barca began to assert its dominance in the middle of the park, with Andres Iniesta in particular looking lively.
Xabi Alonso picked up a yellow card 12 minutes in after a crunching tackle on Sergio Busquets, putting him on thin ice for what was shaping up to be a backs to the wall game for the visitors.
Messi should have found the target in the 19th minute after latching on to Dani Alves’ cutback just inside the box, but his effort flew the wrong side of the post.
The Argentine would miss an even better chance 10 minutes later, poking wide from a good position after dancing around two defenders in the area.
But despite being starved of the ball, Madrid proved a stubborn beast to overcome at the back, as every Barca attack was met by a throng of white shirts in defense.
The match seemed to be settling into a war of attrition, though Pedro almost livened things up on the half-hour mark with a swerving shot that forced Casillas to save at full stretch.
The home fans were up in arms in the 38th minute though, after a theatrical tumble from Sanchez from a challenge by Fabio Coentrao in the box went unacknowledged by the referee.
It was a hopeful shout at best, and the game began to get scrappy as the first half ended. First, Arbeloa was shown yellow for flattening Busquets, before Javier Mascherano joined him in the book after chopping down Coentrao.Follow GOAL.COM on Twitter
Busquets was not having an easy time in the middle of the park, and was felled again by Albiol shortly after the restart, for which the Madrid defender also saw yellow.
The Barcelona midfielder would then make a fatal error in the 55th minute, as he lost sight of Ronaldo defending a corner, allowing the Portuguese to not the visitors into a surprise lead.
Madrid’s joy lasted only seconds though, as straight from kickoff, Barca drew level.
Mascherano’s searching ball from his own half picked out Pedro on the left, who accelerated away from Coentrao to slot the hosts back on terms, despite calls from the visitors for offside.
The shackles were finally off, as Barca looked to press ahead. Alves was picked out by Messi on the overlap, only for Casillas to tip his low shot around the post.
Then, with 68 minutes gone, a clumsy tackle by Sergio Ramos brought down Iniesta in the area, giving referee Carlos Gomez no choice but to point to the spot. Messi stepped up to send Casillas the wrong way and put Barcelona back in front.
Xavi appeared to put matters beyond any doubt 10 minutes later after slotting home from a superb setup from Iniesta, who ghosted pass multiple challenges before putting the chance on a plate for his midfield colleague.
However, in the 85th minute, a howler from Valdes dragged Madrid back into the game and the tie.
The Barcelona keeper appeared to be under little pressure when collecting a backpass, but saw the ball stick under his feet, allowing Di Maria enough time to steal in and poke into the back of the net, giving the visitors a lifeline for the second-leg.
- Lionel Messi
- Cristiano Ronaldo