The quartet all booked their places in the round of 16 thanks to victories on Matchday 5.
Article top media content
Atlético de Madrid, Barcelona, Borussia Dortmund and Lazio took the number of teams confirmed in the round of 16 to ten courtesy of victories on Tuesday.
UEFA.com rounds up all the action.
Ciro Immobile came off the bench to make the difference in Rome. Felipe Anderson in the first half and Gustav Isaksen in the second had gone closest prior to the striker's introduction but Celtic, who had to win to remain in contention to qualify, had appeared comfortable until Immobile's interventions in the final eight minutes.
Player of the Match: Ciro Immobile (Lazio)
Atlético de Madrid booked their last-16 spot while Feyenoord, who shipped two own goals, were eliminated from the Champions League. The visitors took a 14th-minute lead when Lutsharel Geertruida deflected Marcos Llorente's cross into his own net, before Mario Hermoso's looping volley doubled the advantage just before the hour.
Mats Wieffer's header gave Feyenoord hope but Atlético sealed victory nine minutes from time when Santiago Giménez nodded past his own goalkeeper.
Player of the Match: Rodrigo Riquelme (Atlético de Madrid)
Kylian Mbappé's last-gasp penalty rescued a point for Paris to prevent Newcastle leapfrogging them in Group F. The home captain kept his cool to side-foot home confidently from the spot, following Tino Livramento's handball.
Newcastle looked to be heading for a famous win courtesy of Alexander Isak's close-range strike midway through the first half, with the Swede scooping in after Gianluigi Donnarumma had been unable to hold Miguel Almirón's low effort. The Magpies were indebted to goalkeeper Nick Pope, who made a string of saves as Paris cranked up the pressure after the break, but they could not hold on.
Player of the Match: Kieran Trippier (Newcastle)
Dortmund got the win they required to qualify with a game to spare – having failed to score in their first two matches – as they defeated Milan. After Olivier Giroud missed an early penalty, Marco Reus converted his; however, Samuel Chukwueze's first goal for the Italian side meant it was level at half-time.
Jamie Bynoe-Gittens and Karim Adeyemi struck after the interval though to swing the contest Dortmund's way. Milan can still qualify but must beat Newcastle and hope Paris lose in Germany.
Player of the Match: Mats Hummels (Dortmund)
Key stat: Dortmund have lost just one of their last nine Champions League group stage matches (W4 D4) after inflicting Milan's second loss in their last 16 meetings with German teams.
13/12: Dortmund vs Paris, Newcastle vs Milan
Three second-half goals helped City come from 2-0 down to secure top spot in Group G. Loïs Openda twice broke clear to give the visitors a stunning 2-0 cushion inside 33 minutes, yet the hosts rallied.
Pep Guardiola rang the changes after half-time and Phil Foden threaded Erling Haaland through to halve the deficit with his 40th Champions League goal in only his 35th game – ten fewer than the previous fastest to 40, Ruud van Nistelrooy. Foden then stroked in the equaliser 20 minutes from time before teeing up Julian Álvarez to win it late on.
Player of the Match: Phil Foden (Man City)
Key stat: City top their group for the seventh straight season but go to Crvena zvezda on Matchday 6 seeking to win all six group fixtures for the first time.
13/12: Crvena zvezda vs Man City, Leipzig vs Young Boys
Young Boys scored twice in the first half to earn the win that guarantees them third place in Group G. The hosts went ahead when 17-year-old defender Kosta Nedeljković turned Loris Benito's cross into his own net.
Crvena zvezda striker Osman Bukari's touch let him down when he sprung the offside trap and soon after Lewin Blum curled in Young Boys' second. The visitors continued to press in the second half and Inbeom Hwang hit the inside of the post before Jovan Mijatović spurned two good opportunities.
Player of the Match: Lewin Blum (Young Boys)
Mykola Matviyenko's stooping early header was enough to earn the Ukrainian side maximum points in Hamburg. Fresh off the back of their victory over Barcelona, Shakhtar consigned Antwerp to a fifth Group H loss with a mature display. Matviyenko nodded in Oleksandr Zubkov's fine free-kick and the home team controlled the game from then on. It might have been more comfortable, but Jean Butez tipped wonderful efforts from Irakli Azarov and Taras Stepanenko on to the bar.
Player of the Match: Oleksandr Zubkov (Shakhtar Donetsk)
A João Cancelo masterclass helped Barcelona progress to the last 16 of the Champions League for the first time in three seasons.
Pepê pounced on a rebound to put the visitors in front on 30 minutes, but Porto's lead lasted only two minutes before João Cancelo rounded João Mário and curved past Diogo Costa to draw his side level. João Félix twice went close to giving the hosts an early second-half lead before linking up with Cancelo to score the deciding goal.
Player of the Match: João Cancelo (Barcelona)