• Aucun résultat trouvé

Les agents utilisateurs devraient éviter de générer un grand nombre de boîtes de page vides pour respecter le positionnement des éléments (ex. il n'est pas souhaitable de produire 100 pages blanches à

l'impression). Noter, cependant, qu'il peut être nécessaire d'en générer un petit nombre pour honorer les valeurs 'left' et 'right' des propriétés 'page−break−before' et 'page−break−after' ;

Les auteurs ne devraient pas positionner d'éléments à des emplacements embarassants, juste pour éviter leur rendu. Il est préférable :

Pour supprimer complètement la génération d'une boîte, de donner la valeur 'none' à la propriété 'display' ;

Pour rendre une boîte invisible, d'employer la propriété 'visibility'.

Les agents utilisateurs peuvent gérer les boîtes positionnées en dehors de la boîte de la page de plusieurs façons, dont le rejet de celles−ci, ou la création pour celles−ci d'une autre boîte de page à la fin du document.

13.3 Les coupures de page

Cette partie traite de la mise en forme des page en CSS2. Cinq propriétés précisent aux agents utilisateurs les endroits où les coupures de page devraient intervenir et les pages, de gauche ou de droite, les contenus restants doivent finir. Chaque coupure de page arrête la mise en forme dans une boîte de page donnée, et provoque la mise en forme du reste de l'arborescence du document dans une nouvelle boîte de page.

13.3.1 Les propriétés de coupure avant et après : 'page−break−before', 'page−break−after', 'page−break−inside'

'page−break−before'

Valeur : auto | always | avoid | left | right | inherit Initiale : auto

S'applique à : ceux des éléments de type bloc

Héritée : non

S'applique à : ceux des éléments de type bloc

Héritée : non

Pourcentage : sans objet Médias : visuel, paginé 'page−break−inside'

Valeur : avoid | auto | inherit Initiale : auto

S'applique à : ceux des éléments de type bloc Héritée : oui

Pourcentage : sans objet Pourcentage : visuel, paginé Les significations des valeurs sont : auto

Ne force ni n'interdit une coupure de page avant (ou après, ou à l'intérieur de) la boîte générée ; always

Force toujours une coupure de page avant (ou après) la boîte générée ; avoid

Évite une coupure de page avant (ou après, ou à l'intérieur de) la boîte générée ; left

Force une coupure de page, ou deux, avant (ou après) la boîte générée, de manière à ce que la page suivante soit mise en forme comme une page de gauche ;

right

Force une coupure de page, ou deux, avant (ou après) la boîte générée, de manière à ce que la page suivante soit mise en forme comme une page de droite.

L'endroit potentiel d'une coupure de page est typiquement influencé par la propriété 'page−break−inside' de l'élément parent, par la propriété 'page−break−after' de l'élément précédent et la propriété 'page−break−before' de l'élément suivant. Quand celles−ci ont une valeur autre que 'auto', les valeurs 'always', 'left' et 'right' ont préséance sur 'avoid'. Voir la partie traitant des coupures de page permises pour les règles précises régissant le forçage et la suppression des coupures de page.

13.3.2 L'utilisation des pages nommées : 'page' 'page'

Valeur : <identifiant> | auto Initiale : auto

S'applique à : ceux des éléments de type bloc Héritée : oui

Pourcentage : sans objet Médias : visuel, paginés

La propriété 'page' peut être employée pour désigner un type particulier de page où devrait s'afficher un élément donné.

Exemple(s) :

Dans cet exemple, toutes les tables seront placées, avec une orientation paysage [ndt. landscape], dans une page de droite (celle−ci est nommée "retournee") :

@page rotated {size: landscape}

TABLE {page: retournee; page−break−before: right}

La propriété 'page' a le fonctionnement suivant : quand une boîte de bloc, avec un contenu en−ligne, a une propriété 'page' dont la valeur est différente de celle de la boîte précédente, également de type bloc avec un contenu en−ligne, alors une ou deux coupures de page sont insérées entre ces deux boîtes, et les boîtes survenant après la coupure sont rendues dans une boîte de page avec ce nom. Voir "Les coupures de page forcées" plus loin.

Exemple(s) :

Dans cet exemple, les deux tables sont affichées avec une orientation paysage (sur la même page en effet, si celle−ci peut les contenir), la page nommée "etroite" n'étant pas du tout employée, bien que celle−ci ait été appliquée à l'élément DIV :

@page etroite {size: 9cm 18cm}

@page retournee {size: landscape}

DIV {page: etroite}

TABLE {page: retournee}

le document sur lequel agit la feuille de style :

<DIV>

<TABLE>...</TABLE>

<TABLE>...</TABLE>

</DIV>

13.3.3 Les coupures à l'intérieur des éléments : 'orphans', 'widows' 'orphans'

Valeur : <entier> | inherit Initiale : 2

S'applique à : ceux des éléments de type bloc Héritée : oui

Pourcentage : sans objet Médias : visuel, paginé 'widows'

Valeur : <entier> | inherit Initiale : 2

S'applique à : ceux des éléments de type bloc Héritée : oui

Pourcentage : sans objet Médias : visuel, paginé

La propriété 'orphans' spécifie le nombre minimum de lignes d'un paragraphe devant rester en bas d'une page, la propriété 'widows' le nombre minimum de lignes d'un paragraphe devant rester en haut d'une page. Voir des exemples plus loin sur la manière de les employer pour le contrôle des coupures de page.

Pour des informations au sujet de la mise en forme des paragraphes, consulter la partie traitant des boîtes de ligne.

13.3.4 Les coupures de page permises

Dans un flux normal, les coupures de page peuvent survenir aux endroits suivants :

La marge verticale entre deux boîtes de bloc. Dans ce cas, les propriétés concernées 'margin−top' et 'margin−bottom' prennent la valeur calculée '0' ;

1.

Entres des boîtes de ligne dans une boîte de bloc.

2.

Les règles suivantes régissent ces coupures :

Règle A : Une coupure pour (1) n'est permise que si les propriétés 'page−break−after' et

'page−break−before' de tous les éléments, qui génèrent des boîtes se rencontrant à cette marge, le

permettent, c'est−à−dire quand l'un au moins d'entre eux a la valeur 'always', 'left' ou 'right', ou quand tous ont la valeur 'auto' ;

Règle B : Cependant, si tous ont la valeur 'auto' et leur ancêtre commun le plus proche a une propriété 'page−break−inside' dont la valeur est 'avoid', la coupure n'est pas permise ;

Règle C : Une coupure pour (2) n'est permise que si le nombre de boîtes de ligne, entre cette coupure et le début de la boîte de bloc les contenant, était supérieur ou égal à la valeur de la propriété 'orphans', et si celui entre cette coupure et la fin de la boîte était supérieur ou égal à la valeur de la propriété 'widows' ;

Règle D : De plus, une coupure pour (2) n'est permise que si la valeur de la propriété 'page−break−inside' est 'auto'.

Si ceci n'apportait pas assez de points de coupures pour empêcher le contenu de déborder des boîtes de page, alors on abandonne les règles B et D pour en obtenir plus.

Et si cela ne suffisait toujours pas, alors on abandonne aussi les règles A et C, pour trouver encore d'autres points de coupures.

Les coupures de page ne peuvent survenir dans des boîtes en position absolue.

13.3.5 Les coupures de page forcées

Une coupure de page doit intervenir en (1) si, parmi les propriétés 'page−break−after' et 'page−break−before' de tous les éléments, qui génèrent une boîte se rencontrant à cette marge, il y en a au moins une qui a la valeur 'always', 'left' ou 'right'.

Une coupure de page doit aussi intervenir en (1) si les valeurs des propriétés 'page' de la dernière boîte de ligne, avant cette marge, et la première, après celle−ci, sont différentes.

13.3.6 Les coupures de page "au mieux"

CSS2 ne définit pas laquelle parmi les coupures de page permises doit être employée, n'interdit pas, à un agent utilisateur, d'effectuer une coupure à l'un ou l'autre des endroits possibles, ne l'oblige pas non plus à effectuer des coupures. Mais CSS2 recommande que les agents utilisateurs observent les comportements suivants (tout en reconnaissant que ceux−ci soient parfois contradictoires) :

Effectuer aussi peu de coupures que possible ;

Faire en sorte que toutes les pages, qui ne finissent pas par une coupure forcée, aient à−peu−près la même hauteur ;

Éviter les coupures dans des blocs ayant une bordure ;

Éviter les coupures dans les tables ;

Éviter les coupures dans les éléments flottants.

• Exemple(s) :

Supposons, par exemple, que la feuille de style contienne les déclarations 'orphans: 4' et 'widows: 20', et qu'il y ait 20 lignes (boîtes de ligne) disponibles à la fin d'une page donnée :

Si un paragraphe, à la fin de la page, contient 20 lignes ou moins, alors il devrait être contenu dans la page en question ;

Si le paragraphe contenait 21 ou 22 lignes, la seconde part de celui−ci ne devant pas échapper à la contrainte exercée par 'widows', ainsi cette seconde part devrait contenir exactement 2 lignes ;

Si le paragraphe contenait 23 lignes ou plus, la première part devrait contenir 20 lignes et, la seconde, le reste des lignes.

Maintenant, supposons que la valeur spécifiée pour 'orphans' soit '10', celle pour 'widows' soit '20' et que 8 lignes soient disponibles à la fin de la page :

Si un paragraphe, à la fin de la page, contient 8 lignes ou moins, alors il devrait être contenu dans la page en question ;

Si le paragraphe contenait 9 lignes ou plus, celui−ci ne pouvant pas être partagé (car ceci constituerait une violation de la contrainte exercée par 'orphan'), alors l'ensemble du paragraphe devrait être déplacé vers la page qui suit ;