The gap between the leaders and Barca now stands at an imposing seven points following Real's victory over Real Zaragoza.
Barca were particularly poor in the first half, during which Villarreal could have even taken the lead, while the second period saw them denied by a stout defensive performance and some good saves from Diego Lopez.
Dani Alves worked Lopez for the first time after only three minutes, before Ruben Cani returned fire for the hosts by forcing Victor Valdes into action five minutes later.
Barca were seeing plenty of the ball and Lionel Messi thought he had opened the scoring in the 17th minute when he went one on one with the charging Lopez and produced a delicate chip.
The ball hung in the air for what seemed like an age until it squirmed just wide.
Villarreal enjoyed a good period thereafter, almost taking the lead themselves when Valdes flapped at a free-kick and Gerard Pique's defensive header looped towards the Barca goalline. Luckily for them, Javier Mascherano was on hand to head clear and Eric Abidal was able to block Jose Luis Joselu's resulting shot.
Alves drilled a low free-kick just wide for Barca after 31 minutes but the visitors were struggling for their usual rhythm.
Marcos Senna's superb first-time effort four minutes later was curling towards goal and needed an athletic save from Valdes to keep the stalemate.
The corner that followed was headed in by Gonzalo Rodriguez but he was in an offside position.
Villarreal saw a penalty claim against Sergio Busquets turned down two minutes into the second half but, that aside, Barca were the dominant force in the second period.
They pushed the hosts deeper as the game progressed but struggled to apply the killer touch.
A superb reverse pass from Messi unlocked the Villarreal defence only for Cesc Fabregas' heavy touch to allow Lopez to meet the ball and gather safely.
Alexis Sanchez shot over from the edge of the area and substitute Cristian Tello set up the waiting Fabregas in the 78th minute.
Tello ran to the byline and cut back smartly for Fabregas, who took a touch to get the ball out of his feet and then saw his low shot deflected on its way to goal.
The deviation looked enough to beat Lopez, but he managed to get a hand to it and pushed the ball firmly against the bar.
With five minutes to go a neat one-two between Sanchez and Messi handed the Argentinian a one-on-one chance against Lopez but the goalkeeper blocked with his legs at the near post.
The rebound spilled to Fabregas but this time his shot was woefully off target and there were no further chances.