Ajax JavaScript CSS HTML 5 DOM

Grid (grille)

Les boites permettent de subdiviser une interface en panneaux et de définir l'orientation à l'intérieur de ceux-ci, mais elles ne permettent pas de positionner les éléments de façon régulière comme le fait la balise table de HTML. Cependant XUL à un objet pour cela qui est l'objet grid.
La largeur des colonnes et la hauteur des lignes dépendent de l'attribut flex qui indique le pourcentage de la place occupée par l'élément. Celui-ci placé à la fois dans les lignes et les colonnes permet de donner une flexibilité à la fois verticale et horizontale aux cellules. Cependant l'objet grid est plus complexe à mettre en oeuvre.

Elements de grid

grid

Conteneur global, proche de la balise table de HTML.

rows

Conteneur horizontal, équivalent à tr de HTML, et qui contiendra des objets row.

row

Une ligne de la table. Elle permet de placer sur un plan horizontal d'autres composants graphiques.

columns

Conteneur vertical qui contiendra des objets column.

column

Une colonne de la table.

Structure d'une grille

Elle diffère de celle d'une table, et cela dans le but de simplifier le dimensionnement de la grille.
La définition d'une grille commence par la liste des colonnes, dans le conteneur columns. Cela permet de définir la largeur des colonnes avec l'attribut flex.
Puis suit un conteneur rows qui contient des balises row ou d'autres widgets XUL. La balise row permet d'aligner horizontalement un ensemble d'objets.
Cela donne la structure d'ensemble suivante:

<grid>
    <columns>
    <column flex="" />
        ... autres column éventuelles...
    </columns>
    <rows>
        <row flex="" />
        ... suite de row ou autres widgets...
    </rows>
</grid>

A l'intérieur de rows ou d'une row, on peut inclure des box, hbox ou vbox pour organiser le contenu.

Il est possible d'inverser les rôles entre les conteneurs columns et rows. On pourra placer les composants à l'intérieur des column tandis que l'on utilisera les row pour indiquer le nombre de lignes.
Si le nombre d'éléments dans columns correspond au nombre de row, chacun sera placé à l'intérieur d'une ligne.
Si l'on mettait des éléments à la fois à l'intérieur des row et des columns, ils se superposeraient.

Exemple de grid

Nous allons mettre en oeuvre les principes précédents en définissant une interface avec un panneau latéral étroit à gauche, une bande mince en bas et un panneau large, flexible sur tous les plans sur le reste de le fenêtre.

La structure globale, avec les attributs flex, sera la suivante:

<grid flex="1">
    <columns>
        <column flex="1" />
        <column flex="12" />
    <columns>
    <rows>
        <row flex="12" />
        <row />
    </rows>
</grid>

Le panel principal est flexible sur les deux plans. La panneau latéral également mais avec une largeur étroite. La ligne inférieure n'est flexible qu'horizontalement et fixe autrement.
Des boutons ont été placés pour faire ressortir la subdivision, mais dans la pratique, on utiliserait des boites.