Hi
Skins are like templates for server-side web controls. They let you assign default values to any 'themeable' control property, including non-style properties. For example you might define a button in your skin as:
<asp:Button runat="server" BackColor="ButtonFace" Text="Default Button Label" />
Where as CSS lets you add style at the HTML level, e.g.
input { background-color:red; }
To work out the precedence of CSS and skin styles, look at how they get rendered and consider that inline CSS styles always override external CSS styleseets.
The Button control above will render as:
<input id="Button1" type="submit" style="background-color: buttonface;" value="Default Button Label" name="Button1"/>
So the background colour defined in the skin overrides the CSS, because the skin is rendered as an inline CSS style.
There are so many places you can apply styles: inline CSS styles, external CSS stylesheets, inline CSS stylesheets, control properties, skins from Themes, skins from StyleSheetThemes, and even JavaScript. If you used all these techniques it'd be impossible to keep track, so choose the approach that works best for you and stick with it.
I like to use external CSS stylesheets for nearly all layout and styling, and occasionally skins if I need to set defaults for control properties that aren't configurable from CSS, maybe like GridView.AlternatingRowStyle.
Chris