They suffered a late blow when striker Jamie Vardy limped off with a muscle injury but it was a positive night for Leicester who picked up only their fourth home win this season.
All eyes will be on Sunday’s Anfield showdown between Liverpool and leaders Manchester United but a well-balanced Leicester side look capable of staying with them.
Brendan Rodgers’s side have 35 points from 18 games, one point behind United and two better off than Liverpool. Manchester City, who also slipped below Leicester ahead of their Sunday clash with Crystal Palace, have 32.
Eighth-placed Southampton, who beat Liverpool in their last game, were unlucky when Stuart Armstrong‘s long-range effort rattled the crossbar as the visitors pressed for an equaliser.
But Leicester, who started slowly, deserved the points.
“A great win for us. The first 25 minutes I thought we were socially distancing, we didn’t get within two metres of them,” Rodgers, whose side were in the running this time last year before falling away, told BT Sport.
“Second half we were much better and should have scored more than two goals. At the same time we defended well.”
Southampton, without striker Danny Ings who is isolating after testing positive for COVID-19, were the sharper side early on and could have gone ahead when Che Adams forced Leicester keeper Kasper Schmeichel into action.
At the other end Barnes nearly finished off a slick Leicester move but drilled his shot straight at Alex McCarthy.
Leicester went ahead in the 37th minute when Maddison rolled Jan Bednarek on the edge of the area before advancing inside the penalty area. The angle looked tight but he ripped a rising shot high past McCarthy — celebrating in novel socially-distanced style with imaginary handshakes.
Southampton were almost level before halftime when left back Ryan Bertrand went clear and took aim with a powerful effort that Schmeichel beat away for a corner.
Will Smallbone also tested Schmeichel at the start of the second half and Leicester survived a scare when Armstrong thumped a shot against the bar in the 73rd minute. As the ball rebounded, Jonny Evans bundled over Shane Long but he was spared conceding a penalty by an offside flag.
Leicester could have added to their lead though with Barnes having an effort cleared off the line and McCarthy making a great save from Vardy. But Barnes made no mistake when he went through one-on-one and coolly dinked the ball into the net.