Prise en charge des fonctions de comparaison CSS min()
, max()
et clamp()
apparu dans Firefox le 8 avril 2020. Cela signifie que ces fonctionnalitĂ©s sont dĂ©sormais prises en charge dans tous les principaux navigateurs. Ces fonctionnalitĂ©s CSS Ă©tendent notre capacitĂ© Ă crĂ©er des mises en page dynamiques et Ă concevoir des composants plus flexibles qu'auparavant. Ils peuvent ĂȘtre utilisĂ©s pour ajuster la taille des Ă©lĂ©ments de conteneur, des polices, des retraits, etc. Certes, un concepteur de sites Web qui crĂ©e des mises en page en tenant compte de la possibilitĂ© d'utiliser ces fonctions Ă©tonnantes peut avoir besoin d'apprendre Ă penser diffĂ©remment. Aujourd'hui, je veux parler des caractĂ©ristiques de ces fonctions, expliquer tout ce qui peut leur ĂȘtre incomprĂ©hensible et donner des exemples pratiques de leur utilisation.
Prise en charge du navigateur
Tout d'abord, je voudrais aborder la prise en charge du navigateur pour les fonctions min()
, max()
et clamp()
. Néanmoins, ils sont apparus relativement récemment. Il convient de noter que les fonctions min()
et max()
utilisent le mĂȘme niveau de prise en charge du navigateur.Prise en charge de la fonction min () (les informations de prise en charge max () ressemblent Ă©galement Ă ceci)Voici des informations sur la prise en charge de la fonctionclamp()
.Prise en charge de la fonction Clamp ()Fonctions de comparaison CSS
La spécification CSS nous dit qu'il ya comparaison des fonctions min()
, max()
et clamp()
nous permettent de comparer les valeurs des expressions et représentent l' un d'eux. La valeur renvoyée par une fonction dépend de ses fonctionnalités. Explorez ces fonctionnalités.Fonction Min ()
Une fonction min()
prend une ou plusieurs valeurs, séparées par une virgule, et renvoie la plus petite d'entre elles. Cette fonction est utilisée pour limiter les valeurs des propriétés CSS à un niveau maximum strictement spécifié.Prenons l'exemple suivant. Nous avons besoin que la largeur maximale de l'élément ne dépasse pas 500px
..element {
width: min(50%, 500px);
}
Avec une largeur de fenĂȘtre d'affichage de 1150 pixels, supĂ©rieure Ă 1000 pixels, l'Ă©lĂ©ment aura une largeur de 500 pixels. Lenavigateur devra sĂ©lectionner la plus petite valeur parmi50%
et500px
. La largeur de la fenĂȘtre affecte le rĂ©sultat de la sĂ©lection. Si 50% de la largeur de la fenĂȘtre est supĂ©rieure Ă 500px
, cette valeur sera ignorée et la fonction reviendra500px
.Sinon, si 50% de la largeur de la fenĂȘtre est infĂ©rieure500px
, la valeur résultante sera utilisée pour ajuster la largeur de l'élément. Que pensez-vous, à quelle largeur de la zone de visualisation 50% de sa largeur ne dépassera pas500px
? C'est évidemment1000px
. Avec cette largeur, les deux valeurs passĂ©es Ă la fonction seront les mĂȘmes. Si la largeur de la fenĂȘtre est infĂ©rieure1000px
, il sera ensuite utilisĂ© pour ajuster la largeur de l'Ă©lĂ©ment.Si la largeur de la fenĂȘtre d'affichage est infĂ©rieure Ă 1000 pixels, alors 50% de cette largeur sera utilisĂ©e pour ajuster la largeur de l'Ă©lĂ©ment.J'espĂšre que j'ai rĂ©ussi Ă expliquer clairement tout cela. J'ai longtemps rĂ©flĂ©chi Ă la fonctionmin()
, essayant de pénétrer dans son essence. Par conséquent, j'aimerais beaucoup en parler clairement. Voici une vidéo montrant les résultats de l'utilisation de cette fonctionnalité.La largeur de l'élément est limitée à 500 pixels.Voici un exemple interactif utilisé pour enregistrer la vidéo ci-dessus. Pour voir la fonctionmin()
en action, essayez de redimensionner la fenĂȘtre du navigateur.Fonction max ()
La fonction max()
prend une ou plusieurs valeurs, séparées par des virgules, et renvoie la plus grande d'entre elles. Cette fonction est utilisée pour fixer la valeur minimale qu'une propriété CSS peut prendre.Dans l'exemple suivant, nous avons besoin que la largeur de l'élément soit au moins 500px
..element {
width: max(50%, 500px);
}
Si 50% de la largeur de la fenĂȘtre est supĂ©rieure Ă 500 pixels - cette valeur sera utilisĂ©e pour ajuster la largeur de l'Ă©lĂ©ment. Lenavigateur doit sĂ©lectionner la valeur maximale Ă partir de50%
et500px
. Le choix dĂ©pend de la largeur de la fenĂȘtre. Si 50% de la largeur de la fenĂȘtre est infĂ©rieure Ă 500px
, le navigateur ignorera cette valeur et utilisera la valeur500px
.Si 50% de la largeur de la fenĂȘtre est supĂ©rieure500px
, la largeur de l'élément sera définie égale à cette valeur. Comme vous pouvez le voir, une fonctionmax()
est l'opposé d'une fonctionmin()
.Pour mieux comprendre cela, jetez un Ćil Ă cette dĂ©mo interactive.Fonction Clamp ()
La fonction clamp()
vous permet de limiter la plage de variation d'une certaine valeur en définissant ses limites inférieure et supérieure. Il prend trois paramÚtres: la valeur minimale, la valeur calculée (recommandée) et la valeur maximale. Si la valeur calculée ne dépasse pas les limites limitées par les valeurs minimale et maximale transmises à la fonction, elle renverra cette valeur.Voici un exemple..element {
width: clamp(200px, 50%, 1000px);
}
Ici, nous ajustons la largeur de l'Ă©lĂ©ment, qui ne devrait pas ĂȘtre de moins en 200px
plus 1000px
. Si la valeur dans 50%
ne dĂ©passe pas ces limites, cette valeur est utilisĂ©e. Voici Ă quoi ça ressemble.Si 50% de la largeur de la fenĂȘtre tombe dans la plage de 200px-1000px - cette valeur sera utilisĂ©e pour dĂ©finir la largeur de l'Ă©lĂ©ment. Dans ce cas, c'est 575px.Examinons cet exemple:- La largeur d'un Ă©lĂ©ment ne sera jamais plus petite
200px
. - Le deuxiÚme paramÚtre de la fonction, défini sur
50%
, ne sera utilisĂ© que si la largeur de la fenĂȘtre est de plus en plus 400px
petite 2000px
. - La largeur de l'article ne dépassera pas
1000px
.
Par conséquent, nous pouvons dire que la fonction clamp()
vous permet de spécifier la plage dans laquelle la valeur calculée qui lui est transmise peut changer.Ici, vous pouvez tester la page stylisée à l'aide de cette fonction.OwComment les résultats de la fonction clamp () sont-ils calculés?
Vous pouvez trouver des informations sur MDN selon lesquelles lorsqu'une fonction est utilisée comme valeur d'une propriété CSS clamp()
, elle est équivalente à la construction dans laquelle les fonctions max()
et sont appliquées min()
. Jetez un Ćil Ă l'exemple suivant:.element {
width: clamp(200px, 50%, 1000px);
width: max(200px, min(50%, 1000px));
}
La valeur 50%
dĂ©pend de la largeur de la zone d'affichage du navigateur. Imaginez que la largeur de la fenĂȘtre soit 1150px
..element {
width: max(200px, min(50%, 1000px));
width: max(200px, min(575px, 1000px));
width: max(200px, 575px);
width: 575px;
}
âLe contexte compte
La valeur calculée dépend du contexte. Si vous spécifiez une valeur calculée, vous pouvez utiliser différentes unités de mesure: %
, em
, rem
, vw/vh
. MĂȘme si la valeur est exprimĂ©e en pourcentage, lors du calcul, soit la largeur de la zone d'affichage peut ĂȘtre utilisĂ©e - si l'Ă©lĂ©ment est dans la balise <body>
, soit la largeur d'un autre Ă©lĂ©ment qui est le conteneur de l'Ă©lĂ©ment.âMath expressions
Il vaut la peine de dire que lorsque vous utilisez une fonction, clamp()
vous pouvez lui passer des expressions mathématiques, ce qui nous évite d'avoir à utiliser une fonction calc()
. La spécification nous dit que clamp()
des expressions mathĂ©matiques complĂštes peuvent ĂȘtre utilisĂ©es dans chacun des arguments . Par consĂ©quent, il n'y a pas besoin de fonctions imbriquĂ©es calc()
. En outre, si vous devez appliquer plusieurs restrictions Ă la valeur finale, vous pouvez passer plus de deux arguments Ă la fonction.Jetez un Ćil Ă l'exemple suivant:.type {
font-size: clamp(12px, 10 * (1vw + 1vh) / 2, 100px);
}
Qu'est-ce que les fonctions de comparaison CSS changeront dans la façon dont nous concevons les mises en page?
Il arrive souvent qu'un concepteur, en concevant une page, se concentre sur les appareils mobiles et de bureau, en comptant sur deux scĂ©narios pour son utilisation. Et lorsque vous travaillez sur certains projets, d'autres scĂ©narios doivent ĂȘtre pris en compte.Je vois cette situation comme indiquĂ© ci-dessous.Ă l'Ă©tage, c'est la façon dont les pages sont conçues aujourd'hui. Vous trouverez ci-dessous ce Ă quoi vous pouvez vous attendre Ă l'avenir: lehaut de l'illustration est la conception des pages de nos jours. Ici, vous pouvez voir plusieurs Ă©tapes reprĂ©sentant diffĂ©rentes zones d'affichage sur lesquelles la page doit ĂȘtre conçue. Ces Ă©tapes peuvent, par exemple, reprĂ©senter la valeur d'une propriĂ©tĂ©. La partie infĂ©rieure de l'illustration montre une plage continue de valeurs qui peut ĂȘtre obtenue en limitant cette valeur Ă un certain minimum et un maximum. Je pense qu'Ă l'avenir, par exemple, lors de la dĂ©finition de la taille de la police, les concepteurs feront quelque chose de similaire Ă celui illustrĂ© ci-dessous.Les valeurs minimales, recommandĂ©es et maximales de la propriĂ©tĂ©.Pour moi, c'est tout simplement merveilleux. J'admire l'idĂ©e de travailler sur des projets dont les composants nĂ©cessitent une certaine flexibilitĂ©. Bien sĂ»r, tous les composants n'ont pas besoin d'ĂȘtre dynamiques, mais certains peuvent trĂšs bien l'ĂȘtre.Cas d'utilisation
â Barre latĂ©rale et zone de page principale
à gauche, le panneau latéral. Sur la droite se trouve la zone principale de la page.Habituellement, les panneaux latéraux des pages ont une largeur fixe, et la largeur des zones principales s'adapte de maniÚre flexible à la zone de visualisation. Nous pouvons étendre les capacités de la barre latérale et la rendre plus dynamique, la rendre, avec une zone de visualisation suffisamment grande, prendre plus de place. Pour ce faire, vous devez limiter la taille de la largeur minimale de la barre latérale à l'aide de la fonctionmax()
.Prenons l'exemple suivant..wrapper {
display: flex;
}
aside {
flex-basis: max(30vw, 150px);
}
main {
flex-grow: 1;
}
La largeur minimale de l'élément aside
sera 150px
. Il prendra de la taille 30vw
si la largeur de la fenĂȘtre est plus grande 500px
(500 * 30% = 150).â Voici un exempleâ Taille de police d'en-tĂȘte
Ajustement flexible de la taille de la police d'en-tĂȘteUn excellent script pour utiliser la fonctionclamp()
est l'ajustement flexible de la taille de la police d'en-tĂȘte. Imaginez que nous ayons besoin de la taille de police minimale de l'en-tĂȘte16px
et du maximum -50px
. GrĂące Ă l'utilisation de la fonction,clamp()
nous pouvons faire en sorte que la taille de la police soit dans ces valeurs sans aller plus bas ou plus haut..title {
font-size: clamp(16px, 5vw, 50px);
}
La fonction clamp()
est la solution parfaite au problÚme ci-dessus. Il vous permet de définir la taille de la police afin que le texte reste accessible et facile à lire à différentes tailles de la zone d'affichage. Si ici, par exemple, vous utilisez la fonction min()
, nous perdrons le contrÎle de la taille de la police sur la page affichée dans les petites zones de visualisation..title {
font-size: min(3vw, 24px);
}
Ce qui suit est une illustration de cette idée.L'utilisation de la fonction min () fait apparaßtre le texte trop petit sur le petit écran.Sur l'écran de l'appareil mobile, la taille de la police est trop petite. Par conséquent, il n'est pas recommandé d'utiliser uniquement une fonction pour définir les tailles de policemin()
. Bien sĂ»r, la taille de la police peut ĂȘtre reconfigurĂ©e Ă l'aide d'une requĂȘte multimĂ©dia, mais le sens de l'utilisation des fonctions de comparaison CSS est complĂštement perdu.Comme dĂ©jĂ mentionnĂ©, une fonctionmin()
peut ĂȘtre utilisĂ©e Ă l'intĂ©rieur d'une fonctionmax()
. Cela vous permet de reproduire les caractéristiques de la fonctionclamp()
..title {
font-size: max(16px, min(10vw, 50px));
}
Ici, vous pouvez expérimenter avec un exemple.Je tiens à noter qu'aprÚs la discussion sur Twitter, il s'est avéré qu'il n'est pas tout à fait correct d'utiliser 10vw
la taille de police comme valeur calculée. à savoir, nous parlons du fait que cela causera des problÚmes d'accessibilité si l'utilisateur fait un zoom avant sur le navigateur.Par conséquent, il vaut mieux le faire:.title {
font-size: clamp(16px, (1rem + 5vw), 50px);
}
Ici, l'expression est spécifiée comme la taille de police calculée (1rem + 5vw)
. Cela rĂ©sout le problĂšme.â En-tĂȘtes dĂ©coratifs
Titre translucide dĂ©coratif affichĂ© avec une trĂšs grande police.Voyez-vous un gros texte translucide situĂ© sous le titre? Il s'agit d'un titre dĂ©coratif dont les dimensions doivent correspondre Ă la taille de la fenĂȘtre. Pour former un tel en-tĂȘte, vous pouvez utiliser la fonctionmax()
avec une valeur exprimée en unités de mesure qui lui est transmisevw
. Cela permettra de garantir que la taille de la police n'est pas inférieure à la valeur spécifiée..section-title:before {
content: attr(data-test);
font-size: max(13vw, 50px);
}
â Voici un exemple de travailâ Produisez des dĂ©gradĂ©s lisses dans diffĂ©rentes zones de visualisation
Lors du rĂ©glage des dĂ©gradĂ©s Ă l'aide de CSS, vous devrez peut-ĂȘtre les ajuster dynamiquement pour rendre les dĂ©gradĂ©s affichĂ©s sur les Ă©crans mobiles plus fluides. Jetez un Ćil Ă l'exemple suivant. Il y a un tel gradient:.element {
background: linear-gradient(135deg, #2c3e50, #2c3e50 60%, #3498db);
}
Le dĂ©gradĂ© sur l'Ă©cran mobile est caractĂ©risĂ© par une transition trop nette entre les couleurs.Veuilleznoter que sur l'Ă©cran mobile, la bordure de la sĂ©paration des couleurs est clairement visible. C'est mauvais. Vous pouvez corriger la situation Ă l'aide d'une bonne vieille enquĂȘte mĂ©diatique. (Oups, il semble que je considĂšre dĂ©jĂ les requĂȘtes des mĂ©dias comme une «bonne vieille technologie».)@media (max-width: 700px) {
.element {
background: linear-gradient(135deg, #2c3e50, #2c3e50 25%, #3498db)
}
}
Bien que ce soit un moyen normal de résoudre le problÚme, dans une situation similaire, nous pouvons utiliser la fonction CSS min()
..element {
background: linear-gradient(135deg, #2c3e50, #2c3e50 min(20vw, 60%), #3498db);
}
Le rĂ©sultat est ce qui est montrĂ© ci-dessous.Le dĂ©gradĂ© semble lisse lorsqu'il est affichĂ© sur n'importe quel Ă©cranâ Voici une dĂ©monstration de cette idĂ©eâ DĂ©gradĂ© translucide
Lorsque vous devez placer du texte au-dessus d'une photographie, vous devez alors "mettre" un dĂ©gradĂ© en dessous. Cela facilitera la lecture du texte. Comme dans l'exemple prĂ©cĂ©dent, les paramĂštres de dĂ©gradĂ© doivent dĂ©pendre de la taille de la fenĂȘtre. Jetez un Ćil Ă la figure suivante.ParamĂštres de dĂ©gradĂ© flexibles sur des Ă©crans de diffĂ©rentes tailles.element {
background: linear-gradient(to top, #000 0, transparent max(20%, 20vw));
}
Grùce à cette petite amélioration, le gradient sur les appareils mobiles sera bien meilleur qu'auparavant. Si la taille du dégradé est égale, sur l'écran du bureau, à 50
% de l'Ă©lĂ©ment parent, alors sur l'appareil mobile, il devrait dĂ©jĂ ĂȘtre quelque chose dans la rĂ©gion de 30
%. Vous pouvez définir la valeur minimale de la taille du dégradé à l'aide de la fonction max()
.â Voici un exempleâ Marges extĂ©rieures dynamiques
Personnalisation de l'indentationVous pouvez utiliser des unitĂ©s associĂ©es aux caractĂ©ristiques de la fenĂȘtre pour ajuster l'indentation dynamique des Ă©lĂ©ments. Cependant, cette approche ne se montre pas toujours bien. Le fait est que l'utilisateur peut visualiser la page sur l'Ă©cran pivotĂ© d'un appareil mobile avec une trĂšs grande hauteur verticale. Voici comment rĂ©soudre ce problĂšme Ă l'aide de requĂȘtes multimĂ©dias:h1, h2, h3, h4, h5 {
margin: 7vh 0 1.05rem;
}
@media (max-height: 2000px) {
h1, h2, h3, h4, h5 {
margin: 2.75rem 0 1.05rem;
}
}
Bien que ce code fonctionne correctement, le mĂȘme effet peut ĂȘtre obtenu avec une seule ligne de code:h1, h2, h3, h4, h5 {
margin: min(7vh, 2.75rem) 0 1.05rem;
}
En utilisant la fonction, min()
nous définissons la valeur de retrait maximale sur 2.75rem
. Comme vous pouvez le voir, c'est trĂšs simple et pratique.â Voici un exemple de travailâ Largeur du conteneur
Ajustement dynamique de la largeur d'un conteneurSupposons que nous ayons besoin d'un Ă©lĂ©ment de conteneur dont la largeur doit ĂȘtre de 80% de la largeur de son Ă©lĂ©ment parent. La largeur du conteneur ne doit pas dĂ©passer780px
. Comment créer un conteneur similaire? Habituellement, dans cette situation, ils font quelque chose comme ceci:.container {
max-width: 780px;
width: 80%;
}
Mais l'utilisation de la fonction min()
vous permet de limiter la largeur maximale du conteneur comme ceci:.container {
max-width: min(80%, 780px);
}
â Voici un exemple de travailâ Retrait vertical
clamp()
J'aime la fonction en ce qu'elle est idĂ©ale pour limiter la taille de l'indentation des sections de page. Jetez un Ćil Ă l'exemple suivant, qui montre la configuration du haut de la page (section hĂ©ros).DĂ©finition de l'indentation de la section situĂ©e en haut de la page Vous pouvezajuster de maniĂšre flexible l'indentation d'une telle section en utilisant une seule ligne de code CSS..hero {
padding: clamp(2rem, 10vmax, 10rem) 1rem;
}
â Voici un exempleâ Limites et ombres
Voici une vidĂ©o qui montre un Ă©lĂ©ment qui a une large bordure.ĂlĂ©ment Ă bordure largeDans certains cas, la conception de pages utilise des Ă©lĂ©ments Ă bordure large et Ă rayon de rayon important. Lors de l'affichage de tels Ă©lĂ©ments sur des Ă©crans mobiles, leurs limites doivent ĂȘtre rĂ©duites. Il en va de mĂȘme pour les rayons de coin. L'utilisation de la fonctionclamp()
vous permet d'ajuster dynamiquement les paramĂštres de bordure, en les liant Ă la largeur de la zone de visualisation..element {
box-shadow: 0 3px 10px 0 red;
border: min(1vw, 10px) solid #468eef;
border-radius: clamp(7px, 2vw, 20px);
box-shadow: 0 3px clamp(5px, 4vw, 50px) 0 rgba(0, 0, 0, 0.2);
}
Ici, vous pouvez expĂ©rimenter avec un exemple de travail.âDistance entre les cellules de la disposition de la grille
Disposition de la grilleUne façon intéressante d'utiliser la fonctionclamp()
consiste à définir la propriétégrid-gap
dans les dispositions de la grille. En particulier, nous parlons du fait que sur les écrans mobiles, la distance entre les cellules de la grille serait inférieure à celle des ordinateurs de bureau..wrapper {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: clamp(1rem, 2vw, 24px);
}
Si vous ĂȘtes intĂ©ressĂ© Ă utiliser les fonctions de comparaison CSS lors de la conception des dispositions de grille, jetez un Ćil Ă ce bon article.â Voici un exemple pour cette sectionâUtilisation dans les fonctions CSS pour comparer des valeurs sans unitĂ©s
Au cours de l'expérimentation des fonctions CSS, j'ai décidé de savoir ce qui se passe si vous passez des fonctions clamp()
comme valeur minimale 0
. Voici Ă quoi cela ressemble dans le code:.element {
width: clamp(0, 10vmax, 10rem);
}
C'est du mauvais CSS. Je crois que le fait est que les nombres sans unitĂ©s de mesure ne devraient pas ĂȘtre utilisĂ©s ici.â MĂ©canismes redondants pour les navigateurs qui ne prennent pas en charge min (), max () et clamp ()
Comme cela est le cas avec d'autres nouvelles fonctionnalités CSS, l' application de fonctions min()
, max()
et clamp()
, vous devez prendre soin des mécanismes de sauvegarde. Pour créer ces mécanismes, vous pouvez utiliser l'une des approches suivantes.1. Configuration manuelle du mécanisme de sauvegarde
Ici, la configuration manuelle est comprise comme l'ajout au code d'une propriĂ©tĂ© qui bĂ©nĂ©ficie d'une large prise en charge du navigateur. Cette propriĂ©tĂ© doit ĂȘtre placĂ©e devant la propriĂ©tĂ© qui utilise les fonctions de comparaison CSS. Voici Ă quoi cela pourrait ressembler:.hero {
padding: 4rem 1rem;
padding: clamp(2rem, 10vmax, 10rem) 1rem;
}
Ici, les navigateurs prenant en charge ignoreront clamp()
la premiÚre expression. Et ceux qui ne prennent pas en charge cette fonction utiliseront la premiÚre façon d'ajuster l'indentation.2. Utilisation de la directive CSS les soutiens
La directive @supports
, conçue pour tester la prise en charge du navigateur pour diverses technologies, peut ĂȘtre utilisĂ©e pour dĂ©terminer si le navigateur peut fonctionner avec les fonctions de comparaison CSS. Je prĂ©fĂšre utiliser cette solution plutĂŽt que la solution manuelle dĂ©crite dans le premier paragraphe. Le fait est que tout navigateur prenant en charge les fonctions de comparaison doit Ă©galement prendre en charge la directive @supports
..hero {
padding: 4rem 1rem;
}
@supports (width: min(10px, 5vw)) {
.hero {
padding: clamp(2rem, 10vmax, 10rem) 1rem;
}
}
âĂ propos de la disponibilitĂ© du contenu
Bien que les fonctionnalitĂ©s de comparaison CSS nous offrent une nouvelle façon de crĂ©er des pages Web plus flexibles en les utilisant, des prĂ©cautions doivent ĂȘtre prises. Par exemple, utiliser une fonction seule min()
pour définir une propriété font-size
ne suffit pas. Le fait est que sur les appareils mobiles, une police dont la taille est dĂ©finie en utilisant uniquement cette fonction peut ĂȘtre trop petite. Lors de la configuration d'un contenu de page particuliĂšrement important, n'oubliez pas de limiter les paramĂštres minimum et maximum. Sinon, cela peut aggraver l'expĂ©rience utilisateur de travailler avec le projet.Utilisez-vous des fonctions CSS min()
, max()
et clamp()
?