Madrid began at a fierce pace and won an early corner from which they felt Toni Kroos had been fouled, only for the referee -- after giving himself some thinking time -- to wave away the appeals.
Before five minutes had passed Madrid had created more danger, with Cristiano Ronaldo fizzing an effort across goal.
PSG were struggling for a foothold at a raucous Bernabeu and were under pressure again when keeper Alphonse Areola saved from Kroos with seven minutes gone.
Five minutes later, Areola clutched a Marcelo cross after more purposeful Madrid build-up -- but within seconds, PSG could have been in front.
The chance arrived when Marco Verratti fed Neymar, whose cross was cleared by Raphael Varane with Edinson Cavani waiting to pounce.
With a quarter of an hour gone, Neymar went into the book after a foul on Nacho and, as the game began to settle, the Brazilian saw another dangerous cross cut out.
At the other end, Marquinhos headed clear as Ronaldo lurked, but with 25 minutes played the home side had another chance to test Areola but Ronaldo blasted his free kick over from just outside the box.
Neymar tried to set up Kylian Mbappe, only for the striker to fail to control, before Marcelo put Ronaldo through with a superb pass on the half-hour but, one-on-one with Areola, the Portugal captain blasted straight at him.
He was made to regret it after 33 minutes when PSG grabbed an away goal, Adrien Rabiot finishing stylishly when the ball was flicked to him by Neymar after a counter down the right.
Ronaldo curled another effort over, but suddenly the tide had turned and Cavani was close to adding a second when his effort was blocked.
But with half-time looming and Areola having denied Karim Benzema with a superb save, Madrid were awarded a penalty when Lo Celso --already booked for an earlier foul -- shoved Kroos and Ronaldo made it 1-1.
The second half started with PSG on the front foot, Keylor Navas called into action when Kylian Mbappe fired a low shot after Neymar's pass.
Ten minutes in, the visitors wanted a penalty as Rabiot's attempt hit Sergio Ramos on the arm, but the referee remained unmoved.
Neymar, already booked, then appeared to dive but escaped a second yellow card and, shortly after the hour, Madrid won a soft free kick when Luka Modric went to ground but Ronaldo hit the wall.
After 66 minutes, PSG coach Unai Emery brought on defender Thomas Meunier for striker Cavani, with Madrid introducing Gareth Bale for Benzema as the first leg entered its last 20 minutes.
As the final quarter of an hour approached, a good block from Ramos denied Neymar and the tension among home fans was increasing as Yuri Berchiche's cross only just eluded Dani Alves.
Nacho was booked for a foul on Neymar before Madrid boss Zinedine Zidane made a double change, bringing on Lucas Vazquez and Marco Asensio for Isco and Casemiro.
With seven minutes to go Zidane and the Madrid fans were celebrating as Ronaldo touched home from close range after Asensio's cross had been parried to get his second of the game.
And three minutes later Marcelo took possession inside the area and, with the help of a slight deflection, fired the late third goal that completed a first-leg comeback and put Madrid firmly in charge of the tie.