In a statement to MPs, the Prime Minister said the whole country had been deeply moved by 'heartbreaking' images of refugees fleeing for their lives.
The decision to open the doors to 20,000 people is double the 10,000 figure demanded by political opponents last week, but falls short of the 35,000 set to be accepted by Germany over the next two years.
The PM insisted that the UK stands ready to help those fleeing for their lives from the Assad regime and barbaric ISIS militants.
But he rejected calls from Brussels for Britain to accept a share of the tens of thousands of people already on European soil, warning any offer of help should not act as a 'magnet' for more to make the perilous sea crossing to reach safety.
Mr Cameron told MPs that children - and particularly orphans - would be prioritised under the new scheme.
He said: 'The whole country has been deeply moved by the heartbreaking images we've seen over the past few days.
'It’s absolutely right that Britain must fulfil its moral responsibility.
'We will accept thousands more under these existing schemes
'Given the scale of the crisis and the suffering of the Syrian people, we are proposing that Britain should accept 20,000 refugees over the course of this Parliament
'Britain will play its part alongside our European partners. But Britain is able to decide its own approach
'We will continue with our approach of taking refugees from the camps this provides refugees with a more direct and safe route to Europe rather than risking their lives.'
Mr Cameron's offer was welcomed by Labour's acting leader Harriet Harman, but criticised for not going far enough by a raft of MPs from opposition parties.
The 20,000 set to be given refuge in the UK over the next five years was compared to the 10,000 accepted by Germany last weekend alone.
Britain is already the biggest donor of humanitarian aid to the Syria crisis in the EU, second only to the United States globally.
Mr Cameron confirmed an extra £100million on top of £920million committed to date, meaning the UK has contributed more than Germany, Netherlands, France, Italy, Hungary, Austria and Poland combined.
He said Britain had provided 17 million food rations and said half of the new funding will go to children.
‘Without the aid to these camps the number risking the very dangerous trips to Europe would be very much higher,' Mr Cameron said.
In less than a week Downing Street has been forced into a major policy u-turn, after repeatedly refusing to drop its opposition to large numbers of people being given refuge in the UK.
The harrowing images of three-year-old Ayan Kurdi's body on a Turkish beach last week triggered a major public outcry and forced Mr Cameron into retreat.
Senior politicians including Labour's Yvette Cooper, Scottish First Minister Nicola Sturgeon and Green leader Natalie Bennett joined singer and campaigner Bob Geldof in offering to put up refugees in their own homes.
Some 2,000 people have said they would be willing to house Syrians in spare bedrooms, but council leaders have dismissed the idea as 'pie in the sky', insisting town halls need extra government funding to cope with any influx.
MPs returned to the House of Commons for the first time after their summer break today, with the issue of refugees dominating the agenda.
Mr Cameron has vowed to stand by his commitment to spend 0.7 per cent of GDP on international aid.
Read more HERE