Andre Schurrle and Stefan Kiessling scored the goals for Leverkusen, who also missed a penalty late on, but held on for three points which take them to within two points of their opponents and four ahead of Hannover as a group of five clubs start to move clear at the top of the Bundesliga.
To make matters worse for Schalke, they ended the game with 10 men with Kyriakos Papadopoulos getting an eight-minute head-start on his team mates for a place under the shower.
Bayer started brightly with a quick-passing game catching Schalke off guard and creating a few good early penings.
Kiessling and Simon Rolfes fired the first warnings, and the pair then combined with the former, the league's top goalscorer in the calendar year with 20 goals, dragging his shot wide of the far post in the 13th minute.
Julian Draxler nearly beat Bernd Leno with Schalke's first effort in the 27th minute, but the Leverkusen goalkeeper kept the ball out with his fingertips before denying both Lewis Holtby and Klaas-Jan Huntelaar.
As the first half reached its conclusion, Schurrle opened it up with a fine burst of pace and an even better finish, leaving Lars Unnerstall no chance in the Schalke goal as his powerful shot arrowed in.
The post denied Lars Bender a second goal on the hour mark as Leverkusen continued to dominate proceedings in the second half.
Unnerstall prevented Kiessling from making it two in the 66th minute, but could do nothing to deny the German striker a minute later when he slotted the ball in for his 21st goal of 2012.
He could have made it 22 for the year in the 81st minute when Roman Neustadter fouled Schurrle inside the box, but Unnerstall saved Kiessling's penalty.
A minute later, Papadopoulos picked up a second yellow card, but that was only cosmetic towards the end of a dominant victory for Leverkusen.