Metodologías CSS
Tags: css, webdev, html, sass
Published: 2021-08-09 22:25:56

# Metodologías CSS 

Una de las cosas difíciles en el desarrollo web y programación en general es el nombramiento de las cosas y el nombramiento en CSS no es diferente.

Cuando trabajas en un proyecto pequeño el nombramiento no es una prioridad pero si es una buena practica, todo cambia cuando se convierte en un proyecto grande, entonces el nombramiento se vuelve primordial, mantener el rastro de todos los selectores se vuelve un caos sin una convención de nombres, usar alguna hará la tarea fácil.

El código se volverá sencillo de leer, mantener y modificar.


## ¿Qué es la convención de nombres?

Una convención de nombres es un conjunto de reglas para la elección de la secuencia de caracteres que se utilice para identificadores que denoten variables, tipos, funciones y otras entidades en el código fuente y la documentación.

Algunas de las razones para utilizar esta metodología son:
- Reducir el esfuerzo para leer y entender el código fuente.
- Mejorar la claridad y apariencia del código fuente.
- Ayuda a evitar conflictos de nombres.
- Mejora la comprensión en la reutilización de código.

[Ver en Wikipedia](https://es.wikipedia.org/wiki/Convención_de_nombres_(programación)) 

En lenguajes de programación como JavaScript se utilizan convenciones para nombrar variables, tipos, funciones y algunos otros, dependiendo el caso de uso es el tipo de convención que se utiliza.

En CSS se utiliza kebab-case, este es una convención bastante estándar en CSS, lo podemos ver incluso en las propiedades de los selectores.

```css
body { font-size: 16px; }
```

## Metodologías que puedes implementar

Los siguientes son convenciones de nombres que puedes usar:
- [BEM](#BEM)

### BEM

BEM (Bloque, Elemento, Modificador) tiene un enfoque en componentes en el desarrollo web. La idea de esta metodología es separar la interfaz de usuario dentro de bloques independientes. Esto hace el desarrollo de interfaces fácil y rápido incluso con una UI compleja y permite la reutilización de código creando pequeños componentes.

Estos son los 3 problemas que esta convención de nombres trata de resolver:

1. Saber lo que hace un selector con solo mirar su nombre.
2. Tener una idea donde puede ser usado un selector con solo mirarlo.
3. Saber la relación entre los nombres de las clases con solo mirarlas.


```HTML
<div class="card-post">
    <header class="card-post__header">
        <h1>Tittle Post</h1>
    </header>
    <div class="card-post__body card-post__body_hide">
        <p>Here should there some text.<p/>
    </div>
</div>
```
El bloque describe el propósito, el elemento compone una parte del bloque, separado con doble guión bajo `__` y el modificador define la apariencia separado por un solo guión bajo ` _ `.

#### Sintaxis

```CSS
.block__element_modifier { }
```
En la comunidad de BEM hay otra forma de separar el modificador con dos guiones `--`. 
```CSS
.block__element--modifier { }
```

Conoce más sobre [BEM](https://en.bem.info).

### SMACSS

SMACSS (Scalable and Modular Architecture for CSS) es una guía que estructura los estilos en categorías. Es una forma de examinar el proceso de diseño y adaptarlos a un pensamiento flexible. Esta metodología trata de documentar el diseño con un enfoque coherente para el desarrollo los estilos de un sitio.

Hay 5 tipos de categorías:
1. Base
2. Layout
3. Module
4. State
5. Theme

La idea de esta metodología es dividir código en categorías. El mayor propósito es codificar patrones para su reutilización.



Conoce más sobre [SMACSS](http://smacss.com).

### ITCSS

ITCSS representa un triangulo invertido de CSS y la principal filosofía es ayudarte a organizar los archivos CSS del proyecto de tal manera que des un mejor trato al global name-space, la cascada y los selector específicos.



Conoce más sobre [ITCSS](https://www.xfive.co/blog/itcss-scalable-maintainable-css-architecture/) mira  [como usarlo](https://dev.to/helleworld_/how-i-use-itcss-to-organize-my-sass-styles-1iec).

### OOCSS

OOCSS (Object-Oriented CSS) tiene el propósito de fomentar la reutilización de código y el fácil mantenimiento de las hojas de estilos.

OCSS se centra en dos principales principios:
- Separación de la estructura de la apariencia.
- Separar el contenedor del contenido.

Conoce más sobre [OOCSS](https://www.smashingmagazine.com/2011/12/an-introduction-to-object-oriented-css-oocss/).

### AMCSS, SUIT CSS & ACSS

Estas tres ultimas considero que es avanzado para principiantes. Pero si tienes curiosidad puedes pasar a visitarlos [AMCSS](https://amcss.github.io) , [SUIT CSS](https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md) [ACSS](https://acss.io).

#### Fuentes
[MDN](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Organizing)