I just started doing web-development a few months ago. I know HTML and know how to markup a page to be semantically correct (no using tables for layouts, using the new semantic elements from HTML5 correctly, etc). I try to adhere to W3C design recommendations. However, I'm having trouble writing "good" CSS.
I know about using efficient selectors such as the child selector instead of the descendant selector and so forth. My problem is that I feel my CSS doesn't match up with my markup's semantic. CSS is supposed to be reusable, meaning that the same class can be used for multiple elements on multiple pages. But the CSS classes that I write only apply to a few elements (often on only one page) and are never used again. I'm often writing the same styles, but with small changes, for many classes. This goes against the DRY principle of development.
Am I not using CSS to its fullest potential? What are some ways of making my styles reusable without doing stuff like .right-align { } .blue-text { }
?