How to use the Element entity

Do not is nest elements :

.ga-nav {
    &__menu {
        &__item { /* don't */
            /* output .ga-nav__menu__item */
        }
    }
}

It make our class name unnecessary long and it create a structure dependency. In the exemple case this is not such a problem, since item will always be a child of menu but consider the following exemple :

.ga-nav {
    &__right-column {
        &__search-form { /* don't */
            /* output .ga-nav__right-column__search-form */
        }
    }
}

Here we are tied to use the search-form inside the right column. If a change is required, the css need to be updated and this is a breaking change.

Instead do :

.ga-nav {
    &__menu {
        /* output .ga-nav__menu */
    }
    
    &__item { /* do */
        /* output .ga-nav__item */
    }
}

or :

.ga-nav {
    &__right-column {
        /* output .ga-nav__right-column */
    }
    &__search-form {
        /* output .ga-nav__search-form */
    }
}

Or if you really think that the class name require a reminder of the parent element :

.ga-nav {
    &__menu {
        /* output .ga-nav__menu */
    }
    
    &__menu-item { /* do */
        /* output .ga-nav__item */
    }
}

Last updated