Skip to content

Instantly share code, notes, and snippets.

@anareyna
Last active October 19, 2018 06:21
Show Gist options
  • Save anareyna/26f38221ac5b9cfd11bb2800faa235c2 to your computer and use it in GitHub Desktop.
Save anareyna/26f38221ac5b9cfd11bb2800faa235c2 to your computer and use it in GitHub Desktop.

Neoauto: Nombramiento de clases

Para el nombramiento de clases se utiliza BEM (Bloque, elemento, modificador) en combinación de prefijos que ayudan a identificar el rol del elemento en todo el sitio.

Se siguen los lineamientos de diseño atómico (Atomic design) y la estructura basada en https://github.com/anareyna/atomic-starter

Prefijos a utilizar:

  • e (elemento)

Puede ser un botón, un input, un encabezado. Se repite potencialmente en todo el sitio, no puede dividirse y por lo general se asocia a un tag HTML (button, input, a)

  • c (componente)

Se combinan elementos para formar componentes que tienen su propia funcionalidad y pueden ser reutilizables en otras partes del sitio. Ejm: Un widget, Una barra de navegación, Un buscador.

  • s (section)

Sirven para formar estructuras que pueden combinar elementos y componentes. Separan secciones de una interfaz. Ejm: Un header, un footer, una seccion de blog, etc.

  • p (página)

Para estilos específicos de páginas. Por lo general debe evitarse su uso. Debe declarse en la etiqueta body .

  • u (utilitario)

Deben estar definidos en su propia hoja de estilos. Son las únicas clases que pueden contener la palabra clave !important para sobreescribir cualquier otro estilo de ser necesario. Una vez definida la clase utilitaria no debe ser cambiada para evitar comportamientos extraños en el sitio.

  • js (javascript)

Los elementos que deben enlazarse a alguna funcionalidad con javascript deben tener una clase especial para no afectar a futuros cambios en la estructura html o css del sitio.

Estándar BEM:

  • La separación de palabras compuestas se hace con un guión (-) Ejm. .c-widget-dashboard
  • La separación de bloque y elemento con dos guiones bajos (__) Ejm. .c-nav__link
  • La separación de modificador con dos guiones (--) Ejm. .e-btn .e-btn--small

Ejemplos de BEM + prefijos:

.e-btn, .e-btn--large
.c-nav, .c-nav__link
.s-header
.p-home
.u-hidden, .u-text-center
.js-modal

Uso del (__elemento) en Bloque__elemento--modificador

Los elementos deben estar al último nivel (no ser contenedores de otros elementos html)

div.c-message
  span.c-message__icon  // No es contenedor (Último nivel) por eso tiene elemento __icon
  h3.c-message__text
div.c-login
  header.c-login-header // Contiene a h1 por eso no tiene elemento en su nombre
    h1.c-login__title Bienvenido

Hoja de estilos (Stylus)

  • Evitar indentaciones innecesarias
  • Separar los media queries en diferentes secciones
  • Escribir el nombre completo de las clases en BEM (evitar la referencia al padre con &), esto facilita la búsqueda de clases al momento de depuración de estilos.
// incorrecto
.s-header
    color black
    &__title
        color blue

// correcto
.s-header
    color black
.s-header__title
    color blue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment