Offrir is to give someone a present.
- Mes parents m'ont offert un stylo pour mon anniversaire.
It can also be used for non material things, for example :
In those two preceding sentences offrir could be replaced by proposer, offrir there implies the recipient may refuse whatever (help or friendship or other) they are being offered.
Donner is to give because you want this person to have something, you decide to do it whether the recipient wants it or not.
- Je donne mon sang régulièrement.3
- J'ai donné un de mes stylos à mon copain parce qu'il avait perdu le sien. 4
Theoretically you can refuse what is being offert, refusing what someone donne is more difficult, it can be considered as an offence.
But the limit between the two is sometimes very thin and a lot of people use donner instead of offrir and you might hear :
- Mes parents m'ont donné un stylo pour mon anniversaire.
Here an excerpt from a law firm's website:
Offrir ouvre liberté au bénéficiaire d’accepter ou pas, induit l’idée d’une mise à disposition, sans lien nécessaire avec la gratuité, plus prégnante dans l’acte de donner, sauf lorsqu’il est synonyme de remettre ou confier.
Donner éloigne le refus, qui serait perçu comme un sacrilège ou une discourtoisie. La donation a d’ailleurs une résonance juridique puisque emporte changement de propriétaire et mutation gracieuse dans les deux sens de cette souriante épithète.
1 He offered me his friendship.
2 He offered me his help.
3 I give blood regularly .
4 I gave my mate one of my pens because he'd lost his.