Efter Real Madrids poängtapp på lördagskvällen hade Barcelona chansen att gå upp jämsides med ärkerivalen i La Liga-tabellen under söndagen. Då krävdes seger borta mot Europa League-jagande Villarreal.
Det började illa för katalanerna när Samuel Chukwueze gav hemmalaget ledningen efter 26 minuter. Nigerianen blev fri med Marc-André Ter Stegen, rundade Barça-målvakten och la in 1-0 i öppet mål.
Bara ett par minuter senare kvitterade Antoine Griezmann för gästerna när han blev frispelad i djupled och vackert lobbade in 1-1.
Innan första halvlek var slut hann Griezmann bli tvåmålsskytt när han snappade upp en misslyckad hemåtpassning och tryckte in 1-2.
Det blev än svårare för Villarreal när Manuel Trigueros satte upp dobbarna mot ankeln på Lionel Messi och fick syna det röda kortet efter 65 minuter. Messi kunde senare resa på sig och fullfölja matchen.
Barcelona höll därefter undan för Villarreal och säkrade tre extremt viktiga poäng i titelstriden.
Startelvor:
Villarreal: Asenjo - Foyth, Albiol, Pau Torres, Moreno - Chukwueze, Capoue, Parejo, Trigueros - Moreno, Alcácer
Barcelona: Ter Stegen - Mingueza, Piqué, Lenglet - Busquets - Dest, de Jong, Pedri, Alba - Messi, Griezmann