SCSS dans Oro

Qu’est ce que le SCSS (et le SASS) ?

Ce sont des préprocesseurs CSS

Avec la version 3 de SASS, SCSS a été défini comme la syntaxe officielle.

La plus grande différence réside dans l’utilisation des crochets et des points-virgules.

  • SASS plus proche du Yaml niveau visuel
  • SCSS plus proche du CSS niveau visuel

Outil similaire : Less http://lesscss.org/ (basé sur du JS contrairement au Sass basé sur du Ruby)

1. Avantages/Inconvénients

Avantages Inconvénients
Plus de possibilités Le code doit être compilé
Code plus clair Résolution des erreurs difficiles
Frameworks étendus Effort d’apprentissage
Travail avec des mixins et des variables

2. Différences entre CSS et SCSS

Liste de fonctionnalités SCSS trés pratiques : https://sass-lang.com/documentation/at-rules

En voici quelqu’unes en détails.

2.1. Utilisation de variables

On peut déclarer des variables avec cette syntaxe :

$variable: value;

Exemples :

CSS

body{
    color: #ffffff;
    font: 'Ubuntu', 'Arial', 'Helvetica', sans-serif;
    font-size: 18px;
}

SCSS

$white: #ffffff;
$ubuntu-font: 'Ubuntu', 'Arial', 'Helvetica', sans-serif;
$md-font: 18px;

body{
    color: $white;
    font: $ubuntu-font;
    font-size: $md-font;
}

Trés pratique pour les couleurs, taille de typo, les fonts mais aussi pour les points de ruptures pour le responsive :

$sm-font: 14px;
$md-font: 18px;
$xl-font: 22px;

$grid--breakpoint-sm: 480px;
$grid--breakpoint-md: 768px;
$grid--breakpoint-lg: 1024px;

@media (max-width: $grid--breakpoint-sm) {
    body {
        font-size: $sm-font;
    }
}

Attention on peut utiliser uniquement les variables déclarés dans le fichiers courants (sauf si on utilise des imports).

2.2. Utilisation des imports

Possibilité d’importer des fichiers SASS :

@import 'components/page-container';
@import 'components/page-header';
@import 'components/page-content';
@import 'components/page-footer';
@import 'components/page-title';

Exemple concret :

_variables.scss

$sm-font: 14px;
$md-font: 18px;
$xl-font: 22px;

style.scss

@import 'variables';
   
body {
    font-size: $sm-font;
}

avec ces 2 fichiers au même niveau.

2.3. Utilisation de mixins

Pour simplifier et éviter de répéter tout le temps les mêmes lignes, on peut créer des mixins :

Mixin simple

@mixin reset-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

nav ul {
  @include reset-list;
}

Mixin avec variables

@mixin box-shadow($left, $top, $radius, $color) {
    box-shadow: $left $top $radius $color;
    -webkit-box-shadow: $left $top $radius $color;
    -moz-box-shadow: $left $top $radius $color;
}

input {
    @include box-shadow(10px 5px 5px red);
}

2.4. Méthodologie BEM

BEM = une convention CSS qui va nous aider à rendre nos classes plus compréhensibles, et ce grâce au nommage.

  • Bloc
  • Elément
  • Modificateur

Exemple :

SCSS

.block{
    background: #000;

    .block__element {
      color: #fff;
    }
}

CSS généré

.block {
    background: #000;
}
.block .block__element {
    color: #fff;
}

SCSS avec méthodologie BEM

.block {
    background-color: #000;

    &__element {
        color: #fff;
    }
}

CSS généré

.block {
    background: #000;
}
.block__element {
    color: #fff;
}

Ressources externes pour avoir plus d’informations sur la méthodologie BEM :

2. Dans Oro

Documentation officiele pour l’usage front : https://doc.oroinc.com/frontend/storefront/css/

2.1. Utilisation et déclaration

Exemple d’un usage simple pour ajouter des assets .Scss pour le front :

Dans le fichier src/AppBundle/Resources/views/layouts/montheme/config/assets.yml

styles:
    inputs:
        - 'bundles/app/montheme/scss/settings/global-settings.scss'
        - 'bundles/app/montheme/scss/variables/base-config.scss'
        - 'bundles/app/montheme/scss/variables/page-header-config.scss'
        - 'bundles/app/montheme/scss/variables/page-content-config.scss'
        - 'bundles/app/montheme/scss/variables/page-footer-config.scss'
        - 'bundles/app/montheme/scss/styles.scss'
    filters: ['cssrewrite', 'cssmin']
    output: 'css/styles.css'

L’option filters est optionnel.

NOTE Dans la partie inputs, il faut renseigner l’emplacement du fichier dans le répertoire /public/ Visible une fois avoir lancer la commande bin/console assets:install.

2.2. Commandes SF et Oro

Source : https://doc.oroinc.com/backend/bundles/platform/AssetBundle/

bin/console oro:assets:build : cette command lance webpack pour construire les assets. (et donc compiler le SCSS en CSS)

  • En mode dév., la commande créé les ressources sans minification et avec les fichiers sources.
  • En mode production, les ressources sont minifiées et n’incluent pas les fichiers sources.

Use Commands

oro:assets:build [-w|–watch] [-i|–npm-install] [–] []

oro:assets:build admin.oro to build assets only for the default management-console theme called admin.oro

oro:assets:build default --watch to build assets only for the blank theme with enabled watch mode

oro:assets:build default -skip-js to build assets without JS

NOTE Lorsque vous utilisez le mode “Watch” après avoir modifié la configuration dans le fichier assets.yml, il est nécessaire de redémarrer la commande ; sinon, il ne détectera pas les changements.