Nine-man Liverpool lose yet again
Defenders Philipp Degen and Jamie Carragher were two of eight players to be dismissed in total as Rafa Benitez's side went down to their fifth league defeat of the season.
Chelsea remained top by two points with a comfortable 4-0 win at 10-man Bolton Wanderers, while Manchester United stayed in touch with a 2-0 victory over Blackburn Rovers.
Third-placed Arsenal won 3-0 against north London rivals Tottenham Hotspur, who are fourth, thanks to a Robin van Persie double either side of Cesc Fabregas's brilliant solo effort.
The win puts Arsene Wenger's men on 22 points, five behind London rivals Chelsea with a game in hand.
Liverpool, who stay fifth and are now nine points off the pace, were again without injured captain Steven Gerrard and went behind after 24 minutes at Craven Cottage when striker Bobby Zamora tapped in for his fifth this term in all competitions.
Fernando Torres replied with a long range equaliser just before the break but the visitors lost their way once the Spaniard was substituted on the hour for Ryan Babel.
Erik Nevland restored Fulham's lead after 73 minutes before Degen and Carragher received straight red cards within three minutes of each other and Clint Dempsey added a third goal to move Fulham up to 11th.
"We were able to keep our noses in front and anytime you take a scalp the size of Liverpool's you have got to be happy," Fulham manager Roy Hodgson told Sky Sports News.
"I don't think people will begrudge us the victory because I thought we were worth it over the 90 minutes.
Liverpool manager Rafa Benitez begged to differ, saying: "Always it's hard to take any defeat but especially this one because we were in control of the game."
"It's a question of taking your chances when you create them and don't make massive mistakes like today and give a lift to the other team." DINDANE MASTERCLASS
Chelsea made it 17 goals from their last four games in all competitions with none conceded as they coasted to victory over Bolton.
The hosts were reduced to 10 men after defender Jay Lloyd Samuel was dismissed for a foul on Didier Drogba, allowing Frank Lampard to score from the spot just before the break.
Deco added a second on the hour before a Zat Knight own goal and a Drogba strike completed the rout for Carlo Ancelotti's team.
Dimitar Berbatov's smart turn and volley provided the highlight of an otherwise laboured United performance as Alex Ferguson's side beat struggling Rovers at Old Trafford.
The Bulgaria striker collected a stray Patrice Evra shot before flicking the ball up and smashing it past keeper Paul Robinson after 55 minutes before Wayne Rooney added a late second when he swept the ball home.
West Ham United remain in the drop zone after letting a two-goal lead slip to draw 2-2 at eighth-placed Sunderland with both sides having a player sent off.
Guillermo Franco and Carlton Cole put the visitors 2-0 up before Sunderland midfielders Andy Reid and Kieran Richardson levelled it. Sunderland lost Kenwyne Jones for violent conduct while West Ham's Radoslav Kovac was dismissed late on.
Aruna Dindane hit a hat-trick and made another goal as bottom side Portsmouth thrashed Wigan Athletic 4-0 for only their second league win of the season, meaning Paul Hart's side go level on seven points with West Ham.
Meanwhile, fellow strugglers Wolverhampton Wanderers fought back to draw 2-2 at Stoke City who stay ninth in the table.
Burnley continued their good home form with a 2-0 win over 10-man Hull City, who had Geovanni dismissed, to increase the pressure on visiting manager Phil Brown while Aston Villa missed the chance to move into fourth with a 1-1 draw at Everton.
Both teams had players sent off, Everton goalscorer Diniyar Bilyaletdinov and Villa defender Carlos Cuellar receiving their marching orders in the last three minutes of the match.