“We've waged a great and noble battle," Justice Minister Christiane Taubira said after the vote.
The "marriage for all" measure, championed by François Hollande and his Socialist government, now heads to the left-leaning senate, which is expected to approve it April 2.
France24 describes the parliamentary debate that preceded the final vote as "acrimonious," noting that the conservative opposition's filing of more than 5,000 amendments to delay proceedings led to sessions that lasted into the early hours of the morning.
In the months leading up to the debate, the measure's opponents, largely spearheaded by the Catholic Church, took to the streets in thousands, with 340,000 turning up in Paris Jan 14. On Jan 29, police estimate that 125,000 supporters of the bill staged their own march.
Undaunted, opponents are planning another rally March 24.
The vote comes about a week after British MPs, by a vote of 400 to 175, approved a bill that would legalize gay marriage in England and Wales.
During the debate, MP Maria Miller said the bill is about fairness. "It's about giving those who want to get married the opportunity to do so whilst protecting the rights of those who don't agree with same-sex marriage," she said, adding that "equal marriage should not come at the cost of freedom of faith, nor freedom of faith come at the cost of equal marriage."
The bill is in committee for further consideration and possible amendments before it undergoes a third reading. It will then move to the House of Lords, where it is expected to pass.
More coverage below: