The amount remaining when the value of all outputs in a transaction are subtracted from all inputs in a transaction is the transaction fee. The fee is paid to the miner who include that transaction in a block.
In Bitcoin this is based solely on transaction size, in Ethereum the fee is paid in gas and calculated based on contract code execution complexity.
Every computational step, or OPCODE requires a specific amount of gas (which is hardcoded). You pay for gas using ether. To determine the fee you pay you calculate: fee = gas limit * gas price
Users can set the gas price they are willing to pay and miners can set the minimum gas price they are willing to accept. This creates a dynamic market, which allows the ether "fee" to be dynamic and adopt to ether price swings.