xulfr.org

3.3 Détails sur le modèle de boîte

Écrit par Neil Deakin. Traduit par Damien Hardy (27/02/2004).
Page originale : http://www.xulplanet.com/tutorials/xultu/boxdet.html xulplanet.com

Nous avons déjà vu beaucoup de fonctionnalités sur les modèles de boîtes. Dans ce chapitre, nous allons voir quelques détails supplémentaires en s'appuyant sur des exemples.

Plus de détails sur l'affichage

Les propriétés de style comme min-width et max-height peuvent être appliquées à tous les éléments. Nous les avons ajoutées aux boutons ou aux champs de texte, mais nous pouvons aussi les ajouter aux éléments d'espacement ou aux boîtes. De plus, l'attribut flex peut être appliqué à n'importe quel élément.

Exemple 3.3.1 : Source Voir

<hbox flex="1">
  <button label="Gauche" style="min-width: 100px;" flex="1"/>
  <spacer flex="1"/>
  <button label="Droite" style="min-width: 100px;" flex="1"/>
</hbox>

Dans l'exemple ci-dessus, les trois éléments se redimensionnent eux même car il sont tous flexibles. Les deux boutons indiquent une largeur minimum de 100 pixels. Les deux boutons ne seront jamais plus petits que cette taille mais ils pourront toujours s'élargir. Ici la fenêtre doit apparaître avec une largeur d'un peu plus de 200 pixels. C'est assez pour les deux boutons. Car si les trois éléments sont flexibles, ils ne nécessitent pas pour autant plus de place, la flexibilité n'ajoute pas d'espace supplémentaire.

Comme il est montré dans l'image ci-dessus, il y a deux boutons qui s'agrandissent verticalement pour remplir leur élément conteneur, qui dans ce cas est le hbox. L'attribut align contrôle ce comportement sur une boîte horizontale. Vous pouvez aussi empecher cet étirement en précisant une hauteur maximale sur l'élément ou mieux, sur la boîte elle même. Si une boîte a une hauteur maximale, les éléments qu'elle contient sont contraints en hauteur par celle-ci. Cependant, le problème est que vous devez savoir quelle taille fera l'élément pour pouvoir en donner une à la boîte. Ce qui suit montre l'exemple avec un ensemble d'attribut align.

Exemple 3.3.2 : Source Voir

<hbox flex="1" align="top">
  <button label="Gauche" style="min-width: 100px;" flex="1"/>
  <spacer flex="1"/>
  <button label="Droite" style="min-width: 100px;" flex="1"/>
</hbox>

Pour parfaire complètement votre mise en page, vous devrez généralement ajouter des boîtes imbriquées, spécifier une taille minimum et maximum sur quelques éléments, et rendre certains éléments flexible. La meilleure interface est celle qui peut être affichée dans différente taille sans problème. Le modèle de boîte peut être difficile à appréhander si vous n'essayez pas différentes choses par vous même.

Ce qui suit est une courte déscription de deux types de boîtes :

Boîtes horizontales
  1. Affichent chacun de leurs éléments les un à coté des autres horizontalement.
  2. Les éléments flexibles le sont horizontalement.
  3. Le groupement (NdT : attribut pack) contrôle le placement horizontal des éléments fils.
  4. L'alignement contrôle la manière dont les lignes d'éléments seront alignées verticalement.
Boîtes verticales
  1. Affichent chacun de leurs éléments verticalement en colonnes.
  2. Les éléments flexibles le sont verticalement.
  3. Le groupement contrôle le placement vertical des éléments fils.
  4. L'alignement contrôle la manière dont les colonnes d'éléments seront alignées horizontalement.

Vous pouvez mettre des boîtes n'importe où dans un fichier XUL, même dans un élément HTML comme une table. Cependant, l'affichage sera en partie dépendant de l'élément HTML. Cela signifie que l'attribut flex risque de ne pas réagir exactement comme vous le voudriez. Rappelez vous que la flexibilité n'a de sens que pour les éléments qui sont directement à l'intérieur d'une boîte, ou d'un élément qui est assimilé à une boîte.

Exemples

1. Utiliser les spacers

Exemple 3.3.3 : Source Voir

<hbox>
  <button label="Un"/>
  <spacer style="width: 5px"/>
  <button label="Deux"/>
</hbox>

Ici, un espacement est utilisé comme séparateur entre deux boutons, en précisant une largeur de 5 pixels. Vous pourriez aussi utiliser les marges (avec la propriété CSS margin).

2. Centrer des boutons

Exemple 3.3.4 : Source Voir

<hbox pack="center" align="center" flex="1">
  <button label="Regardez Moi!"/>
  <button label="Cliquez Moi!"/>
</hbox>

Cet exemple propose une boîte horizontale flexible contenant deux boutons. La boîte possède l'attribut pack qui est utilisé pour centrer les boutons horizontalement. L'attribut align aligne quant à lui les boutons verticalement. Le résultat est que les boutons seront centrés dans la boîte dans les deux directions. Cet exemple fonctionnera aussi avec une boîte verticale, le second bouton sera alors sous le premier, au lieu d'être à coté de lui.

3. Une fenêtre de recherche dans le texte

Exemple 3.3.5 : Source Voir

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<window id="findtext" title="Recherche dans un texte" orient="horizontal"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <vbox flex="3">
    <label control="t1" value="Mots clés :"/>
    <textbox id="t1" style="min-width: 100px;" flex="1"/>
  </vbox>

  <vbox style="min-width: 150px;" flex="1" align="start">
    <checkbox id="c1" label="Ignorer la casse"/>
    <spacer flex="1" style="max-height: 30px;"/>
    <button label="Rechercher"/>
  </vbox>

</window>

Ici, deux boîtes verticales sont créées, une pour le champs texte et l'autre pour la case à cocher et le bouton de recherche. La boîte de gauche a une flexibilité 3 fois plus grande que celle de droite donc elle prendra toujours 3 fois plus de place quand la taille de la fenêtre augmentera. La boîte de droite force une largeur minimum de 150 pixels.

Le champs texte est flexible donc il s'ajustera à la taille de la fenêtre. Le champs texte force aussi une largeur minimum de 100 pixels. La case à cocher apparaît dans la boîte de droite avec son étiquette. Juste en dessous de la case à cocher il y a un spacer (espacement). L'espacement s'agrandira ou retrécira mais n'exèdera pas 30 pixels. Le résultat est que la case à cocher et le bouton de recherche seront séparés par un espace qui ne fera pas plus de 30 pixels.

La seconde boîte a un alignement de valeur start. Cela a pour effet que les trois éléments fils seront alignés sur le bord gauche. Si cela n'est pas précisé, la valeur par défaut est stretch, ce qui a pour effet de positionner les éléments fils les uns à coté des autres horizontalement. Parce que nous ne voulons pas que le bouton de recherche change de taille, nous devons alors préciser un alignement.


Dans le prochain article, nous allons en apprendre un peu plus sur un type de boîte plus spécifique, le groupe de boîte.