Late goals from Yaya Toure and fit-again Sergio Aguero ensured another victory for the Barclays Premier League title favourites.
Edin Dzeko had brought up their century in the first half but Cardiff gave them a battle and equalised through Craig Noone before Jesus Navas grabbed City's second. Fraizer Campbell claimed a Cardiff consolation in injury-time.
City were in control for most of the game but it was not until Toure's 76th-minute strike that the result was certain.
Cardiff had been threatening an equaliser in the early part of the second half and that fighting quality will at least have pleased manager Ole Gunnar Solskjaer as his side slipped to the bottom.
What Cardiff could have done without was the disturbance among the visiting fans during the first half, which stewards were required to quell. The situation did appear to become problematic at one point but it eventually settled down.
The hosts made a bright start and Dzeko wanted a penalty in the second minute as he went down under a challenge from Kevin McNaughton, but referee Neil Swarbrick gave nothing and Navas shot wide.
Dzeko went close again as he turned to shoot from a David Silva pass but David Marshall produced a fine save.
Marshall was called into action again soon after, but to deny his own team-mate Ben Turner after the defender diverted a dangerous Navas cross towards the Cardiff goal.
It was no surprise that City's 100th goal of the campaign was not much longer in coming, although Dzeko had technology to thank for it being awarded. Swarbrick signalled goal after Dzeko's scuffed shot from Silva's pull-back crossed the line before McNaughton could clear.
Cardiff players surrounded Swarbrick to complain. They could have had little argument over whether the ball had gone in but they may have been complaining about a possible handball by Silva in the build-up.
There may also have been debate over whether City should have had a throw-in prior to Silva receiving the ball, but it all fell on deaf ears.
Alvaro Negredo was booked for a heavy tackle on Aron Gunnarsson and moments later might have doubled City's lead when he raced onto a Pablo Zabaleta ball but sliced wide.
Cardiff did not have a shot until just before the half-hour when Jordon Mutch aimed weakly at Joe Hart.
But it should have served as a warning for City as a minute later Gunnarsson fed Noone down the right and the winger cut inside, wrong-footed Vincent Kompany in the box and lashed in a fine equaliser.
This time City did respond as Toure shrugged off the attention of Gunnarsson in his own half and powered forward to find Dzeko.
The hard-working forward was robbed of the ball by Steven Caulker as he lined up a shot but it rolled on to Navas and the Spaniard snaffled the chance.
City continued to dominate but could not find a way through as Cardiff and particularly Caulker, who headed away another tricky Navas cross, held firm.
That may have given Cardiff encouragement at half-time that they could fight their way back into the contest again.
They returned strongly after the break and Hart saved from Mutch before diving on a loose ball at a corner.
Noone then brought the best out of Hart after a good run but City upped the tempo to put the game beyond Cardiff in the final 15 minutes.
Silva went close when he shot inches wide after a neat lay-off by Dzeko and Aguero, fresh off the bench, shot over.
The decisive goal came from Toure after the Ivorian set off on a rampaging run from deep inside his own half.
Toure had regained possession after one of his own passes had gone astray and he charged upfield to fire past Marshall after playing a one-two with Aguero on the edge of the box.
Cardiff were still reeling from that when Aguero stung them again after 79 minutes, twisting one way then the other to outfox Caulker and clip home the fourth.
With the job done, City eased off in the latter stages and were caught out at a corner as Campbell knocked in a loose ball from close range.