The Hammers entered the London derby off the back of an eight-game winless run in all competitions, but Cresswell's second-half strike handed Manuel Pellegrini's side a huge three points.
The result has seen West Ham rise into 13th position in the Premier League table, while Chelsea remain fourth but are now just six points ahead of fifth-placed Tottenham Hotspur.
Chelsea had the first half-chance of the match in the third minute when Emerson Palmieri found space down the left before delivering a low cross into Pedro, but the Spaniard saw his attempt blocked en route to goal.
The attacker had a big chance to send the Hammers ahead in the seventh minute when he met a cross from Cresswell, but the ball sailed over the crossbar from close range.
Chelsea were carrying a threat down the other end, though, and David Martin - making his Premier League debut as Roberto dropped to the bench - had to keep out a strike from Mason Mount in the eighth minute.
Frank Lampard's side were the team on the front foot as the half continued to gather pace, and Martin was again called into action in the 17th minute to keep out a deflected effort from Pedro.
The Hammers did have another chance through Antonio in the 25th minute, though, with the attacker's header from a Robert Snodgrass cross bringing a fine save from Kepa Arrizabalaga between the home side's sticks.
Without Tammy Abraham through injury, Olivier Giroud was given the nod for Chelsea through the middle, and the France international was finding it difficult to win the physical battle against Angelo Ogbonna.
The final chance of the first period fell to Chelsea when Giroud reacted first to a loose save from Martin, but the Hammers goalkeeper did really well to deny the Frenchman, having also kept out the initial effort from Mateo Kovacic, meaning that the two teams were level at the break.
West Ham took the lead in the 48th minute when Cresswell collected a pass from Fornals before working some space inside the Chelsea box and picking out the bottom corner with a wonderful finish.
Chelsea had a half-chance just before the hour when Zouma climbed highest inside the penalty box to meet another corner, but the Frenchman's effort was always dropping wide of the post.
West Ham then had two opportunities of their own from corners, first Ogbonna saw his powerful header saved by Kepa before Antonio somehow failed to bundle home from close range from the next set piece.
Antonio thought that he had sent West Ham 2-0 ahead in the 68th minute after smart work from Snodgrass, but VAR ultimately disallowed the attacker's effort for handball, handing Chelsea a huge lifeline.
The Blues were struggling to make things happen as the match continued to develop, though, and West Ham's lead still stood entering the final 10 minutes of action at Stamford Bridge.
James tried his luck from distance in the 82nd minute, but the right-back's effort was always rising over the crossbar with the Hammers still ahead in the capital.
Pulisic had the home side's best chance late on after breaking into the penalty box, but the United States international fired just wide as West Ham held on for a huge win.
Next up for Chelsea is a home game against Aston Villa on Wednesday, while West Ham will visit Wolverhampton Wanderers on the same night.
CHELSEA (4-2-3-1): Kepa; James, Zouma, Tomori, Emerson; Kovacic, Jorginho (Kante 63'); Pulisic, Mount, Pedro (Willian 63'); Giroud (Hudson-Odoi 71')
WEST HAM UNITED (4-1-4-1): Martin: Fredericks, Ogbonna, Balbuena, Cresswell; Rice; Snodgrass, Noble, Fornals (Masuaku 83'), Anderson (Yarmolenko 71'); Antonio (Haller 76')body check tags ::