The lower house of parliament, the National Assembly, voted 331 to 225 to adopt the bill, which allows homosexual marriages and adoptions by gay couples.
The vote follows weeks of divisive debate in the French parliament, and mass street rallies by supporters and opponents of the move.
Noisy protesters were ordered out of the chamber before the vote.
When the vote was announced in favour of the bill, supporters broke out in cheers and chants of "equality, equality".
Justice minister Christiane Taubira hailed the adoption of the bill as a "historic" moment.
"It grants new rights, stands firmly against discrimination [and] testifies to our country's respect for the institution of marriage," she said.