After Real Madrid moved two points clear of Girona at the top of the league with a win at Las Palmas, the pressure was firmly on Xavi Hernandez’s defending champions in third.
In a see-saw match Gerard Moreno and Ilias Akhomach put Villarreal two goals ahead before Barcelona battled back.
Ilkay Gundogan and Pedri struck before Eric Bailly headed into his own net to give the hosts the lead.
Xavi brought in Joao Felix and midfielder Oriol Romeu from the side that lost in extra-time against Athletic Bilbao in the Copa del Rey in midweek, as well as young defender Hector Fort.
After that elimination and a thrashing by Madrid in the Spanish Super Cup final, Barcelona have only La Liga and the Champions League left on the table.
Barcelona’s 16-year-old sensation Lamine Yamal offered spark and invention on the right but Villarreal were the more dangerous side in the first half.
Barcelona have conceded far too many early goals this season and after three minutes Alex Baena struck, but it was ruled out for offside.
Felix had a vicious strike tipped over by Filip Jorgensen before Villarreal had another strike disallowed, controversially.
Moreno rifled in at the near post but Alexander Sorloth was ruled to be offside and blocking defender Ronald Araujo.
It was third time lucky for the Yellow Submarine, however, with Moreno firing home Sorloth’s cut-back with aplomb — this time it counted.
As the players trudged in for half-time Barcelona were whistled in by disgruntled supporters at their temporary home at the Olympic Stadium.
Xavi made a triple change at the break, throwing on Joao Cancelo, Pedri Gonzalez and 17-year-old defender Pau Cubarsi.
It fired the team up as they pushed Villarreal back, but they conceded a foolish second goal after a bad Cancelo mistake.
The defender miskicked the ball allowing former Barcelona winger Akhomach to gallop in on goal, rounding Inaki Pena and rolling home.
Undeterred, Barcelona fought their way back in.
Gundogan finished superbly after Robert Lewandowski diverted the ball into his path on the edge of the box after an hour.
Then Pedri drove home eight minutes later to level the scores, before Bailly headed Gundogan’s free kick into his own net.
Barcelona substitute Vitor Roque came close to adding a fourth but Jorgensen saved his low strike after he raced in behind.
However Barcelona’s defence, a far cry from the watertight back-line which led them to the title last season, was pulled apart again by Sorloth.
The striker fed winger Guedes, who flashed a strike past Pena and into the far corner.
Barcelona were awarded a penalty in the 90th minute when Santi Comesana blocked Gundogan’s cross with his elbow but the referee cancelled it after reviewing the incident on VAR, leaving the hosts furious.
Worse was to come, with Sorloth finishing from close range to put Villarreal ahead and Morales rubbed salt in the wound with a late fifth, with Barcelona in total disarray.
AFP