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