Conception d'en-tĂȘtes de site Web Ă  l'aide de CSS Flexbox

Quand j'ai commencĂ© Ă  dĂ©velopper des sites Web aprĂšs avoir appris les bases du HTML et du CSS en 2014, la chose la plus difficile et la plus effrayante pour moi Ă©tait de crĂ©er leurs en-tĂȘtes. Flexbox Ă©tait encore assez nouveau Ă  l'Ă©poque, nous avons donc dĂ» utiliser d'anciennes techniques comme le positionnement des flotteurs et les techniques de clearfix. Aujourd'hui, le monde du dĂ©veloppement front-end a complĂštement changĂ©. À savoir, la technologie Flexbox a reçu une large prise en charge du navigateur, ce qui nous ouvre de nombreuses nouvelles possibilitĂ©s. Quelqu'un pourrait dire qu'aujourd'hui, en raison du fait que nous avons des technologies CSS modernes pour dĂ©velopper des mises en page, il est plus facile de crĂ©er la partie d'en-tĂȘte du site que dans l'ancien temps. Mais en fait ce n'est pas le cas. Et aujourd'hui, lors de la conception de mises en page, vous devez rĂ©soudre des problĂšmes difficiles et intĂ©ressants. Je vais en parler dans cet article.











À savoir, ici, je vais vous montrer comment utiliser les mises en page Flexbox pour crĂ©er des en-tĂȘtes de haute qualitĂ© pour les sites Web. Je partagerai quelques astuces, et Ă  la fin, je prĂ©senterai mon projet, crĂ©Ă© spĂ©cifiquement pour ce matĂ©riel. Par consĂ©quent, si vous ĂȘtes vraiment intĂ©ressĂ© par le sujet que j'ai dĂ©cidĂ© de soulever ici, vous devriez certainement lire cet article jusqu'Ă  la fin.



Ici, je suppose que vous connaissez les bases de la mise en page Flexbox. Voici , au cas oĂč, mon article est Ă©crit pour ceux qui veulent en savoir plus sur la propriĂ©tĂ© CSS flex.



introduction



Tout d'abord, assurons-nous que vous et moi appelons la mĂȘme chose "en-tĂȘte de site" ou "en-tĂȘte de site". L'en-tĂȘte du site est l'un des premiers Ă©lĂ©ments de page qu'un utilisateur voit lors de la visite d'un site. Il contient gĂ©nĂ©ralement le logo ou le nom du site, ainsi que des liens de navigation. Jetez un Ɠil Ă  la figure suivante.





Logo du site, liens de navigation et partie en-tĂȘte du conteneur du site



Quelle que soit la conception de la partie en-tĂȘte du site, ses Ă©lĂ©ments clĂ©s sont le logo et la liste des liens.



La technologie Flexbox en action



Lorsque la mise en page de l'en-tĂȘte d'un site est crĂ©Ă©e Ă  l'aide de la technologie Flexbox, tous les Ă©lĂ©ments du mĂȘme niveau sont alignĂ©s sur une seule ligne. Il ne reste alors plus qu'Ă  utiliser la propriĂ©tĂ© justify-contentpour aligner les Ă©lĂ©ments en rĂ©partissant l'espace libre entre eux.



Voici le code de balisage:



<header class="site-header">
  <a href="#" class="brand">Brand</a>
  <nav class="nav"></nav>
</header>


Voici les styles:



.site-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}


Ce n'est pas du tout compliquĂ©, non? Eh bien, pour un titre aussi simple, ça l'est. Mais en pratique, les choses peuvent ĂȘtre beaucoup plus compliquĂ©es.



Conteneur d'en-tĂȘte de page



Le balisage d'en-tĂȘte de page dĂ©crit dans la section prĂ©cĂ©dente ne contient pas d'Ă©lĂ©ment conteneur interne contenant des Ă©lĂ©ments qui reprĂ©sentent le logo et les liens de navigation. Sur de grands Ă©crans, l'utilisation de cette disposition peut ĂȘtre problĂ©matique.





Mise en page d'en-tĂȘte de page crĂ©Ă©e sans utiliser de conteneur interne (ci-dessus) et en utilisant un conteneur (ci-dessous)



Notez que l'en-tĂȘte de premiĂšre page est trop large car le conteneur interne n'a pas Ă©tĂ© utilisĂ© lors de sa crĂ©ation. Mais la deuxiĂšme mise en page est bien meilleure. Par consĂ©quent, le code HTML de l'exemple prĂ©cĂ©dent doit ĂȘtre rĂ©Ă©crit comme suit:



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
  </div>
</header>


Et les styles flex doivent ĂȘtre appliquĂ©s Ă  l'Ă©lĂ©ment .site-header__wrapper:



.site-header__wrapper {
  display: flex;
  justify-content: space-between;
  align-items: center;
}


Utilisation de la propriété flex-wrap



Une propriĂ©tĂ© flex-wrapest une sorte de mĂ©canisme de sĂ©curitĂ© CSS. Si la taille de l'Ă©cran est petite, il est possible que vous deviez utiliser le dĂ©filement horizontal pour travailler avec la partie en-tĂȘte de la page. VoilĂ  Ă  quoi ça ressemble.





Pour travailler avec le titre de la page, vous devez utiliser le défilement horizontal. Le fait est que la propriété flex-wrap n'est pas utilisée ici: wrap



Comme vous pouvez le voir, il ne sera pas pratique de travailler avec une telle page. Alors n'oubliez pas la propriétéflex-wrap!



Explorer diffĂ©rentes options de mise en page pour les sections d'en-tĂȘte de page



Ce que j'aime dans les mises en page Flexbox, c'est qu'elles facilitent la prise en charge de diffĂ©rentes options de conception pour les sections d'en-tĂȘte des pages. Dans cette section, basĂ©e sur l'exemple ci-dessus, je vais explorer les possibilitĂ©s d'Ă©largir la mise en page en y ajoutant de nouveaux Ă©lĂ©ments, tels que des boutons et des champs de recherche. ImmĂ©diatement, je souhaite explorer les moyens de modifier l'ordre d'affichage des enfants de l'en-tĂȘte de la page.



▍Variant numĂ©ro 1





PremiĂšre version de la partie en-tĂȘte de la page



Un bouton a Ă©tĂ© ajoutĂ© Ă  cette mise en page, placĂ© aprĂšs le bloc de liens de navigation. Comment faire? Dois-je le formater sous forme de lien placĂ© Ă  l'intĂ©rieur de l'Ă©lĂ©ment<nav>? Ou peut-ĂȘtre faudrait-il en faire un Ă©lĂ©ment distinct? Je vais faire exactement cela.



Voici le HTML pour mon idée:



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
    <a href="/track-shipment" class="button">Track</a>
  </div>
</header>


Dans ce cas, la distance entre les Ă©lĂ©ments ne peut pas ĂȘtre dĂ©finie Ă  l'aide de la propriĂ©tĂ© justify-content: space-between. Au lieu de cela, j'utiliserai la propriĂ©tĂ© pour aligner le bloc de liens margin-left: auto. Cela poussera les liens et les boutons sur le cĂŽtĂ© droit du conteneur.





Les éléments, grùce à margin-left: auto, sont pressés sur le cÎté droit du conteneur La



sĂ©paration du bouton du bloc de lien est utile pour les mises en page mobiles, oĂč, par exemple, vous devrez peut-ĂȘtre quitter le bouton et prĂ©senter le bloc de lien sous forme de menu dĂ©roulant.





En-tĂȘte de page sur ordinateur et mobile



▍ NumĂ©ro d'option 2





La deuxiĂšme variante de la partie en-tĂȘte de la page



Ici, nous avons Ă©largi les capacitĂ©s de la partie en-tĂȘte de la page en y ajoutant un champ de recherche. Il occupe l'espace libre laissĂ© aprĂšs avoir placĂ© d'autres Ă©lĂ©ments sur la page. Avec les mises en page Flexbox, cela peut ĂȘtre rĂ©alisĂ© en appliquant la propriĂ©tĂ©flex.



Voici le balisage:



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <div class="search"></div>
    <nav class="nav"></nav>
    <a href="/track-shipment" class="button">Track</a>
  </div>
</header>


Voici le style appliqué au champ de recherche:



.search {
  flex: 1;
}


C'est tout! Maintenant, le champ remplira l'espace vide entre le logo et le bloc de liens. Cependant, cette approche prĂ©sente certaines limites. Sur les petits Ă©crans, l'en-tĂȘte de la page ressemblera Ă  ci-dessous.





En-tĂȘte de page sur un petit Ă©cran



La largeur du champ de recherche ne doit pas ĂȘtre infĂ©rieure Ă  une certaine taille. Sinon, il sera difficile d'y entrer du texte. Voici plusieurs solutions Ă  ce problĂšme.





Résoudre le problÚme causé par la diminution de la largeur du champ de recherche sur les petits écrans



J'aime mieux la deuxiĂšme option, car lors de son utilisation, le bloc de liens n'est pas masquĂ© trop tĂŽt. En gĂ©nĂ©ral, je peux noter que je m'efforce de ne pas masquer l'Ă©lĂ©ment dans le cas oĂč il n'interfĂšre pas avec l'affichage correct de la mise en page.



▍ NumĂ©ro d'option 3





La troisiĂšme version de la partie d'en-tĂȘte



Il s'agit du mĂȘme balisage que la premiĂšre version de l'en-tĂȘte. Mais ici, l'ordre d'affichage des Ă©lĂ©ments Ă  l'Ă©cran a Ă©tĂ© modifiĂ©. Comment faire? Vous pouvez dĂ©cider d'utiliser la propriĂ©tĂ© iciorder. Explorons cette idĂ©e.



Voici le HTML:



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
    <a href="/track-shipment" class="button">Track</a>
  </div>
</header>


Voici les styles:



.site-header {
  display: flex;
  justify-content: space-between;
}

.nav {
  order: -1;
}


Et voici à quoi ressemble le résultat du rendu de tout cela.





L'utilisation de la propriété justify-content: space-between n'aligne pas le logo sur le centre. Cette propriété ne distribue que l'espace libre entre les éléments.



La solution Ă  ce problĂšme consiste Ă  affecter chaque Ă©lĂ©ment enfant Ă  l'en-tĂȘte de la page avec une propriĂ©tĂ©flex: 1. Cela distribuera l'espace entre les Ă©lĂ©ments.



Voici les styles:



.brand,
.nav,
.button {
  flex: 1;
}




RĂ©partition uniforme de l'espace libre entre les Ă©lĂ©ments de la partie d'en-tĂȘte de la page



Cependant, quelque chose d'étrange s'est produit avec le bouton. Cela, en raison de l'application de la propriétéflex: 1, est devenu trop long. La seule façon de résoudre ce problÚme est de placer le bouton dans un élément conteneur:



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
    <div class="button-wrapper">
      <a href="/track-shipment" class="button">Track</a>
    </div>
  </div>
</header>


Avec cette approche, vous pouvez centrer l'alignement du logo et du bouton:



.logo {
  text-align: center;
}

/*      .  -  ,    ,           . */
.button-wrapper {
  text-align: end; /* end - ,  LTR-,   ,   right */
}




Aligner les éléments



Cette approche n'est cependant pas non plus idĂ©ale. N'oubliez pas que s'il y a plus de liens dans le bloc de navigation, cela entraĂźnera des problĂšmes. A savoir, ici il faut que la largeur du bloc de navigation ne dĂ©passe pas une certaine taille. Voici un exemple oĂč le logo perd son alignement central.





Le logo n'est plus centré,



comme vous pouvez le voir, dans l'image précédente, le logo n'est plus centré. Il convient de rappeler cette caractéristique de l'approche ci-dessus afin de ne pas faire face à des problÚmes inattendus.



Maintenant que nous avons explorĂ© les diffĂ©rentes options de conception de mises en page d'en-tĂȘte pour les sites Web et expliquĂ© comment crĂ©er de telles mises en page, examinons quelques idĂ©es importantes qui peuvent nous aider lors de la crĂ©ation de sections d'en-tĂȘte pour les pages.



Conseils pour la conception d'en-tĂȘtes pour les pages Flexbox



▍La propriĂ©tĂ© de base flexible



Je prĂ©fĂšre utiliser une propriĂ©tĂ© flex-basis: 100%lorsque l'Ă©lĂ©ment doit ĂȘtre pleine largeur sur les appareils mobiles. Par exemple, si nous parlons d'un bloc important de liens de navigation qui ne peuvent pas ĂȘtre masquĂ©s.





Le résultat de l'application de la propriété de base flexible est de 100%.



L'application de cette propriĂ©tĂ©, si vous regardez la figure prĂ©cĂ©dente, peut sembler simple. En rĂ©alitĂ©, ce n'est pas le cas. En rĂšgle gĂ©nĂ©rale, l'en-tĂȘte d'un site peut avoir un remplissage, et si nous ajustons l'Ă©lĂ©ment pour qu'il remplisse toute la largeur, cela ne se produira pas tant que le remplissage ne sera pas superposĂ©. Cependant, les supprimer n'est pas pratique, car cela affectera d'autres Ă©lĂ©ments de la mise en page.



Voici comment résoudre ce problÚme:



  1. Ajoutons flex: 1 0 100%au bloc de navigation.
  2. Modifions, si nécessaire, sa propriété order. Parfois, nous devons également nous occuper d'autres éléments, nous devons donc nous assurer que la zone de navigation est le dernier élément.
  3. Ajustez les marges du bloc de navigation en utilisant une valeur négative égale à la taille des marges internes. Cela permettra à ce bloc de remplir toute la largeur de la page.
  4. Ajustez le rembourrage pour qu'il y ait un peu "d'air" dans l'élément.
  5. Enfin, nous utiliserons la propriété justify-content: centerpour centrer les éléments de navigation (bien que ce ne soit pas particuliÚrement important).


Voici les styles (entre crochets, les éléments de la liste ci-dessus auxquels ils se rapportent):



.nav {
  flex: 1 0 100%; /* [1] */
  order: 2; /* [2] */
  margin: 1rem -1rem -1rem -1rem; /* [3] */
  padding: 1rem; /* [4] */
  display: flex; /* [5] */
  justify-content: center; /* [5] */
}


Et voici à quoi ressemblera l'application étape par étape des styles ci-dessus à la liste des éléments de navigation.





Styliser les éléments étape par étape



▍RĂ©gler la distance entre les Ă©lĂ©ments



Maintenant que les navigateurs Chrome et Firefox prennent en charge la propriĂ©tĂ© gap, il est trĂšs facile d'ajuster l'espacement entre les Ă©lĂ©ments flexibles. Jetez un Ɠil Ă  la section d'en-tĂȘte suivante de la page.





Utilisation de la propriété gap



Pour ajuster la distance entre les Ă©lĂ©ments sĂ©lectionnĂ©s dans la figure, vous devez ajouter une propriĂ©tĂ© Ă  l'Ă©lĂ©ment flex parentgap: 1rem. Sans utiliser cette propriĂ©tĂ©, nous aurions Ă  styliser les Ă©lĂ©ments de la mĂȘme maniĂšre.



/*   */
.brand {
  margin-right: 1rem;
}

.sign-in {
  margin-right: 1rem;
}

/*   */
.site-header {
  /*  flexbox-*/
  gap: 1rem;
}


Si vous utilisez une propriĂ©tĂ© gap, rappelez-vous que vous devrez prĂ©parer et une solution de secours au cas oĂč elle ne serait pas prise en charge par le navigateur dans lequel la page est affichĂ©e. J'ai Ă©crit un article dĂ©taillĂ© Ă  ce sujet .



Ceci conclut la conversation, mais avant de nous séparer, laissez-moi vous montrer l'un de mes projets.



Projet Headers-CSS



Voici un exemple d'en-tĂȘtes de pages crĂ©Ă©es dans le projet headers-css.





En-tĂȘtes de pages de headers-css



J'ai dĂ©cidĂ© de crĂ©er un projet dans lequel des modĂšles pour les parties d'en-tĂȘte de sites Web sont collectĂ©s, conçus comme des pages sĂ©parĂ©es. Maintenant, si j'ai besoin d'un Ă©lĂ©ment similaire, je peux le trouver rapidement et l'intĂ©grer dans un nouveau projet. À savoir, j'ai crĂ©Ă© 17 variantes de l'en-tĂȘte de page. Je prĂ©vois d'Ă©tendre ce projet dans un proche avenir. En travaillant sur ces Ă©lĂ©ments, j'ai portĂ© une attention particuliĂšre aux Ă©lĂ©ments suivants:



  • Souplesse.
  • Conception entiĂšrement rĂ©active.
  • Utilisation de Sass, ce qui facilite la modification de mes modĂšles (bien que dans ce domaine, je dois encore refactoriser un peu le code).
  • AccessibilitĂ© (si vous rencontrez un problĂšme - veuillez ajouter une entrĂ©e au suivi des tĂąches du projet).


Voici une page pour voir le projet headers-css en action. Et voici le référentiel GitHub du projet.



Comment crĂ©ez-vous les parties d'en-tĂȘte de vos pages Web?










All Articles