actually, if you have private keys to all the inputs you're spending, you can do the signing entirely off line.
That's correct and to add a bit more details to this answer, you can sign all the inputs offline and serialize the transaction into hex and then push the transaction through an API like
https://blockchain.info/pushtx (a post request sends the raw transaction) or send it through the bitcoind JSON RPC "sendrawtransaction" (
https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list)