Don’t Use Adjoining Classes Css

CSS Programming

Hey there, fellow web developers! Today, I want to dive into a topic that has been on my mind for quite some time – the use of adjoining classes in CSS. Now, I know that some of you may be fans of this technique, but I strongly believe that it’s best to avoid using adjoining classes. Let me explain why.

The Problem with Adjoining Classes

Adjoining classes, also known as “cascading selectors” or “compound selectors,” allow you to target elements that have multiple classes applied to them without any separation. For example, if you have an HTML element with classes “btn” and “primary,” you can select it using the selector “.btn.primary”. This seems convenient at first, but it can quickly lead to messy and hard-to-maintain code.

One of the main issues with adjoining classes is specificity. When you use a selector like “.btn.primary”, it becomes more specific than just using “.btn” or “.primary” individually. This can cause unexpected CSS conflicts and make it difficult to override styles when needed. As a result, you may find yourself adding more and more specific selectors in an attempt to fix styling issues, leading to a bloated and convoluted CSS file.

Another problem with adjoining classes is that they can make your code less readable and maintainable. When you apply multiple classes to an element without any separation, it becomes harder to understand the purpose of each class and how they interact with each other. This can make it more challenging for other developers (including future you!) to work with your codebase.

A Better Approach: Using Modifier Classes

Instead of relying on adjoining classes, I recommend using modifier classes to define different variations of a component or element. Modifier classes are prefixed with a specific naming convention, such as “-modifier” or “–modifier”, making them easily distinguishable from regular classes.

By using modifier classes, you can create more flexible and maintainable CSS. For example, instead of using “.btn.primary” to style a primary button, you can use “.btn” as the base class and add a separate “.btn-primary” class as a modifier. This separates the concerns and allows you to modify the button’s style without affecting other elements.

Here’s an example of how you could structure your CSS using modifier classes:

.btn {
/* Base button styles */

.btn-primary {
/* Styles for primary button */

.btn-danger {
/* Styles for danger button */

By adopting this approach, you can easily extend your styles and create new variations without cluttering your CSS file with specific selectors.


While the allure of adjoining classes may be tempting, it’s essential to consider the long-term implications on code maintainability and readability. By avoiding the use of adjoining classes and opting for modifier classes instead, you can create a more modular and scalable CSS architecture.

Remember, keeping your code clean and maintainable not only makes your life easier but also benefits the entire development team. So, next time you’re tempted to use adjoining classes, think twice and consider the alternative approach I’ve presented here.

Happy coding!