Tabla de Contenidos

16. Sistema de diseño: Estructura de carpetas

Vamos finalmente a unificar todo y crear la arquitectura definitiva que vamos a usar en clase. La carpeta del SASS es la misma con Angular y sin él; lo que cambia es dónde va y cómo se compila.

Para crear una buena arquitectura vamos a hacer lo siguiente:

Si el proyecto es HTML, CSS y JavaScript sin Angular, ver Proyecto sin Angular.

En un proyecto Angular la estructura queda así:

src/app/scss
    /01_utilities
    /02_base
    /03_global
    /04_components
    main.scss
src/app/components/ui
    /c-boton
    /c-panel
src/app/components/paginas
   /main
   /productos
   /login

Indicar a Angular que el proyecto es en Español

Véase: establecer_el_idioma_y_moneda

Usar Angular Material

Véase: anadir_angular_material

Crear el CSS común a todo el proyecto

Se tiene que crear la carpeta src/app/scss donde irá todo nuestro SASS. El fichero que contendrá todo el SASS es src/app/scss/main.scss

En el fichero styles.scss añadir la linea siguiente para que Angular sepa donde está nuestro SASS:

@use './app/scss/main.scss' as *;

Dentro de la carpeta src/app/scss , habrá la siguiente estructura de ficheros:

  src/app/scss
     /01_utilities
        _variables.scss
        _functions.scss
        _mixins.scss
        _index.scss

    /02_base
        _tokens.scss
        _reset.scss
        _typography.scss
        _index.scss


    /03_global
        _cada_uno_de_los_modificadores_globales.scss
        _index.scss


    /04_components
        _cada_uno_de_los_componentes.scss
        _index.scss        

         
    main.scss

La explicación de cada carpeta es la siguiente:

@forward "./_variables.scss";
@forward "./_functions.scss";
@forward "./_mixins.scss";

@forward "./_tokens.scss";
@forward "./_reset.scss";
@forward "./_typography.scss";

@forward "./_g--color.scss";
@forward "./_g--font-size.scss";
@forward "./_g--margin.scss";
@forward "./_g--padding.scss";

@forward "./_c-boton.scss";
@forward "./_c-panel.scss";
@forward "./_l-columns.scss";
@forward "./_l-flex.scss";

@forward "./02_base";
@forward "./03_global";
@forward "./04_components";

Dentro de cada fichero .scss que use algo de las utilidades (variables, funciones o mixins de SASS) se añadirá la referencia a las utilidades con la siguiente linea:

@use "../01_utilities/index" as utilidades;

Al crear el CSS/SASS es importante seguir las directrices de:

Crear los Componentes reusables de Angular

Ahora hay que crear la carpeta donde estarán nuestros componentes de Angular. Para ello crearemos la carpeta src/app/components/ui. En esta carpeta deben estar todos los componentes reusables por toda la aplicación.

  src/app/components/ui
     /c-boton
        c-boton.ts
        c-boton.html
        c-boton.scss

    /c-panel
        c-panel.ts
        c-panel.html
        c-panel.scss
       
    /l-flex
        l-flex.ts
        l-flex.html
        l-flex.scss        
        

Para crear el SCSS se seguirán las mismas normas que al crear el SCSS común a todo el proyecto.

Más información en:

Notar la diferencia por ejemplo entre el fichero src/app/scss/04_components/_l-flex.scss y la carpeta src/app/components/ui/l-flex
  • src/app/scss/04_components/_l-flex.scss: Estamos creando clases CSS para flex
  • src/app/components/ui/l-flex: Estamos creando componentes o atributos Angular para flex

Lo normal es que esté uno o el otro. Lo mismo se podría aplicar a cualquier otro layout o componentes como c-boton.

Crear las páginas del proyecto

Finalmente en la carpeta src/app/components/paginas, añadiremos todos los componentes específicos de la aplicación. Aquí es donde se hace uso de los distintos elementos reusables que creamos en src/app/components/ui

Proyecto sin Angular

En un proyecto de HTML, CSS y JavaScript sin Angular la carpeta scss es exactamente la misma, pero va en la raíz del proyecto. No hay components/ui: todos los componentes son ficheros de scss/04_components.

proyecto
├─ scss
│   ├─ 01_utilities
│   ├─ 02_base
│   ├─ 03_global
│   ├─ 04_components
│   │   ├─ _c-boton.scss
│   │   ├─ _c-panel.scss
│   │   └─ _index.scss
│   └─ main.scss
├─ css
│   └─ main.css         <- lo genera SASS, no se toca
├─ js
│   └─ main.js
├─ index.html
└─ productos.html

npm install --save-dev sass

npx sass --watch scss:css

<link rel="stylesheet" href="css/main.css">

El navegador no entiende SASS: enlazar scss/main.scss no aplica ningún estilo. Y css/main.css no se edita a mano, porque la siguiente compilación lo sobrescribe y se pierde lo que hayas cambiado.