So many metaphors in these answers :-D
When you write your code for different projects, you try to avoid repeating the same thing again and again - so you write them once and reuse this code as a module. Or - if someone, somewhere already did it - you borrow another person's code and use it. That's what we call libraries: simple code for a group of typical exercises. There are libraries for mathematical calculations, for database operations and so on. So again:
When you make bigger and bigger projects, you would like to use not only well-written, specific code libraries but other tools too. You want the best libraries in a pack, a whole environment, maybe even use it by several different languages. A framework usually provide:
Examples:
Controversies: Definition of 'framework' is not really strict. My examples were extreme, there are many in between. There are huge libraries which are called frameworks by professionals or their creators, because they are so big, they are to organize whole projects, or simply for marketing reasons. The best you can do is to handle them as libraries except if there is a very good reason to accept they are something more.