More than 100,000 people have taken to the streets across France to protest the government plans to approve same-sex marriage and adoption.
Saturday's protest, called the "March for Everyone," included pro-family and Catholic groups. Several thousand people marched in Paris, carrying signs with slogans such as "One child (equals) one father + one mother."
Some 70,000 people joined the Paris rally on Saturday, police said, though organisers put the figure at 200,000, with more than 30,000 others holding similar protests in towns around the country.
In the southeastern city of Lyon, 22,000 people protested, police said. Officers there detained around 40 youths who had come to oppose the main rally.
There were other protests in the northwestern towns of Rennes and Nantes, and in the northern town of Laon.
Up to 8,000 also marched in the southern city of Marseille, where they too were confronted by supporters of gay marriage.
In the southwestern city of Toulouse, police used tear gas against a group of several hundred activists who tried to confront the main rally of several thousand in a counter-protest.
Najat Vallaud-Belkacem, a women's rights minister and government spokeswoman, defended the right of homosexuals to marry and to adopt as representing progress for everyone.
She said there had been a similar uproar when France backed civil marriages for gay couples 14 years earlier, yet this had since been accepted.
Parliament would in any case consult widely on the issue and this would be the time for debate, she added, warning against excess and polemic.
French President Francois Hollande's government has come under fire from Catholic groups and the right-wing opposition over the bill.
The marches came as Pope Benedict XVI called on the French church on Saturday to make its voice heard on social issues.
Another demonstration against gay marriage has been called in Paris for Sunday by the Catholic organisation Civitas.
And the campaigners intend to keep up the pressure, with more demonstrations called for January 13.