Thousands of Blues fans charged towards the Villa supporters and dozens of missiles and some flares were thrown before order was restored although Blues can expect to face Football Association action.
Zigic's deflected shot five minutes from time settled the tie after Gabriel Agbonlahor had cancelled out Sebastian Larsson's early penalty.
Villa were unable to deny Blues their first win over their local rivals for five-and-a-half years.
Cameron Jerome had the first shot on goal after being found in space by Keith Fahey.
But Villa keeper Brad Friedel had his body behind the low drive from the Bluesstriker.
Villa were the first to settle and Zigic cleared a goal-bound header from James Collins from a Stewart Downing corner.
But then Blues took the lead against the run of play after 10 minutes through a Larsson penalty.
Jerome turned the ball into Lee Bowyer and he was brought down by Villa skipper Richard Dunne.
Up stepped Larsson to drill a low penalty past Friedel who went to his right.
The home side could have doubled their lead after 23 minutes.
Larsson's low cross found Zigic unmarked but his first touch was dreadful and the ball bounced away from the Serbia international.
Blues thought they had doubled their lead after 28 minutes.
Larsson's corner fell into the path of Zigic whose low shot was dragged back by Friedel when replays suggested it may have crossed the line.
But one of the assistants raised his flag with Liam Ridgewell adjudged to be in an offside position.
Villa took advantage of this good fortune and after 30 minutes Agbonlahor struck at St Andrew's for the third successive game to bring his side back on level terms.
Jonathan Hogg threaded the ball into the path of Agbonlahor and his low cross shot flew past Ben Foster into the corner of the net.
Blues had a chance to instantly regain the lead when Jerome found himself with only Friedel to beat.
But he lofted the ball over the veteran goalkeeper and wide of the far post.
Blues defender Scott Dann became the first player to be yellow carded after 48 minutes for a late challenge on Agbonlahor near the halfway line.
Friedel did well to block a near-post cross from Fahey when under pressure from Jerome.
Foster went down to his left to hold onto a dipping 20-yarder from Barry Bannan.
Blues skipper Stephen Carr was yellow carded for a late challenge on Stephen Warnock.
Bowyer took a knock and was struggling for several minutes before being replaced after 65 minutes by Craig Gardner.
Villa looked the more likely to snatch a winner in normal time but Gardner was only just wide with a dipping 25-yard attempt after creating the chance himself with a neat turn.
Villa came close to taking the lead when Foster parried a shot from Stephen Ireland and then Ashley Young's follow-up effort was cleared by Dann.
But with five minutes remaining Zigic's deflected shot put Blues back in front.
Jerome made a powerful run down the right and his low cross found Zigic whose shot deflected off Luke Young and looped over Friedel.
Villa almost rescued the tie when Ciaran Clark headed just over from Downing's cross.
But the final whistle was the cue for the ugly scenes and police had to form a solid barrier between the two sets of fans.