Bonjour à tous,

Actuellement entrain de développer la partie galerie d'images de mon projet, j'ai mis en place une personnalisation des propriétés css de la part de l'utilisateur en utilisant des variables css, tout fonctionne bien , cependant j'aimerai savoir :

1/ Peut-on simplifier le code js ci-dessous en créant des classes (et cela vaut il le coup ?)
2/ Quelles sont les meilleures pratiques concernant l'initialisation des variables css qui seront lues depuis la bdd, faut-il utiliser le cache navigateur ? si oui, comment ?
3/ N'existe t'il pas une meilleure méthode que du style inline sur chacun des éléments html pour le render dans Twig ex: <div class="galerie"style="background-color:{{galerie.primarybackgroundcolor}}">?

Actuellement je stocke les variables une par une en tant que colonnes dans la bdd par rapport à leur entité, n'existe t'il pas / ne serait il pas préférable d'utiliser une méthode permettant de stocker carrément une liste de propriétés css en une seule fois ?.

Merci d'avance pour votre expertise

galerie.js :

window.onload = () => {
  //Changer la largeur de la galerie
  const inputGalleryWidth = document.querySelector("#galeries_gallery_width");
  inputGalleryWidth.addEventListener("change", () => {
    let width = inputGalleryWidth.value;
    document.documentElement.style.setProperty("--gallery-width", `${width}%`);
  });

  //Changer la couleur de fond d'une galerie d'images
  const inputGalleryPrimaryBackgroundColor = document.querySelector(
    "#galeries_primary_background_color"
  );
  inputGalleryPrimaryBackgroundColor.addEventListener("input", () => {
    let color = inputGalleryPrimaryBackgroundColor.value;
    document.documentElement.style.setProperty(
      "--gallery-primary-background-color",
      color
    );
  });

  //Changer le border-radius des images
  const inputImagesBorderRadius = document.querySelector(
    "#galeries_images_border_radius"
  );
  inputImagesBorderRadius.addEventListener("change", () => {
    let borderRadius = inputImagesBorderRadius.value;
    document.documentElement.style.setProperty(
      "--images-border-radius",
      `${borderRadius}%`
    );
  });

  //Changer l'espacement des images
  const inputGalleryGap = document.querySelector("#galeries_gallery_gap");
  inputGalleryGap.addEventListener("change", () => {
    let gap = inputGalleryGap.value;
    document.documentElement.style.setProperty("--gallery-gap", `${gap}px`);
  });
  //Changer l'épaisseur du bord des images
  const inputImagesBorderWidth = document.querySelector(
    "#galeries_images_border_width"
  );
  inputImagesBorderWidth.addEventListener("change", () => {
    let borderWidth = inputImagesBorderWidth.value;
    document.documentElement.style.setProperty(
      "--images-border-width",
      `${borderWidth}px solid #fff`
    );
  });
  //Choisir le nombre de colonnes
  const inputColumns = document.querySelector("#galeries_gallery_max_columns");
  inputColumns.addEventListener("change", () => {
    let maxColumns = inputColumns.value;
    document.documentElement.style.setProperty(
      "--gallery-max-columns",
      `${maxColumns}`
    );
  });
  //Choisir la hauteur de la galerie
  const inputGalleryHeight = document.querySelector("#galeries_gallery_height");
  inputGalleryHeight.addEventListener("change", () => {
    let maxGalleryHeight = inputGalleryHeight.value;
    document.documentElement.style.setProperty(
      "--gallery-height",
      `${maxGalleryHeight}px`
    );
  });
  //Changer l'ombre de l'image
  const inputImageShadow = document.querySelector("#galeries_images_shadow");
  inputImageShadow.addEventListener("change", () => {
    let imgShadow = inputImageShadow.value;
    console.log(imgShadow);
    document.documentElement.style.setProperty(
      "--images-shadow",
      `${imgShadow}px ${imgShadow}px ${imgShadow}px darkgray`
    );
  });
};

1 réponse


Bonjour,

1/ Peut-on simplifier le code js ci-dessous en créant des classes (et cela vaut il le coup ?)
=> si tu n'a que ce code là côté JS, pas d'intéret, sinon, oui on peut modulariser le code JS et le répartire dans plusieurs fichiers en passant par des systèmes comme Webpack par exemple;

2 / Quelles sont les meilleures pratiques concernant l'initialisation des variables css qui seront lues depuis la bdd, faut-il utiliser le cache navigateur ? si oui, comment ?
=> si tu veux que l'utilisateur récupère son paramétrage quelqu'en soit l'appareil ou le navigateur qu'il utilise, alors oui il faut stocker le paramétrage côté backend, sinon, il faut utiliser le localStorage;

3/ N'existe t'il pas une meilleure méthode que du style inline sur chacun des éléments html pour le render dans Twig ?
=> générer du CSS dans une balise <style> insérée dans la <head>;

Actuellement je stocke les variables une par une en tant que colonnes dans la bdd par rapport à leur entité, n'existe t'il pas / ne serait il pas préférable d'utiliser une méthode permettant de stocker carrément une liste de propriétés css en une seule fois ?
=> effectivement, il ne parrait pas légitime de faire une colonne en bdd pour chaque propriété CSS, cela complique la maintenance de la base, il vaudrait mieux, de mon point de vuen passer par une seule colonne qui gère tous les styles et utiliser un objet JSON;