“We are proposing the UK should resettle up to 20,000 refugees over the life of this parliament,” Cameron said in a speech in the House of Commons.
“In doing so we will continue to show the world that this is a country of extraordinary compassion always standing up for our values and helping those in need.”
Britain will continue to take refugees from the camps and from elsewhere in Jordan, Lebanon and Turkey, he said.
“This provides refugees with a more direct and safe route to the UK, rather than risking the hazardous journey to Europe,” Cameron said.
Vulnerable refugees such as orphans will be given priority, according to the prime minister, who has come under mounting pressure after the image of a dead Syrian toddler washed up on a Turkish beach sparked a groundswell of public sympathy.
The refugees will be funded for the first year of their stay, with the money coming from Britain’s foreign aid budget.
More than 40 local authorities in Britain have said they are willing to offer sanctuary to Syrian refugees following a request from Labour leadership contender Yvette Cooper.
“The whole country has been deeply moved by the heart-breaking images we have seen over the past few days,” the Prime Minister added.
But he cautioned that Britain must “use our head and our heart” to address “the causes of the problem as well as the consequences” and pledged to “help to stabilise countries where the refugees are coming from”.
He said he would “seek a solution to the crisis in Syria, push for the formation of a new unity government in Libya and bust the criminal gangs.”
Charity Oxfam welcomed Cameron’s announcement, calling it an important first step.
“It will give much-needed respite to people fleeing horrors most of us can only imagine,” said Mark Goldring, Oxfam’s chief executive.
“This is a good step forward, but its far from job done.”
Britain has accepted 216 Syrian refugees over the past year and granted asylum to almost 5,000 Syrians since the conflict there broke out in 2011 — far fewer than countries like France, Germany and Sweden.
Britain opted out of a quota system for asylum seekers within the European Union despite growing calls in the EU for fairer distribution.
More than four million Syrians have fled the war.
Cameron said Britain had been working to “tackle the threat (of IS) at source” with British aircraft carrying out nearly 300 airstrikes over Iraq and conducting airborne surveillance missions over Syria.