Having started on the bench again, City striker Sergio Aguero appeared after just 14 minutes following an injury to Gabriel Jesus.
But it was Raheem Sterling who grabbed the opener from close range on the half-hour mark, having been denied by a brilliant Artur Boruc save two minutes before.
The hosts thought they had replied immediately, but Joshua King's strike was ruled out after he was adjudged to have pulled John Stones' shirt in the build-up.
Harry Arter's curling shot stretched City goalkeeper Willy Caballero into a fine save, before Tyrone Mings put City's second into his own net under pressure from Aguero.
Leroy Sane rattled the bar late on, as City extended their unbeaten run to five games in all competitions.
Pep Guardiola's side jumped three places in the table to emerge as Chelsea's closest challengers, eight points behind the leaders, who dropped points at Burnley on Sunday.
City face at Chelsea at Stamford Bridge on 5 April. They will take inspiration from their title-winning team of 2011-12 when they clawed back the same deficit on rivals Manchester United - on that occasion with just six games remaining.
This time they have 13 games in which to do it as former Barcelona and Bayern Munich boss Guardiola looks to win a top-flight domestic title for the seventh time in the past eight seasons.
The Spaniard's pacy wingers were the difference on this occasion, as Sane's fleet-footedness set up Sterling for his sixth league goal of the season, before the England forward showed superb trickery to beat a defender and force Mings into a costly mistake, after pressure from Aguero.
The Argentine, who failed to start for the third consecutive game, was sent on after Jesus turned his ankle in the opening minutes.