I really like Angular's approach with ViewEncapsulation. The native option creates a Shadow DOM; which isn't widely supported yet. The emulated option creates a unique attribute that is attached to everything associated with that component/directive. This is a good article to read on the subject
A good way to avoid class collisions would be to use the BEM CSS class naming convention.