Mois : septembre 2014

[CSS][jQuery] Un menu déroulant fondé sur flexbox (modèle tabulaire en fallback IE9-) et un sous-niveau centré horizontalement avec outerWidth

Avant de mettre en place cette solution, voir en bas de page les contraintes et choses restant à améliorer !!

Simulation : Menu déroulant Flexbox.

Pré-requis :

  • Le premier niveau doit occuper 100% de l’espace disponible en largeur,
  • les libellés de premier niveau ne doivent pas occuper un espace à largeur fixe (chaque libellé à une largeur en fonction de sa longueur),
  • les espaces entre les libellés de premier niveau doivent être strictement identiques,
  • les sous-niveau doivent être centrés horizontalement sur l’axe médian libellé de premier niveau > sous-niveau,
  • compatibilité navigateurs avec prise en charge ciblée des différents états de la spécification de Flexbox (ancienne et nouvelle) et fallback IE10-.

dropdown-flexbox

Quelques aspects techniques :

Remarques importantes pour la compatibilité cross-browsers :

  • Pour effectuer le switch entre vieille et nouvelle spécification Flexbox, les styles ont été déclarés dans l’ordre suivant :
    • 1. les propriétés propres à l’ancienne spécification avec les préfixes -webkit, -moz, -o, et sans préfixe :
    • 2. les propriétés propres à la nouvelle spécification avec un suffixe !important.
  • Ciblage CSS IE9, IE8 obtenu avec la mise en place de commentaires conditionnels dans la balise head de la page et de classes .ie8, .ie9 dans la CSS :

  • Ciblage CSS IE10 obtenu avec la mise en place de la méthode décrite ici : IE 10 Specific Styles.

Code jQuery à exécuter pour centrer les sous-menu par rapport aux largeurs des premiers niveaux

Cas particuliers et adaptation de code à apporter :

Dans le cas où les sous-menus ne sont pas correctement centrés par rapport à l’axe médian, lancer le bout de code jQuery seulement après que la page se soit entièrement chargée :

…ou mieux (sans le bind) :

Remarque à propos de la gestion des paddings par jQuery (notamment sous Chrome) : pour une raison obscure, la valeur du padding (+ 12 dans le calcul de la valeur servant à aligner le sous-menu sur l’axe médian du libellé de premier niveau) concourt à obtenir un alignement correct dans la simulation effectuée par le biais de JSFiddle, mais il a fallu la supprimer dans un autre cas de figure rencontré…

Décalage du sous-menu sous Chrome – appliquer la solution ci dessous :

Fallback IE9- en jQuery

Polyfill IE9- (non-testé – nécessite Selectivizr) : Flexie.js.

A améliorer : l’alignement vertical des libellés de 1er niveau n’est pas géré.

[RBS Change v3.x] Afficher différentes vues d’un bloc en éditant le fichier /lib/blocks/_nom_du_bloc_Action.class.php

Dans l’arborescence des fichiers, se rendre à la racine du répertoire du module qui contient le bloc pour lequel on souhaite créer et afficher une nouvelle vue en front (dans notre exemple, le bloc en question s’appelle ‘_nom_du_bloc_-Block-SubscriptionFooter-Success.all.all.html’).

Dupliquer ce fichier et le renommer en ‘_nom_du_bloc_-Block-SubscriptionFooter-Toto.all.all.html’. Nous venons de remplacer le suffixe ‘-Success’ par ‘-Toto’.

Se rendre dans le répertoire /lib/blocks/ et ouvrir le fichier se terminant par ‘Action.class.php’ et dont le libellé correspond au nom du bloc dont on souhaite tester une vue supplémentaire.

Repérer la ligne qui contient :

La remplacer par :

C’est désormais le bloc portant le suffixe ‘-Toto’ qui sera affiché en front.

Remarque : Cette astuce n’est valable que pour tester l’affichage d’une vue supplémentaire d’un bloc en front.

[jQuery] [CSS] Une bordure CSS derrière un titre

Nouvelle méthode (nécessite le jQuery de l’ancienne méthode) :

Ancienne méthode :

Sources : CSS line behind title text, Wrap all text before first
tag within an

cibler_texte_avant-1er_element

Problème : scanner le contenu se trouvant entre les balises ouvrante et fermante de titre, repérer le premier retour chariot et imbriquer tout le texte se trouvant avant celui-ci dans une nouvelle balise.

Avant exécution du jQuery :

Après exécution du jQuery :

Solution :

jQuery :

CSS :