Match ends, Cardiff City 2, Fulham 4.
Cardiff City missed the chance to narrow the gap on leaders Wolves as they suffered a first home Championship defeat of the season against Fulham.
The visitors started fluently and led through Tim Ream's header and Floyd Ayite's tap-in.
Kenneth Zohore's 25-yard volley revitalised Cardiff, only for Ryan Sessegnon to slot in Fulham's third.
Callum Paterson's injury-time header set up a frantic finale but Stefan Johansen's chip sealed Fulham's win.
Cardiff drop to third place after Bristol City beat Reading to overtake the Bluebirds, who are now eight points adrift of Wolves - who drew at Millwall - at the Championship summit.
For Fulham, a third win in four games keeps them in 11th place in the table.
Having unexpectedly lost at lowly Bolton in their previous outing, Cardiff were boosted by Zohore's return from an ankle injury as the striker started his first game since October.
However, he cut an isolated figure as the hosts looked off the pace against their slicker opponents.
Fulham should have had a penalty after five minutes when Stefan Johansen was floored by Bruno Ecuele Manga's mistimed lunge, but referee Simon Hooper ignored the visitors' furious appeals.
The decision only delayed the inevitable, as an intricate move involving Tom Cairney and Ayite led to a clipped cross towards the back post, where an unmarked Ream nodded in.
Cardiff struggled to get any kind of a foothold in the match and, with the rain getting progressively heavier, the overall quality of the encounter dwindled.
Fulham re-established their dominance early in the second half and doubled their lead as Sessegnon's low cross was turned in from close range by Ayite.
But seemingly out of nowhere and less than a minute later, Cardiff were back in the game.
Collecting the ball from Junior Hoilett's knock-back, Zohore flicked the ball up and let fly with a dipping volley which sailed over Marcus Bettinelli and into the top corner.
The goal sparked a period of pressure from Cardiff, with Ecuele Manga and Sol Bamba both having headers saved.
But they were caught with a sucker punch of a counter-attack, as Sessegnon turned inside the hosts' penalty area and coolly slotted the ball into the bottom corner.
When Paterson came off the bench to head in Cardiff's second goal in injury time, Neil Warnock's men looked like they might snatch an improbable point.
But any such hopes were swiftly extinguished when Johansen was allowed to scamper unopposed into the hosts' box before lifting an impudent finish over Neil Etheridge and into the net.
Cardiff City manager Neil Warnock said: "I am disappointed at losing the home record. But if you'd told me at the start of the season we would lose our home record at Christmas time, then I would have been delighted.
"I was disappointed in the goals we conceded. Overall I thought they were better than us, but it says a lot about us as a team that we kept going. I can't fault them.
"It was great to get Kenneth Zohore back, even if it did cost me 25 quid. I bet Ken he wouldn't last 90 minutes, so I suppose I'll have to pay up."
Fulham manager Slavisa Jokanovic said: "We played well. We scored four goals, we created chances. We defended well.
"The team showed great spirit with the ball and without the ball. Today we were a little bit more clinical.
"It's a tough trip for all the teams. We know how difficult it is to play against Cardiff in this moment - they're a really solid and strong team.
"I knew how important this was for our supporters on Boxing Day. I am happy for them and the players. We showed we can still be competitive."
- 5Ecuele Manga
- 20DamourSubstituted forHealeyat 73'minutes
- 8RallsBooked at 90mins
- 33HoilettSubstituted forPatersonat 73'minutes
- 1BettinelliBooked at 90mins
- 2FredericksBooked at 43mins
- 4OdoiBooked at 82mins
- 19OjoSubstituted forKebanoat 86'minutes
- 11AyitéBooked at 34minsSubstituted forFonteat 77'minutes
- 3R SessegnonSubstituted forPiazonat 90+1'minutes
- 36De La Torre
- Simon Hooper
- Shots on Target
Second Half ends, Cardiff City 2, Fulham 4.
Goal! Cardiff City 2, Fulham 4. Stefan Johansen (Fulham) left footed shot from the centre of the box to the high centre of the goal. Assisted by Ryan Fredericks following a fast break.
Offside, Fulham. Tom Cairney tries a through ball, but Neeskens Kebano is caught offside.
Delay over. They are ready to continue.
Delay in match Denis Odoi (Fulham) because of an injury.
Foul by Neeskens Kebano (Fulham).
Joe Bennett (Cardiff City) wins a free kick in the defensive half.
Marcus Bettinelli (Fulham) is shown the yellow card.
Goal! Cardiff City 2, Fulham 3. Callum Paterson (Cardiff City) header from the centre of the box to the bottom left corner. Assisted by Lee Peltier with a cross.
Attempt saved. Kenneth Zohore (Cardiff City) left footed shot from a difficult angle on the right is saved in the bottom left corner. Assisted by Rhys Healey with a through ball.
Lucas Piazon (Fulham) wins a free kick in the attacking half.
Foul by Bruno Ecuele Manga (Cardiff City).
Substitution, Fulham. Lucas Piazon replaces Ryan Sessegnon.
Joe Ralls (Cardiff City) is shown the yellow card for a bad foul.
Tom Cairney (Fulham) wins a free kick in the attacking half.
Foul by Joe Ralls (Cardiff City).
Attempt saved. Neeskens Kebano (Fulham) right footed shot from the right side of the six yard box is saved in the centre of the goal. Assisted by Denis Odoi.
Foul by Stefan Johansen (Fulham).
Craig Bryson (Cardiff City) wins a free kick on the right wing.