A spirited Saints side were 2-1 up by the break and Gareth Barry completed a nightmare afternoon for the defending champions when he put through his own net after the restart, failing miserably in trying to shepherd the ball back to goalkeeper Joe Hart after Rickie Lambert had tried to pick out Jason Puncheon in the box.
Puncheon had earlier been on target with the seventh-minute opener, sliding home a rebounded Jay Rodriguez shot, then a costly error from Hart saw Steven Davis add another from point-blank range after the keeper had fumbled Lambert's initial shot.
City hinted at a comeback just before half-time when Edin Dzeko bundled home off Pablo Zabaleta's break but they failed to see it through and now face the prospect of slipping 12 points behind Manchester United in the title race, with their neighbours set to host Everton on Sunday.
Southampton dominated the proceedings early on and were rewarded when they netted the seventh-minute opener. After Barry was dispossessed, Puncheon burst down the right flank and played through the unmarked Rodriguez. Hart managed to deny the winger but the ball fell kindly for Puncheon, who slotted home calmly in front of the Northam End.
City were struggling to deal with Southampton's attacking intent in an opening 15 minutes in which a tame Sergio Aguero effort was all they had to show for their efforts. They eventually began to settle but were soon rocked by a second Southampton goal in the 22nd minute.
Lambert collected the ball on the right and played a neat one-two with Puncheon, before cutting back and firing a shot that Hart let slip through from his midriff, allowing Davis to poke home.
Rodriguez saw a right-foot effort go just inches wide of Hart's far post as the home side pressed for a third, with Nathaniel Clyne seeing a strike deflect behind.
Pablo Zabaleta's floated ball to the back post just evaded Aguero as City looked for a goal, which came six minutes before half-time. The Bosnian striker got himself in the way of terrible Saints corner, before bursting up the field and tucking home a Zabaleta cross.
It was harsh on the hosts, who felt hard done by in stoppage-time when Rodriguez was brought to ground in the area by Yaya Toure, captaining the side on his return from the African Cup of Nations. Atkinson awarded a corner instead of a spot-kick much to the home fans' frustrations - but they were celebrating soon after the restart.
After Puncheon hammered over moments into the second half, the winger could then not quite latch onto a Lambert pullback, which Barry inexplicably passed into his own goal.
The visitors were having to defend with all they had and hope for a chance on the counter, with Artur Boruc reacting well to palm away an Aguero strike wide when they did voyage forward. James Milner, on moments earlier for Samir Nasri, shot wide from the resulting corner but City were soon back on the defence.
City found more momentum late on and it was a nervy final 10 minutes for Southampton but they managed to keep the defending champions at bay for an impressive win.