Leicester have moved into ninth position in the top-flight standings, while Chelsea remain in fourth despite suffering their first home defeat of the campaign.
Chelsea almost took the lead as early as the second minute when a long ball over the top of the defence was flicked marginally wide of the post by Willian, and the home side remained in the ascendancy during the opening stages.
Leicester were sitting deep and inviting pressure from the Blues, and it almost worked against them in the 17th minute when Pedro flicked a header just past the far post.
The visitors improved as the first half progressed, but Chelsea remained a constant threat and Eden Hazard should have put the home side ahead in the 33rd minute only for the Belgian to strike the top of the crossbar from 10 yards when he opted for power over placement.
Leicester's Wilfred Ndidi almost stunned Stamford Bridge with a thunderous effort from all of 30 yards, but Kepa Arrizabalaga produced a fine one-handed save to tip the midfielder's rising shot over the crossbar.
Chelsea went straight back up the other end and Willian should have netted from no more than 12 yards, but the Brazilian scuffed an effort into the grateful hands of Kasper Schmeichel rather than find the far corner.
The home side went straight onto the front foot after the restart, but Leicester shocked the West Londoners with an outstanding opening goal as Ricardo Pereira and James Maddison combined to tee up Vardy, who fired the ball inside Arrizabalaga's near post from 12 yards out.
Hazard nearly found an equaliser shortly afterwards only for Schmeichel to make a fine stop at his near post, but Maurizio Sarri still opted to make a double change with Ruben Loftus-Cheek and Olivier Giroud being introduced.
However, while Chelsea kept Leicester on the back foot, the Blues were unable to create any clear-cut opportunities and Leicester came close to doubling their advantage at the other end.
A cross from the right was fumbled by Arrizabalaga and Vardy looked certain to add a second, but Cesar Azpilicueta got his body in the way to prevent the ball from finding the back of the net.
Chelsea did not come close to an equaliser until the 89th minute when Antonio Rudiger sent a glancing header wide of the target, but the Blues created an even better opportunity in the first minute of added-on time.
Marcos Alonso beat the offside trap and only had Schmeichel to beat from inside the area, but the Spaniard's shot struck the inside of the post and rebounded across goal as Leicester held on to seal a rare triumph in England's capital.
CHELSEA (4-3-3): Arrizabalaga; Azpilicueta, Rudiger, Luiz, Alonso; Kante, Jorginho (Fabregas 75'), Kovacic (Loftus-Cheek 61'); Willian (Giroud 61'), Hazard, Pedro
LEICESTER CITY (4-3-3): Schmeichel; Pereira, Morgan, Maguire, Chilwell; Choudhury, Mendy, Ndidi; Albrighton, Maddison (Gray 82'), Vardy (Iheanacho 84')