Barcelona deservedly took the victory with them into the New Year, as although Villarreal put up a fight the Camp Nou outfit were clearly the better side on the day.
Indeed, not until Gerard Pique's sending-off midway through the second half did Barcelona look like surrendering their hard-fought lead, and even then some unusually wasteful finishing from the hosts put paid to that idea.
After this win Barcelona have stretched their lead at the top of the Primera to eleven points, while the Madrigal outfit have sunk to sixth with 29.
Still, Villarreal perhaps started the better side as they strung together some fine passing moves through the middle, but Barcelona were first to threaten.
Thierry Henry, taking advantage of some good possession play from Samuel Eto'o, fired wide thirteen minutes in as the Villarreal defence struggled to close him down.
At the other end Villarreal were more often than not being caught out by Villarreal's offside trap, but on one occasion this failed: Carles Puyol failed to play Rossi offside and thus the Italian was clean through, but with just Valdes to beat the former Manchester United man rolled his shot inches wide.
Villarreal had no offside trap of their own, opting to defend deep instead. Thus Barcelona won a corner 28 minutes in that so nearly resulted in a goal. The set-piece itself wasn't too impressive, but young Sergi Busquets seized on a clearance and volleyed from outside the area, bringing out an incredible save in Diego Lopez.
With the Yellow Submarine still struggling to clear their lines Messi was next to enjoy a fine chance, but the Argentinean uncharacteristically fluffed his shot when given a chance on a plate by the impressive Thiery Henry, who had dispossesed Angel out on the left.
Samuel Eto'o came into the game towards the end of the half to free Henry again, but by this time the Frenchman was being closed down more effectively and thus the opening period ended goalless.
Still, just two minutes after the break Villarreal had taken an unlikely lead. Giuseppe Rossi turned provider to make up for his earlier error by chipping masterfully over the defence for the bustling Cani, who made no mistake when one-on-one with Victor Valdes.
But less than ten minutes after that Dani Alves showed his worth with a superb cross for Seydou Keita to put in an absurdly brave header and level the scores.
It was clear that the Blaugrana were loaded with belief and desire, and as such it was no surprise when they took the lead. The on-form Thierry Henry was the man of the moment as he effortlessly side-footed past Diego Lopez following Xavi's neat cross.
Villarreal were utterly out of it by this point but they were thrown a lifeline with just over fifteen minutes to go as Gerard Pique was judged by referee Clos Gomez to have led with an elbow against substitute Guille Franco. It was a harsh decision at first glance but the referee stood by it.
With Nihat and Franco both on the pitch Villarreal were clearly looking to rescue a point, but Barcelona were still in the ascendancy. Still, Clos Gomez was to infuriate them yet again as what looked to be a clear penalty following Gonzalo's apparent foul on Eto'o was denied.
Villarreal, perhaps buoyed by that piece of luck, came forward in earnest in the last ten minutes. First Pires threw away a superb chance with eight minutes left to go and then Guille Franco panicked when one-on-one with Valdes and hit his shot well off target.
The yellow cards were still coming thick and fast from an increasingly bewildered Clos Gomez, who at least got one thing right in adding no fewer than five minutes of stoppage time.
But as the 90th minute came and went Villarreal's winning spark had faded away as reality kicked in - Nihat's awful miss in the 91st minute and another from Guille Franco in the 92nd confirming this - and 1-2 it ended.
Villarreal 1-2 Barcelona stats and lineups
Ching leads Dynamo past Firpo
Pellegrini Untroubled By Five-Goal Deficit
Villarreal Have An Opportunity Against Barcelona - Godín