The fee is based on the transaction size, not on the amount of money being sent. Making a transaction works by spending money you've previously received; the Bitcoin client looks for unspent incoming transactions and links those together to form a new transaction that uses up the money from those old transactions.
If this number of input transactions is particularly large (for instance, if you've received a lot of very small amounts of money), this means that the transaction size becomes larger, making the required fee larger as well, since it is a bigger burden on the network. I believe some Bitcoin clients do have a tendency to try and use up small transactions first, which further contributes to creating larger transactions.
If the transaction you're trying to make is particularly small, the fee may seem disproportionally large. This is why Bitcoin is often not considered to be great for microtransactions.
According to the Bitcoin wiki, the fee used in the reference implementation (as of 0.8.2) is 0.0001 BTC per thousand bytes.
Of course, the specifics of calculating the fee depends on the client, and this is configurable in any decent client. I've gotten away in the past with using a fee of 0.