--- title: Concepts relatifs au viewport slug: Web/CSS/Viewport_concepts tags: - CSS - Guide - viewport translation_of: Web/CSS/Viewport_concepts original_slug: Web/CSS/Concepts_viewport --- {{CSSRef}} Dans cet article, nous définirons le concept de _viewport_ ou de zone d'affichage, les différences entre la zone d'affichage visuelle et la zone d'affichage pour la disposition. Nous verrons également ce que signifie la zone d'affichage pour CSS, SVG et pour les appareils mobiles. ## Qu'est-ce qu'une zone d'affichage (_viewport_) ? Une zone d'affichage (aussi appelée _viewport_ en anglais) représente la zone actuellement visible sur l'appareil. Pour un navigateur web, la zone d'affichage correspond généralement à la fenêtre du navigateur sans les éléments d'interface du navigateur (barre de menu, etc.). Bref, sur le Web, la zone d'affichage correspond la plupart du temps à la région à l'intérieur de la fenêtre dans laquelle vous consultez un site ou une application. Les documents (à l'instar de cet article) peuvent être très longs. La zone d'affichage correspond à ce qui est actuellement visible. Dans notre cas particulier, vous devriez pouvoir voir le titre Qu'est-ce qu'une zone d'affichage peut-être le menu de navigation. La taille de la zone d'affichage dépend de la taille de l'écran, de l'activation du mode plein écran, du niveau de zoom, etc. Le contenu situé à l'extérieur de la zone d'affichage (la section Voir aussi de ce document par exemple) n'est pas visible tant que l'utilisateur n'a pas fait défilé le contenu jusqu'à ce point. - Pour les écrans les plus grands où les applications ne sont pas nécessairement en plein écran, la zone d'affichage mesure la taille de la fenêtre du navigateur - Sur la plupart des appareils mobiles ou lorsque le navigateur est en plein écran, la zone d'affichage correspond à l'ensemble de l'écran En mode plein écran, la zone d'affichage sera l'écran de l'appareil, la fenêtre du navigateur pourra être plus grande ou plus petite que la zone d'affichage et le document sera le site web consulté et qui peut être plus grand ou plus large que la zone d'affichage. Pour résumer, la zone d'affichage est la zone du document actuellement visible à l'écran. ### Les dimensions de la zone d'affichage sont modifiables La largeur de la zone d'affichage n'est pas toujours la largeur de la fenêtre. Si vous accédez à la largeur et à la hauteur de la fenêtre et à celles du document avec Chrome ou Firefox, vous pourrez obtenir un résultat comme celui-ci : ```js document.documentElement.clientWidth /* 1200 */ window.innerWidth /* 1200 */ window.outerWidth /* 1200 */ ``` ```js document.documentElement.clientHeight /* 800 */ window.innerHeight /* 800 */ window.outerHeight /* 900 */ ``` Il existe plusieurs propriétés du DOM qui permettent d'obtenir la taille de la zone d'affichage et certaines dimensions associées : - La propriété du document {{DOMxRef("Element.clientWidth")}} est la largeur interne du document, exprimée en [pixels CSS](/fr/docs/Mozilla/Mobile/Balise_meta_viewport#Un_pixel_n'est_pas_un_pixel), et inclut le remplissage (_padding_) mais pas les marges, les bordures et les barres de défilement. **C'est la largeur de la zone d'affichage**. - La propriété {{DOMxRef("Window.innerWidth")}} correspond à la largeur, exprimée en pixels CSS, de la zone d'affichage dans la fenêtre du navigateur qui contient les éventuelles barres de défilement verticales. - La propriété {{DOMxRef("Window.outerWidth")}} correspond à la largeur extérieure de la fenêtre du navigateur et qui contient l'ensemble du _chrome_ (les éléments d'interface utilisateur du navigateur qui ne sont pas ceux de la page web consultée). Dans l'exemple précédent, on peut voir que `innerWidth` et `outerWidth` ont la même valeur mais que `outerHeight` mesure 100 pixels de plus que `innerHeight`. En effet, `outerHeight` tient compte du chrome du navigateur et les mesures ont été effectuées avec un navigateur dont la barre d'adresse, les onglets et la barre de favoris mesuraient ensemble 100 pixels de haut. En revanche, il n'y avait pas de _chrome_ à gauche ou à droite de la fenêtre. La zone contenu entre `innerHeight` et `innerWidth` correspond à **la zone d'affichage pour la disposition (_layout viewport_)**. Le chrome du navigateur ne fait pas partie de la zone d'affichage. Lorsqu'on zoome, FIrefox et Chrome renvoient une nouvelle taille, en pixels CSS, pour `innerWidth` et `clientWidth`. Les valeurs renvoyées pour `outerWidth` et `outerHeight` dépendent du navigateur : Firefox rapporte la nouvelle valeur en pixels CSS et Chrome renvoie la longueur exprimée avec la taille par défaut d'un pixel. Lorsqu'on a zoomé, on pourra obtenir : ```js document.documentElement.clientWidth /* 800 */ window.innerWidth /* 800 */ window.outerWidth /* 800 dans Firefox, 1200 dans Chrome */ ``` ```js document.documentElement.clientHeight /* 533 */ window.innerHeight /* 533 */ window.outerHeight /* 596 dans Firefox, 900 dans Chrome */ ``` La zone d'affichage mesurait initialement 1200 x 800 pixels. Après le zoom, la zone d'affichage mesure 800 x 533 pixels. C'est la zone d'affichage pour la disposition. Avec la feuille de style suivante, les hauts et pieds de page seront placés en haut et en bas de _la zone d'affichage pour la disposition_. ```css body > header { position: fixed; top: 0; } body > footer { position: fixed; bottom: 0; } ``` On a mesuré 800 x 533 après avoir zoomé à l'aide du clavier. Le haut et le bas de page ont suivi le haut et le bas de la fenêtre. Mais que ce serait-il passé si on avait zoomé au doigt sur une tablette ? Que se serait-il passé si un clavier tactile logiciel s'était ouvert sur le bas du téléphone ? Dans le contexte du Web, on parle de deux zones d'affichage : **la zone d'affichage pour la disposition (_layout viewport_)** et **la zone d'affichage visuelle (_visual viewport_)**. La zone d'affichage visuelle est la partie de la page web qui est actuellement visible dans le navigateur et qui peut changer. Lorsqu'un utilisateur zoome en pinçant, provoque l'ouverture d'un clavier tactile ou lorsqu'une barre d'adresse s'affiche, la zone d'affichage visuelle se réduit mais la zone d'affichage pour la disposition reste inchangée. Les hauts et bas de pages vus dans l'exemple précédent se caleront en haut et en bas de la zone d'affichage pour la disposition. Aussi, ils resteront visibles lorsqu'on zoome au clavier mais pourrait être masqués (partiellement ou complètement) par un clavier visuel : autrement dit, ils pourraient ne pas faire partie de la zone d'affichage visuelle. La zone d'affichage visuelle correspond à la partie de l'écran qui est visible sans contenir les claviers visuels, les zones en dehors de la région zoomée ou toute autre partie qui ne suit pas les dimensions d'une page. Ainsi, la zone d'affichage visuelle pourra avoir la même taille ou être plus petite que la zone d'affichage pour la disposition. Pour une page contenant des _iframes_, des objets ou des SVG externes, chaque page imbriquée et chaque fichier inclus possède son propre objet pour la fenêtre. Seule la fenêtre de plus haut niveau possède une zone d'affichage visuelle qui peut être différente de la zone d'affichage pour la disposition. Pour les éléments imbriqués, la zone d'affichage visuelle et la zone d'affichage pour la disposition sont identiques. ### CSS La zone d'affichage pour la disposition et la zone d'affichage visuelle mentionnées jusqu'à présent ne sont pas les seules zones d'affichages à considérer. Toute zone d'affichage imbriquée, pleinement ou partiellement affichée dans la zone d'affichage pour la disposition sera considérée comme une zone d'affichage visuelle. On pense généralement que les hauteurs et largeurs utilisées pour les requêtes média correspondent à la hauteur et à la largeur de la fenêtre du navigateur mais elles correspondent en réalité à la taille de la zone d'affichage (la fenêtre pour le document principal ou les dimensions intrinsèques des objets imbriqués). En CSS, on peut également utiliser des unités proportionnelles aux dimensions de la zone d'affichage. Un `vh` correspond à 1% de la hauteur de la zone d'affichage pour la disposition et `vw` mesurera, de façon analogue, 1% de la largeur de la zone d'affichage pour la disposition. #### `