Amid fierce protests from the insurgent Five Star Movement and its supporters, the bill passed with 375 votes in favour and 215 against. The law now requires approval in the Senate, or the upper house.
A confidence vote was called on Tuesday in a bid to force it through the lower house and curtail further discussion on a law that has been subject to parliamentary tractations for nearly three years.
The Five Star Movement opposed the law, arguing that it would disadvantage the party owing to its pledge to never join a coalition. The law permits parties to form an alliance ahead of elections.
Silvio Berlusconi's Forza Italia and the far right, anti-immigrant Northern League both joined the government in backing the new system, which is a hybrid of first-past-the-post and proportional election schemes.
Under the draft law, 225 deputies in the Chamber would be elected directly from seats in which they gained the most votes and a further 386 would come from party lists based on their percentage of the vote.
The system is seen as favouring established parties with deep local roots and well-known candidates, to the detriment of recently-founded Five Star Movement.
Several thousands of Five Star Movement activists protested outside parliament Wednesday, chanting "Out", "Shame" and "Honesty" against what they claimed is an anti-democratic, unconstitutional reform.
Latest polls show the ruling Democratic Party (PD) and the Five Star Movement, which recently nominated 31-year-old Luigi Di Maio as its candidate for prime minister, are neck and neck. But if the PD teams up with smaller centrist and left-wing parties ahead of elections they would likely eclipse the Five Star.
The new law could also favour Berlusconi's Forza Italia and Matteo Salvini's Northern League should the parties form an alliance.