Idéal pour répartir des blocs sur plusieurs colonnes "responsives"

🆙 flexauto : une grille responsive sur plusieurs colonnes

Cliquer pour lire la documentation

syntaxe 1 : {up flexauto=x_ordi | tablet=x_tablet | mobile=x_mobile }contenu{/up flexauto}
syntaxe 2 : {up flexauto=x_ordi-x_tablet-x_mobile }contenu{/up flexauto}
x=1 à 12 est le nombre de colonnes sur grand écran et tablette. 4 sur mobile.
@author: Lomart @version: UP-1.0 @license: GNU/GPLv3 @tags: Layout-static
  • flexauto = 3: nombre de colonnes sur grand écran ou ordi-tablet-mobile
  • tablet = 2: nombre de colonnes sur moyen écran
  • mobile = 1: nombre de colonnes sur petit écran
  • mobile-l: nombre de colonnes sur petit écran en landscape
  • large: nombre de colonnes sur écran large
  • xlarge: nombre de colonnes sur écran xlarge
  • xxlarge: nombre de colonnes sur écran xxlarge

Style bloc principal

  • id: identifiant
  • class: class ou style pour le bloc principal
  • style: class ou style pour le bloc principal

Style des blocs secondaires

  • bloc-tag = 1: uniquement si {===} 0=pas de bloc
  • class-*: class pour tous les blocs colonnes. sinon voir class-1 à class-12
  • style-*: style ou class2style pour tous les blocs colonnes. sinon voir style-1 à style-12
  • bloc-style: style ou class2style ajoutés au bloc enfant

Nom des classes identificatrices

  • class-col = up-col-: nom des classes pour les colonnes
  • class-row = up-row-: nom des classes pour les lignes

Style ajouté dans le head de la page

  • css-head (base-css): style ou class2style ajouté dans le HEAD de la page

Divers

  • no-content-html = en=no content;fr=aucun contenu: message si aucun contenu

Version 1.8
  • ajout options bloc-style & css-head. 
  • ajout possibilité de séparateurs
Version 2.1
  • saisie compacte du nombre de colonnes en responsive :
     flexauto=3-2-1 est équivalent à flexauto=3 | tablet=2 | mobile=1
Version 5.1
  • reprise complète du script pour uniformisation des méthodes avec flexauto
  •  ajout option bloc-tag
  • ajout des options style- et class-
Version 5.1.2
  • ajout des options class-col et class-row pour définir le début du nom des classes pour identiifier les cellules
    Attention : la valeur par défaut passe de col- / row- à  up-col- / up-row-
Version 5.2

Redimensionner votre navigateur pour voir l'effet responsive

Pour obtenir la grille ci-dessous, ce simple code convient :

{up flexauto}
	<p>bloc n°1</p>
	<div>bloc n°2</div>
	<h4>bloc n°3</h4>
	<p>bloc n°4</p>
	<p>bloc n°5</p>
	<p>bloc n°6</p>
{/up flexauto}
bloc n°1
bloc n°2

bloc n°3

bloc n°4
bloc n°5
bloc n°6

Vous remarquerez la tolérance pour définir les blocs enfants. N'importe quel type de bloc convient tant qu'il est de premier niveau

Par défaut, le nombre de colonnes est de 3 sur grand écran, 2 sur moyen et 1 sur petit.

L'exemple ci-dessous montre comment modifier ce comportement. Il ajoute aussi une marge entre les cellules avec la classe fg-gap. Toutes les classes de UP-Flexgrid sont utilisables

{up flexauto=6 | tablet=3 | mobile=2 | class=fg-gap}
bloc n°1
bloc n°2

bloc n°3

bloc n°4
bloc n°5
bloc n°6
Si le comportement de la grille n'est pas celui attendu, c'est presque toujours à cause des règles css que vous avez ajoutées.
Afin d'éviter d'alourdir les shortcodes, j'ai utilisé l'action addcsshead pour définir les règles CSS d'habillage.
{up addcsshead=
  .fg-row > *:nth-child(odd) [background-color:violet]
  .fg-row > *:nth-child(even) [background-color:tan]
  .fg-row > * [padding:5px;margin-bottom:0;border:#666 dotted 2px;text-align:center] 
}

notez que UP admet et comprend des arguments sur plusieurs lignes. Pratique pour se relire!

Faciliter la mise en page

Pour créer des blocs de contenus, vous pouvez les séparer par des shortcodes séparateurs comme dans l'exemple ci-dessous.

Léopard

Ecureuil

Perroquets

Macaques

Lion majestueux

Muguet

Le code

Une copie d'une partie du shorcode en mode wysiwyg dans l'éditeur :

 ainsi que la totalité du shortcode en mode code :

<p>{up flexauto=3 | tablet=2 | mobile=1 | class=fg-gap | style=text-align:center | css-head=#id img[width:100%;ombreMax;border:1px orange solid]}</p>
<p><img src="/images/photos/Leopard-africain-mini.jpg" alt="" /></p>
<p>Léopard</p>
<p>{====}</p>
<p><img src="/images/photos/Ecureuil-rouge-eurasien-mini.jpg" alt="" /></p>
<p>Ecureuil</p>
<p>{====}</p>
<p><img src="/images/photos/Perroquets-rouges-en-Equateur-mini.jpg" alt="" /></p>
<p>Perroquets</p>
<p>{====}</p>
<p><img src="/images/photos/black-crested-macaque-mini.jpg" alt="" /></p>
<p>Macaques</p>
<p>{====}</p>
<p><img src="/images/photos/un-lion-majestueux-mini.jpg" alt="" /></p>
<p>Lion majestueux</p>
<p>{====}</p>
<p><img src="/images/photos/brins-de-muguet-mini.jpg" alt="" /></p>
<p>Muguet</p>
<p>{/up flexauto}</p>

Les options du shortcode :

flexauto=3, tablet=2, mobile=1 définissent le nombre de colonne selon la largeur de l'écran

class=fg-gap : une classe pour ajouter un espace entre les colonnes

style=text-align:center :pour centrer le contenu des cellules

css-head=#id img[width:100%;ombreMax;border:1px orange solid] : force les images à 100% de la largeur des colonnes. #id limite la portée de cette règle à cette action. 

v5.2 : la nouvelle fonctionnalité class2style permet d'utiliser des classes simples (ombreMax) au milieu de styles. Ne pas oublier les points-virgules pour les séparer.

Mise en forme version 5.1

Les actions flexauto et flexbox sont sans doute celles que j'utilise le plus.

Elles permettent une présentation plus souple et plus agréable que les tableaux avec le grand avantage d'être responsive.

J'ai revu complétement ces 2 actions pour la version 5.1 de UP, en uniformisant leurs options concernant la mise en forme

Quoi de mieux que d'utiliser ces nouvelles fonctionnalités pour vous les montrer et démontrer.

Les options concernées sont listées dans le tableau ci-dessous.
Pour rappel, une option se terminant par -, permet de donner une règle qui concerne tous les éléments. Si on remplace l'étoile par un nombre de 1 à 12, on cible un groupe d'éléments. Dans notre cas, il s'agit des colonnes. Il aurait été préférable que je les nomme col-class-* et col-style-*. Mais il est trop tard, la compatibilité ascendante l'interdit 

L'exemple utilise flexbox, mais flexauto fonctionnne exactement de la même façon.

class
style

classe(s) ou style(s) ajouté en inline dans la balise DIV du bloc principal 

bloc-style    

style UNIQUEMENT ajoutés à tous les blocs enfants par une règle CSS dans le head. #id>*[style]

style-*

style-* est identique à bloc-style
style-X ajoute une règle CSS dans le head. #id .col-X[style]  
Nouvelle option 5.1 pour flexauto

class-*    

class-* est ajouté à la balise de tous les blocs
class-X ajoute la règle dans la balise de tous les blocs enfants
Nouvelle option 5.1 pour flexauto

bloc-tag

par défaut, un bloc DIV encadre les contenus séparés par {===}
bloc-tag=0 n'ajoute pas de bloc, les attributs sont ajoutés à la balise enfant
Nouvelle option 5.1 pour flexauto et flexbox

class-col & class-row

le nom des classes pour les colonnes et les lignes.
Par défaut, ils sont définis à up-col- et up-row-

Les explications

{up flexbox=2-10 | mobile=12
| class=fg-gap m-child-raz-1 bd-gris
| style=font-size:1rem
| bloc-style=border:1px grey solid; padding:10px
| class-*=ombreMax
| class-1=bg-rouge t-blanc
| class-2=bd-rouge
| css-head=#id .up-col-1.up-row-odd[background:var(--bleuClair) !important]
#id .up-col-2.up-row-odd[border:2px solid var(--bleuClair) !important]
}

flexbox : pas de changement, c'est la largeur des 2 colonnes. 12 pour toute la largeur sur mobile.
class : les classes s'appliquent au bloc parent qui entoure tous les blocs enfants avec une bordure grise (bd-gris).  le classes fg-gap et m-child-raz-1 agissent sur les marges. Voir la feuille de style de UP.
style : pour la démo, je précise la taille des caractères
bloc-style : par défaut, tous les blocs enfants ont une bordure rouge et un padding
class-*: j'ajoute une ombre à tous les blocs enfants (toutes les colonnes)
class-1 : la première colonne aura un texte blanc sur fond rouge
class-2 : la deuxième colonne est entourée de rouge
css-head : cette option universelle va nous permettre de styler en toute liberté !

Un peu de technique pour comprendre les règles de l'option css-head

Il aurait été possible de faire plus simple, amis on perdait le charme de la démo !

Tous les blocs enfants ont 3 classes pour permettre de les styler :

  • up-col-X : le numéro de sa colonne de 1 à N
  • up-row-X: le numéro de sa ligne de 1 à N
  • up-row-even ou row-odd selon que la ligne est paire ou impair

Ces classes nous permettent de cibler :

  • une colonne par #id .up-col-X
  • une ligne par #id .up-row-X
  • un bloc par ses coordonnées #id .up-row-X.up-col-X Notez bien l'absence d'espace entre les 2 classes pour indiquer qu'elles sont dans la même balise. L'espace avec #id indique qu'elles sont ses enfants. C'est beau le CSS !
  • un bloc d'une colonne sur une ligne paire ou impaire. C'est le cas dans notre exemple avec #id .up-col-1.row-odd pour les blocs de la colonne 1 qui sont sur une ligne paire.

Attention à la priorité des sélecteurs CSS

Par définition, pour simplifier, une règle CSS dans une balise HTML a un poids (ou priorité) plus important qu'une règle dans un fichier CSS ou dans le head de la page. 

C'est pour cela que l'on ajoute l'attribut !important afin de le rendre prioritaire

En résumé, toutes les options sont dans le head de la page pour toutes les options (bloc-style, style- et css-head). class-* est obligatoirement dans la balise des blocs enfants.
Je ne parle pas des options class et style qui ne rentre pas en conflit avec leurs enfants

    Si la facilité d'utilisation des classes n'était pas si grande, l'idéal serait de ne pas utiliser l'option class-* pour éviter les bagarres entre enfants.

    L'option bloc-tag

    Cette option fait son apparition dans la version 5.1 de UP.

    Sa fonction est utile lorsque le contenu des blocs enfants provient d'autres actions UP situées entre des shortcodes séparateurs pour plus de lisibilité.

    Les shortcodes séparateur encadrent leur contenu par une balise DIV qui peut gêner l'application de certaines règles CSS flexbox ou grid.

    Je ne vais pas rentrer plus dans les explications, si vous êtes confronté à un souci CSS, pensez à ajouter une option bloc-tag=0 pour ne pas ajouter ce bloc superflu !
    Une autre solution est de ne pas utiliser de shortcodes séparateurs, mais je trouve cela moins clair. A vous de choisir.
    Dans les 2 cas, les classes class-* seront ajoutées à la balise des enfants directs.

    {up flexbox=2-10
    | class=fg-gap m-child-raz-1 bd-gris
    | style=font-size:1rem
    | bloc-style=border:1px grey solid; padding:10px
    | class-*=ombreMax
    | class-1=bg-rouge t-blanc
    | class-2=bd-rouge
    | css-head=#id .col-1.row-odd[background:var(--bleuClair) !important]
               #id .col-2.row-odd[border:2px solid var(--bleuClair) !important]
    }
    Pour info, cette page utilise 14 action(s) :
    upactionslist (1) readmore (1) csv2def (1) div (1) addcsshead (1) flexAuto (1) FLEXAUTO (1) flexauto (1) span (2) jcontent-in_content (1) jcontent-info (1) tabslide (1) toc (1)
    Dernières modifications

    Sommaire: Toutes les actions