Alexander Farnese, hertog van Parma had als Spaanse opperbevelhebber het koninklijke leger, nadat het eerder in drie delen was opgesplitst, weer bijeengebracht. Het trok naar Roosendaal om slag te leveren met ter ondersteuning van Willem van Oranje aanwezig Frans leger onder Armand de Gontaut, baron van Biron. Toen deze vernam dat Parma's leger in aantocht was, liet hij zijn troepen opbreken en via Steenbergen naar Bergen op Zoom trekken. Parma zette de achtervolging in en haalde de achterhoede in ter hoogte van Halsteren. De achterhoede leverde twee uur lang fel weerstand tegen Parma's voorhoede voordat de rest van het leger hen te hulp kwam. Biron viel daarbij van zijn paard en brak een been. Hij zou gedood zijn als Staatse troepen hem niet hadden ontzet.
De Spanjaarden verklaarden na de slag veel meer dan duizend Fransen gedood te hebben. Volgens geschiedschrijver Pieter Bor echter vielen in beide legers ongeveer vierhonderd doden.[1] De Staatsgezinden trokken zich na de slag terug naar versterkte steden. Farnese splitste zijn leger nu in twee delen. Hij wilde Herentals innemen, maar toen hij vernam dat Duinkerke door de Staatsen was ingenomen trok hij naar Duinkerke.