Eventually we’ll see the day when we can purely use HTML5 and CSS3 and have no fear that anyone who actively browses the web will have such an ancient client that they can’t see what we’ve intended. Unfortunately that day isn’t today, so we still need to have options for HTML4 and CSS2 clients, as well as those with partial support.
There are quite a few tools to help with providing functionality to behind-the-times browsers. One great one is Webshims Lib. It simulates support of many HTML5 features in browsers that don’t support them natively. The great thing about Webshims is that you can include it and then code as if every browser fully supports HTML5, and it will fill in the blanks in almost every situation. This allows for much more rapid development than custom-coding fallback solutions every time.
For ensuring cross-browser consistency (as much as possible) in viewing these elements that may or may not be natively supported, HTML5 Reset is a great start. You’ll probably need to customize it to your specific needs, but it’s an excellent starting point that prevents you from forgetting simple things like ensuring that all browsers render as a block element, and consistent spacing for <p>, <ul>, etc.
As for CSS, my current practice is (with the help of modernizr) to use images or solid-color fallbacks for browsers that don’t support border-image, linear-gradient, radial-gradient, multiple backgrounds, box-shadow, etc.