Vemos que los esquemas de lo que clásicamente se han considerado “buenas practicas” de css resulta que no lo son siempre ni para todo el mundo y hay sangrientas peleas entre hermanos del frontend acerca de si es mejor añadir una clase al html o poner un selector en el css. Dios nos dio el poder de resolver un problema con css de mil formas distintas y se nos ha ido de las manos 🙂
Hemos visto una forma de estructurar el css (Smacss) y tres metodologias para la nomenclatura/organización de las clases (BEM, DRY, Atomic).
Estas metodologias sirven para solucionar con distintas estrategias una serie de problemas que da el css al escalar, basicamente:
- Guerras de especificidad
- Herencias no deseadas
- Ligazon html-css
Desde mi punto de vista, si no tienes estos problemas, tu proyecto es pequeño, etc. quizá es mejor no utilizar ninguna y seguir las practicas clásicas, ya que cada metodología tiene sus inconvenientes acarreados. Planificando bien no debería uno tener ningún problema de los anteriores, es más, la herencia y especificidad pueden jugar a tu favor.
Otra cosa es un proyecto con mil y pico archivos scss y 94 developers como he leido que tiene Linkedin, eso no hay planificación previa que lo organice y ahi si que traerá ventajas adoptar un sistema de nomenclatura u otro.
¿Mejor añadir clases al html o selectores al css? ¿Tengo libre acceso al html? ¿lo tengo al css?¿Voy a usar preprocesadores? ¿somos un equipo pequeño o grande?
En función de las respuestas se elige uno, o ninguno y se adopta un mix de soluciones.
¿Tengo que compartir un único css entre muchos sitios con distintos htmls?
Quizá ATOMIC
¿Tengo que compartir un único html entre muchos sitios con distintos css sin acceso al html?
Quizá DRY
¿Tengo que mantener un sitio muy complejo con varios developers trabajando en el html/css ?
Quiza BEM
Todos los sistemas son un punto de compromiso distinto entre las distintas opciones que nos planteamos al hacer un css y las dos principales vias de ligar css y html:
-Clases semánticas acerca del contenido (.autor_bio), el CSS depende del HTML.
El HTML es “reestilable” sin tocarlo, pero el css no se puede reutilizar. (EJ: CSS Zen Garden)
-Clases semanticas acerca del diseño (.white_panel”), el HTML depende del CSS. El CSS es reutilizable pero el html no se puede reestilar sin tocarlo. (Bootstrap)
Aquí esta la experiencia de un hombre que conforme el proyecto creia se encontró con el problema que yo temo de BEM (entre otros), hay que hacer cientos de clases muy parecidas, acabo así:
https://medium.engineering/simple-style-sheets-c3b588867899
After more thought and some experimentation, we found a middle way: get rid of modifiers, leave non-atomic CSS only for low-level interface components (buttons, links, lists, and so on) and have the rest use these very specific atomic classes.
Al final esta es la via, tomar de cada sistema lo que a uno le interese cuando le interese. Nos podemos quedar con la jerarquia de css paralela que propone BEM, con el uso avanzado de grupos de DRY, con las utility class de Atomic y montar un sistema mixto adaptado a lo que se necesite.