Skip to content

Instantly share code, notes, and snippets.

@20manas
Created September 26, 2023 08:43
Show Gist options
  • Save 20manas/db6484c512a813a9ba56a3618bf43689 to your computer and use it in GitHub Desktop.
Save 20manas/db6484c512a813a9ba56a3618bf43689 to your computer and use it in GitHub Desktop.
Modern CSS Naming Scheme: Namespace-Element-Variant with SCSS modules

Namespace-Element-Variant (NEV) naming scheme

Component.module.scss

.Namespace {
  &._firstElement {
    display: flex;

    &.__firstVariant {
      background-color: green;
    }

    &.__secondVariant {
      background-color: blue;
    }
  }

  &._secondElement {
    width: 400px;
    height: 400px;
  }
}

.anotherElement {
  width: 600px;

  &.__firstVariant {
    color: red;
  }

  &.__secondVariant {
    color: pink;
  }
}

Component.tsx

import s from './Component.module.scss' 
import clsx from 'clsx';

const Component = () => {
  const isFirstVariant = /* ... */;

  return (<>
    <article className={clsx(s.Namespace, s._firstElement, isFirstVariant ? s.__firstVariant: s.__secondVariant)}>
      <h2 className={clsx(s.Namespace, s._secondElement)}>Article Heading</h2>
    </article>
    <aside className={clsx(s.anotherElement, isFirstVariant ? s.__firstVariant : s.__secondVariant)}>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit
    </aside>
  </>);
}

export default Component;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment