On Github nahuelsotelo / edu.css-project
Hola, soy Nahuel Sotelo
Frontend developer en Schibsted Spain y Profesor de la asignatura Programación Frontend en el Master de Diseño Web de Bau.
¿Por qué es importante cuidar el código y tener buenas prácticas?
Esto nos permitirá trabajar en una parte concreta de nuestra aplicación sin afectar al resto
Una guía de estilos:
Estas guías también van muy bien como herramienta de aprendizaje para ver cómo trabaja otra gente.
Existen herramientas que nos ayudarán a que todos los miembros del equipo sigan las pautas definidas.
El gráfico de especificidad es una representación de cómo se distribuye la misma a lo largo de una hoja de estilo.
Es recomendable que la especificidad vaya aumentando gradualmente, empezando con estilos más genéricos (selectores de elemento) y acabando con casos más específicos.
The Specificity Graph - Harry Roberts
Intentar mantener los selectores lo más cortos posibles (evitar nesting) nos ayudará a que nuestros componentes no estén atados a un contexto determinado y sean independientes del HTML.
/* Cuidado! */ #main-header nav ul > li .nav-link:first-child { ... } /* 0, 1, 2, 3 */ /* Mejor */ .MainNav-link--first { ... } /* 0, 0, 1, 0 */
Es recomendable centralizar los estilos en un ùnico fichero (main.css, style.css) que no contenga reglas, únicamente @import a otros ficheros.
Puede haber más de uno dependiendo las necesidades. Por ejemplo en una guía de estilos, si tenemos soporte para algun navegdor concreto o si tenemos estilos que sólo se cargan en una página.
Comentar sobre HTTP2.
Podemos encontrar varias arquitecturas en internet pero es importante conseguir una que se adapte a las necesidades de nuestro proyecto.
La clave está en tener claro la función de cada selector que utilicemos y ubicarlo en el archivo correspondiente.
7 carpetas, 1 archivo:
sass/ | |– base/ | |– _reset.scss | |– _typography.scss | ... | |– components/ | |– _buttons.scss | |– _carousel.scss | |– _cover.scss | |– _dropdown.scss | ... | |– layout/ | |– _navigation.scss | |– _grid.scss | |– _header.scss | |– _footer.scss | |– _sidebar.scss | |– _forms.scss | ... | |– pages/ | |– _home.scss | |– _contact.scss | ... | |– themes/ | |– _theme.scss | |– _admin.scss | ... | |– utils/ | |– _variables.scss | |– _functions.scss | |– _mixins.scss | |– _helpers.scss | |– vendors/ | |– _bootstrap.scss | |– _jquery-ui.scss | ... | | `– main.scss
base/
Es el punto de partida del proyecto (reset, tipografía, etc). Los selectores de esta carpeta tendrán una especificidad muy baja, probablemente la mayoría serán selectores de tipo.
layout/
Todo aquello referente al layout de nuestro sitio: grid, header, footer, sidebar, etc. Aquellos componentes que se repiten página a página.
components/
El core de nuestra web. Todos aquellos componentes reutilizables que utilizaremos a lo largo de nuestra web.
pages/
Estilos específicos para una página en concreto.
themes/
Si nuestro sitio tiene algun tipo de sistema de theming, podemos hacer uso de esta carpeta. En caso contrario puede omitirse.
utils/
Variables, funciones, mixins o cualquier otro tipo de helper. Lo normal es que los contenidos de esta carpeta no se compilen en el fichero .css.
vendors/
Estilos que no hemos creado nosotros: librerías como Bootstrap o estilos que acompañen algún plugin que estemos utilizando.
Recomendar el adaptar esta estructura a las necesidades de nuestro proyecto (enfoque Lean).
Comentar la arquitectura que estoy usando ahora (components / utils / vendors).
@import 'utils/variables'; @import 'utils/functions'; @import 'utils/mixins'; @import 'utils/placeholders'; @import 'vendors/bootstrap'; @import 'vendors/jquery-ui'; @import 'base/reset'; @import 'base/typography'; @import 'layout/navigation'; @import 'layout/grid'; @import 'layout/header'; @import 'layout/footer'; @import 'layout/sidebar'; @import 'layout/forms'; @import 'components/buttons'; @import 'components/carousel'; @import 'components/cover'; @import 'components/dropdown'; @import 'pages/home'; @import 'pages/contact'; @import 'themes/theme'; @import 'themes/admin';
Preguntas, dudas, comentarios a hola@nahuelsotelo.com