Good question Woodlands. We get asked this alot in our neck of the woods.
Our answers are always based on the following:
1. What level of knowledge do you currently have?
2. What level do you aspire to achieve?
3. What are you going to be doing once you learn what you are after?
We can usually steer people towards the right line of learning once we know those things. However, there are some basic starting books we consider mandatory reading for all our new hires:
Designing With Web Standards – Jeffrey Zeldman
Eric Meyer on CSS – Eric Meyer
Don’t Make Me Think – Steve Krugg
Defensive Design For The Web – 37 signals
Dom Scripting – Jeremy Keith (for when you want to tackle JavaScript)
If you only read one of the above, DWWS by Zeldman will give you a great perspective on where the web has come since 1995 (back when I started) so that you will have some ideas of why things are getting better. You should be able to get your local library to find you copies of most of those books, or you can pick them up used at any tech book store or Amazon.
As for “free” online resources:
If you are just starting out:
http://www.htmldog.com/ – good beginner tutorials
http://w3school.com/ – as mentioned above, it goes from beginning to medium in level
http://www.sitepoint.com – some decent tutorials on everything web related, but the message forums there are friendly
Other than that, look at code. View source everywhere you go. When we have students working in our office, we are always watching to see how they learn. The ones that are always looking under the hood of the sites they visit are usually the ones we want to hire (or be worried about stealing our jobs) because they tend to want to learn.
Hope some of this helps. Web development is both a great hobby and a great industry. Just remember to have fun!