I give them a Project proposal (In detail, what they will get)
For the project proposal, I write a ToDo list (in detail of every step I need to do to complete the site, detailing how long each step will take) for my own reference.
I keep giving them these proposals until they say "Yeah that sounds good", then they agree on that, I have the hours, multiply it by however much you're charging per hour and add expenses (petrol etc). Then that proposal becomes the final spec, which I send them with final costing details and stuff.
So then they've put in an order for what I've written on the document, anything different to (or on top of) the specification will cost them money

Will also mean they can't fleece you - when you finish the site, if they say it's not how they wanted it, you can just point to the specification and say "Well it's what you ordered". It's not nice and of course for a good client you'd change a few bits at the end, but it gives you some standing if they start pushing you about too much.
Hardest part of any website is telling them the cost IMO... it's a right toss up between how much you think they're willing to pay, and how much you're willing to work for.