Jay Bothroyd, Michael Chopra and Peter Whittingham scored for the Bluebirds.
Cardiff replaced Queens Park Rangers, who were held 1-1 by Burnley at Loftus Road.
Adel Taarabt had put Rangers ahead, with Graham Alexander scoring from a penalty to save a point.
Swansea City recorded a 3-0 win at Crystal Palace to strengthen their grip on third place. Their goals came from Scott Sinclair, Darren Pratley and Joe Allen. Palace dropped to the bottom of the table after the loss.
Gary McSheffrey's first-half header saw Coventry win 1-0 at Sheffield United. Reading came from 3-1 down to defeat Doncaster Rovers 4-3, and now sit in the play-off positions.
Middlesbrough took the lead against Bristol City through Kris Boyd, but Albert Adomah and Marvin Elliott secured the win which saw the Robins climb off the bottom of the table. Both of these sides are in the relegation zone, joined by Palace.
Barnsley had to settle for a point against Hull, despite Adam Hammill's impressive strike from distance giving them the lead. Kevin Kilbane levelled for the Tigers.
Derby County were 4-1 winners over Watford, Portsmouth defeated Nottingham Forest 2-1.
Ipswich Town defeated Millwall 2-0 at Portman Road. A goal from Paul Gallacher saw Leicester defeat Preston 1-0.