Conception Web réactive et réactivité à la hauteur du navigateur

Je sais que beaucoup se demanderont pourquoi cet article a un titre aussi inhabituel. Quel est le lien entre la «conception Web adaptative» et la «hauteur de la fenĂȘtre du navigateur»? Peut-ĂȘtre que ce titre semble inhabituel en raison du fait que «conception rĂ©active» est gĂ©nĂ©ralement comprise comme signifiant la conception de pages pour s'ajuster Ă  la largeur de la fenĂȘtre d'affichage afin qu'elles soient bonnes sur diffĂ©rents appareils. Les sites Web testent toujours en rĂ©duisant la largeur du navigateur et en observant ce qui se passe. Mais je n'ai presque jamais rencontrĂ© de directives pour tester un projet, qui disent que les pages sont examinĂ©es en diminuant la hauteur de la fenĂȘtre du navigateur. Peut-ĂȘtre vous ĂȘtes-vous dĂ©jĂ  surpris Ă  penser: "Dois-je consulter des pages dans des fenĂȘtres de navigateur de diffĂ©rentes hauteurs?" Je crois que cela devrait ĂȘtre fait, et je vais convaincre tout le monde de cela,qui lira cet article.







Lorsqu'on travaille sur un site Web, il n'est pas trĂšs correct de faire certaines hypothĂšses sans se fier Ă  des donnĂ©es rĂ©elles. Par consĂ©quent, il est trĂšs important d'assumer la responsabilitĂ© de vĂ©rifier les sites dans des fenĂȘtres de navigateur de diffĂ©rentes largeurs et hauteurs.



Pourquoi consulter des pages dans des fenĂȘtres de navigateur de diffĂ©rentes hauteurs?



Bonne question. Avant de passer aux exemples et scénarios d'utilisation de tels contrÎles, je voudrais parler des problÚmes qui surviennent avec des sites qui ne sont pas adaptés pour travailler dans des points de vue de différentes hauteurs. Cela vous aidera à mieux comprendre ce qui se passe ensuite.



Faire de fausses hypothÚses sur la façon dont un site Web sera utilisé est l'un des facteurs les plus importants qui affectent négativement le travail d'un concepteur Web. Par exemple, il serait faux de s'attendre à ce que le site soit utilisé en développant le navigateur en plein écran. Au lieu de cela, vous devez compter sur le pire.





HypothÚses et réalité Ce qui



prĂ©cĂšde est une illustration de mes propos. En rĂ©alitĂ©, tous les utilisateurs ne travaillent pas avec les navigateurs comme le suggĂšre le concepteur. J'ai moi-mĂȘme rencontrĂ© des sites qui semblent mauvais dans les fenĂȘtres de navigateur avec une hauteur rĂ©duite.



Outils de développement de navigateur



Le redimensionnement vertical du navigateur n'est pas le seul moyen d'affecter la hauteur de la fenĂȘtre. Ainsi, par exemple, lorsque la barre d'outils du dĂ©veloppeur est ouverte, elle occupe Ă©galement une partie de l'espace vertical.





La barre d'outils dĂ©veloppeur occupe une partie de la fenĂȘtre du navigateur L'



ouverture des outils de dĂ©veloppement peut briser la conception de votre site ou mettre en lumiĂšre des problĂšmes que personne ne s'attendait Ă  voir apparaĂźtre. La zone en surbrillance de l'image reprĂ©sente la hauteur actuelle de la fenĂȘtre. L'ouverture des outils de dĂ©veloppement tout en visualisant le site sur un petit Ă©cran d'ordinateur portable aura pour rĂ©sultat que seule une petite zone de la page sera visible.



Pensons Ă  une question importante: "Est-il possible d'amĂ©liorer l'expĂ©rience utilisateur du site en le visualisant dans une petite fenĂȘtre de navigateur?" Je peux donner une rĂ©ponse positive Ă  cette question. Je suppose que la thĂ©orie nous suffit. Apprenons une approche "verticale" du style des pages.



CSS "Vertical"



Certains concepteurs et dĂ©veloppeurs se concentrent sur l'apparence de la page, qu'il accepte dans des fenĂȘtres de largeurs diffĂ©rentes. En mĂȘme temps, ils Ă©clipsent l'Ă©tude du comportement des pages dans des fenĂȘtres de diffĂ©rentes hauteurs. Et c'est trĂšs important. Par exemple, quelqu'un travaille sur une conception de page et a reçu des instructions sur l'apparence d'un certain composant dans des fenĂȘtres de navigateur de largeurs diffĂ©rentes. Qu'en est-il des fenĂȘtres de diffĂ©rentes hauteurs?





Sur un grand téléphone, des éléments de navigation remplissent l'espace vertical disponible. Sur un téléphone moyen, la taille de la police et l'espacement sont réduits. Sur un petit téléphone, l'espace vertical est insuffisant pour afficher tous les éléments. Par conséquent, ils sont placés dans 2 colonnes.



Cette figure montre un menu de navigation dont l'apparence s'adapte Ă  la hauteur de la fenĂȘtre. L'objectif du designer est que le menu remplisse tout l'espace dont il dispose. Sur les Ă©crans plus petits, la taille de la police et l'espacement entre les Ă©lĂ©ments de menu diminuent. Si l'Ă©cran du tĂ©lĂ©phone est trĂšs petit (par exemple, comme l'iPhone 5), les Ă©lĂ©ments sont affichĂ©s dans deux colonnes. Ces scĂ©narios d'utilisation du site sont souvent nĂ©gligĂ©s. En consĂ©quence, soit les sites ne s'adaptent pas du tout pour travailler sur des Ă©crans de diffĂ©rentes hauteurs, soit ils ne les optimisent que lorsqu'un visiteur du site signale un problĂšme.



CSS peut nous aider Ă  ajuster le site pour diffĂ©rentes hauteurs de fenĂȘtres. À savoir, nous parlons de deux techniques principales:



  • RequĂȘtes multimĂ©dias basĂ©es sur la hauteur de la fenĂȘtre.
  • L'unitĂ© de mesure associĂ©e Ă  la fenĂȘtre.


RequĂȘtes multimĂ©dias prenant en compte la hauteur de la fenĂȘtre



Comme vous le savez probablement dĂ©jĂ , vous pouvez utiliser des requĂȘtes multimĂ©dias dans CSS qui prennent en compte la largeur de la fenĂȘtre:



@media (min-width: 700px) {
  .element {
    /* do something.. */
  }
}


Mais les requĂȘtes multimĂ©dias qui prennent en compte la hauteur des fenĂȘtres du navigateur sont beaucoup moins courantes:



@media (min-height: 500px) {
  .element {
    /* do something.. */
  }
}

/*  */

@media (orientation: landscape) {
  .element {
    /* do something.. */
  }
}


UnitĂ©s de mesure liĂ©es Ă  la fenĂȘtre



L'utilisation d'unitĂ©s de mesure liĂ©es Ă  la taille de la fenĂȘtre peut aider Ă  amĂ©liorer l'expĂ©rience utilisateur sur les sites. Par exemple, en tenant compte de la hauteur de la fenĂȘtre, vous pouvez ajuster la distance verticale entre les Ă©lĂ©ments.



.hero__title {
  margin-bottom: calc(10px + 5vh);
}






Plus la fenĂȘtre du navigateur est haute, plus la distance entre les Ă©lĂ©ments est grande.



Tout cela peut sembler une petite chose sympa qui n'affecte vraiment rien, mais seulement jusqu'Ă  ce que vous regardiez une page similaire sur un grand Ă©cran - comme un Ă©cran iMac 27 pouces. Ensuite, il s'avĂšre que la hauteur de la fenĂȘtre est trop Ă©levĂ©e. Mais nous avons heureusement un moyen de limiter la taillemargin-bottom. Cela peut ĂȘtre fait, par exemple, des maniĂšres suivantes:



  • Utilisation de requĂȘtes multimĂ©dias.
  • Utilisation des fonctions de comparaison CSS.


La premiĂšre mĂ©thode (requĂȘte multimĂ©dia) a certainement une meilleure prise en charge du navigateur. Son essence est de limiter la valeur maximale margin-bottomdans les cas oĂč la page est affichĂ©e sur de trĂšs grands Ă©crans.



@media (min-width: 2200px) {
  .hero__title {
    margin-bottom: 40px;
  }
}


La deuxiĂšme mĂ©thode consiste Ă  utiliser une fonction CSS clamp(). Lors du choix des valeurs passĂ©es Ă  cette fonction, nous dĂ©finissons, dans ce cas, la taille de retrait minimale, Ă©gale Ă  10px, le maximum - 50px, et les valeurs entre ces deux dĂ©pendent de la taille de la fenĂȘtre du navigateur.



.hero__title {
  margin-bottom: clamp(10px, 5vh, 40px);
}


Si ce sujet vous intĂ©resse, jetez un Ɠil Ă  mes articles sur les unitĂ©s de mesure en fonction de la taille de la fenĂȘtre d'affichage de la page et sur les fonctions CSS .



Ci-dessous, nous parlerons des diffĂ©rentes façons d'utiliser les requĂȘtes multimĂ©dias verticales.



Exemples et scénarios



▍ÉlĂ©ments de page qui se chevauchent lors de la modification de la hauteur de la fenĂȘtre du navigateur



Cet exemple est pour une page qui a un titre et une illustration dans la section supĂ©rieure. La hauteur de cette partie de la page est 100vhĂ©gale Ă  100% de la hauteur de la fenĂȘtre.





Le haut de la page avec une hauteur de 100vh



Tout semble trĂšs bien, mais seulement jusqu'Ă  ce que la hauteur de la fenĂȘtre du navigateur diminue. Le haut de la page n'est pas assez haut pour accueillir l'illustration et le texte. Par consĂ©quent, les Ă©lĂ©ments en haut de la page chevaucheront le contenu des autres sections de la page.





La diminution de la hauteur de la fenĂȘtre du navigateur rompt la conception.



Notez que les images se chevauchent avec la section de la page situĂ©e en haut de la page. Cela est dĂ» au fait qu'ils n'ont pas assez d'espace. Jetons un coup d'Ɠil au code de cet exemple.



Voici le balisage:



<div class="hero">
  <div class="hero__wrapper">
    <div class="hero__content"><!-- content --></div>
    <img class="hero__thumb" src="figure.png" alt="" />
  </div>
</div>


Voici les styles:



.hero {
  height: 100vh;
}

.hero__thumb {
  flex: 0 0 550px;
  width: 550px;
}


Considérons plusieurs options pour résoudre de tels problÚmes:



  • Vous pouvez donner Ă  l'image des dimensions fixes (propriĂ©tĂ©s widthet height), pas seulement sa largeur ( width). Le manque de propriĂ©tĂ© heightest l'une des raisons de notre problĂšme.
  • Vous ne pouvez appliquer la propriĂ©tĂ© Ă  la section supĂ©rieure de la page height: 100vhque si la hauteur de la fenĂȘtre d'affichage est plus grande 700px(bien entendu, les valeurs spĂ©cifiques utilisĂ©es dans la requĂȘte multimĂ©dia varient en fonction de votre situation).


Vous pouvez combiner ces deux approches et obtenir une solution plus fiable Ă  ces problĂšmes:



.hero__thumb {
  width: 400px;
  height: 300px;
  object-fit: contain; /*     */
}

@media (min-height: 700px) {
  .hero {
    height: 100vh;
  }
}


Nous avons donc dĂ©cidĂ© que les requĂȘtes multimĂ©dias «verticales» sont un mĂ©canisme stable et utile. Mais utiliser une valeur 100vhest une entreprise risquĂ©e, car mĂȘme si vous pouvez limiter la taille de l'image, il se peut que la taille du texte ne puisse pas ĂȘtre limitĂ©e. Par exemple, si le texte de la section supĂ©rieure de la page s'avĂšre plus long, nous ferons face Ă  une nouvelle variante du problĂšme que nous connaissons dĂ©jĂ .





Le texte chevauche une section du site lĂ  oĂč il ne devrait pas se trouver.



Pour résoudre ce problÚme, vous pouvezheightutiliser une propriétéau lieu d'unepropriétémin-height. Avec cette approche, si le contenu d'une section est plus grand qu'il ne peut en contenir, sa taille augmentera et son contenu ne couvrira pas la section suivante.



@media (min-height: 700px) {
  .hero {
    min-height: 100vh;
  }
}


▍ Titre de page fixe



Il n'y a rien de mal Ă  ce que le titre de la page reste au mĂȘme endroit lors du dĂ©filement. Mais vous devez vous assurer que ce titre a une position fixe uniquement s'il y a suffisamment d'espace vertical sur l'Ă©cran.





Titre de page fixe



Il montre le site en cours de visualisation en mode paysage. Notez que l'en-tĂȘte occupe trop d'espace vertical. Est-ce important pour l'utilisateur? Dans la plupart des cas, non. Mais vous pouvez amĂ©liorer l'expĂ©rience utilisateur de l'utilisation du site en recourant Ă  la requĂȘte multimĂ©dia suivante:



@media (min-height: 700px) {
  .site-header {
    /* position: fixed  position: sticky */
  }
}


Avec cette approche en mode paysage, le titre ne sera pas figé.



▍Cacher les Ă©lĂ©ments qui sont moins importants que d'autres



J'ai remarquĂ© cela sur le menu de navigation de Twitter. À savoir, nous parlons d'une combinaison de requĂȘtes multimĂ©dias «verticales» et du modĂšle Priority + .





Les éléments sélectionnés seront masqués s'ils manquent d'espace.



Lorsque la hauteur de la fenĂȘtre change, les Ă©lĂ©ments moins importants (Ă©lĂ©ments de menuBookmarksetLists) deviennent des sous-Ă©lĂ©mentsMore. Ceci est un bon exemple de l'utilisation de requĂȘtes multimĂ©dias «verticales».



.nav__item--secondary {
  display: none;
}

@media (min-height: 700px) {
  .nav__item--secondary {
    display: block;
  }
}


Et voici mon tweet analysant l'application de cette approche sur Twitter.



▍Navigation et modification de la hauteur de la fenĂȘtre



L'exemple suivant est liĂ© au prĂ©cĂ©dent. Il y a une barre de navigation verticale (barre latĂ©rale, barre latĂ©rale). Si la hauteur de la fenĂȘtre est petite, vous pouvez rĂ©duire lĂ©gĂšrement la distance verticale entre les Ă©lĂ©ments de navigation, ce qui amĂ©liorera lĂ©gĂšrement l'apparence de la page.





Espacement entre les Ă©lĂ©ments et hauteur de la fenĂȘtre



Voici les styles de cet exemple:



.nav__item {
  padding-top: 4px;
  padding-bottom: 4px;
}

@media (min-height: 700px) {
  .nav__item {
    padding-top: 10px;
    padding-bottom: 10px;
  }
}


Et ici, vous pouvez regarder une vidéo pour cela.



En outre, on peut noter que dans une telle situation, la taille de la police peut Ă©galement ĂȘtre modifiĂ©e, ce qui, lorsque la hauteur de la fenĂȘtre du navigateur est rĂ©duite, donnera encore plus de place aux Ă©lĂ©ments.



▍ Section supĂ©rieure de la page et hauteur de la fenĂȘtre



La section supĂ©rieure de la page a besoin d'un espace vertical libre pour lui donner un peu d'air. Les dimensions de cet espace peuvent dĂ©pendre de la hauteur de la fenĂȘtre.





Plus la page est haute, plus il y a "d'air".



Voici Ă  quoi ressemblent les styles de cet exemple:



.hero {
  padding-top: 24px;
  padding-bottom: 24px;
}

@media (min-height: 700px) {
  .hero {
    padding-top: 40px;
    padding-bottom: 40px;
  }
}


▍Composants modaux



Comme vous le savez peut-ĂȘtre dĂ©jĂ , les composants modaux doivent ĂȘtre au moins centrĂ©s horizontalement. Mais vous devrez peut-ĂȘtre aligner un tel Ă©lĂ©ment verticalement. C'est possible, mais cela empĂȘche de changer la quantitĂ© de donnĂ©es gĂ©nĂ©rĂ©es par ces Ă©lĂ©ments.



Si le modal contient la bonne quantité de données, il semble trÚs bien, comme indiqué ci-dessous.





ÉlĂ©ment modal correct



Voici les styles de cet élément:



.modal__body {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 500px;
}


Mais si plus de texte doit ĂȘtre affichĂ© dans le mĂȘme Ă©lĂ©ment, tout ne sera pas si bon. À savoir, l'Ă©lĂ©ment remplira l'Ă©cran verticalement et l'utilisateur ne pourra pas faire dĂ©filer son contenu.





ÉlĂ©ment modal trop grand



Ce problĂšme se produit pour les raisons suivantes:



  • Le modal n'a pas de hauteur spĂ©cifiĂ©e.
  • L'Ă©lĂ©ment est centrĂ© verticalement (cela accĂ©lĂ©rera le problĂšme).


Voici le CSS qui résout ces problÚmes:



.modal__body {
  position: absolute;
  left: 50%;
  top: 3rem;
  transform: translateX(-50%);
  width: 500px;
  min-height: 200px;
  max-height: 500px;
  overflow-y: auto;
}

@media (min-height: 700px) {
  .modal__body {
    top: 50%;
    transform: translate(-50%, -50%);
  }
}


Notez que les propriĂ©tĂ©s min-heightet sont utilisĂ©es ici min-width. La premiĂšre est que l'Ă©lĂ©ment soit beau mĂȘme lorsqu'il affiche un texte court. Et le second permet de limiter sa hauteur Ă  une valeur donnĂ©e au lieu de lui donner une hauteur constante.





ÉlĂ©ment modal adaptĂ© Ă  l'affichage de longs textes



RĂ©sultat



Lors de la conception de sites Web en tenant compte de l'expĂ©rience que les utilisateurs obtiendront en travaillant avec eux, il est prĂ©fĂ©rable de construire leur conception en fonction de la largeur et de la hauteur de la fenĂȘtre du navigateur. Cela peut sembler Ă©trange Ă  quelqu'un qui teste des pages dans des fenĂȘtres de diffĂ©rentes hauteurs, mais un tel test se justifie. Ici, j'ai parlĂ© de l'importance d'une approche «verticale» de la conception de sites Web, comment concevoir des pages afin de les afficher correctement dans des fenĂȘtres de diffĂ©rentes hauteurs, et j'ai regardĂ© des exemples. J'espĂšre que vous trouverez tout cela utile.



Faites-vous attention Ă  l'apparence des pages Web que vous crĂ©ez dans les fenĂȘtres de navigateur de diffĂ©rentes hauteurs?










All Articles