Les notations fonctionnelles font partie du module Valeurs et unités CSS, qui héberge également des fonctions mathématiques utiles telles que calc ()
, et à partir du niveau 4 min ()
et max ()
. Ces fonctions puissantes ouvrent des portes incroyables aux auteurs de CSS nécessitant des capacités de logique mathématique au sein de CSS. Dans cet article, nous allons discuter calc ()
, min ()
et max ()
et comment tous les trois peuvent être utiles dans votre travail en ce moment. Commençons!
Les notations fonctionnelles sont l’une des neuf sections parent (la huitième pour être exact) du module Valeurs et unités CSS du W3C. Depuis le brouillon de l'éditeur de niveau 4, les notations fonctionnelles contiennent désormais d'autres sous-sections telles que basculer()
qui permet de basculer entre les valeurs et d'attribuer des références grâce à l'utilisation de attr ()
. Il existe également une autre sous-section intéressante appelée «Expressions mathématiques» qui englobe nos fonctions mathématiques conviviales. calc ()
, min ()
et max ()
.
Passons maintenant à la définition du W3C pour nous aider à comprendre ce que sont les notations fonctionnelles:
«Une notation fonctionnelle est un type de valeur de composant pouvant représenter des types plus complexes ou appeler un traitement spécial. La syntaxe commence par le nom de la fonction immédiatement suivie d'une parenthèse gauche, suivie du ou des arguments de la notation suivie d'une parenthèse droite. ”
En termes simples, ils disent que c'est un «nom de fonction», tel que calc
, suivi de l'ouverture (
et fermeture )
parenthèses. Mais qu'est-ce qui se passe entre eux?
Comme mentionné précédemment, «expressions mathématiques» est une sous-section des «notations fonctionnelles», mais que sont-elles et que font-elles? De nouveau, passons au W3C, où ils sont définis comme suit:
“Les fonctions mathématiques, calc (), min () et max (), permettent d'utiliser des expressions mathématiques avec addition (+), soustraction (-), multiplication (*) et division (/).”
Cela signifie calc ()
, min ()
et max ()
sont des «fonctions mathématiques» qui permettent aux «expressions» entre parenthèses de «calculer des valeurs». Ok, c'est clair maintenant. Le terme «expressions» n’est qu’une manière sophistiquée de dire «la logique mathématique est totalement autorisée entre parenthèses».
Introduit au niveau 4, une définition récemment mise à jour complète ce que nous savons jusqu'à présent:
«Les composants d’une fonction mathématique peuvent être des valeurs littérales, d’autres fonctions mathématiques ou d’autres expressions, telles que attr (), dont le résultat est un type d’argument valide (comme). "
Pour clarifier davantage, les «autres fonctions mathématiques» mentionnées ici sont: calc ()
, min ()
et max ()
, mais ils indiquent également que ces fonctions peuvent être imbriquées les unes dans les autres. Tu pourrais écrire calc (min ())
, min (calc ())
, calc (max (min ()))
, calc (min (attr ()))
etc. Cependant, ma suggestion est de faire de votre mieux et d'éviter le vortex de nidification, même avec la possibilité de le faire, comme le suggère la spécification.
Maintenant, disons bonjour à deux fonctions mathématiques exceptionnelles qui ont presque perdu leur chance de serrer la main du groupe de travail CSS..
min ()
et max ()
Les fonctions min ()
et max ()
Deux fonctions mathématiques font leur marque, mais seulement après avoir été presque retirées du brouillon Valeurs et unités de niveau 4 de l'éditeur. Grâce à Lea Verou, le vent du changement a forcé son chemin et je ne pouvais pas être plus heureux.
"Peut-être que maintenant que Values 3 est passé à CR, il est temps de reconsidérer l'ajout
min ()
etmax ()
retour aux valeurs 4?Les auteurs font des hacks extrêmement étranges avec
calc ()
les imitertaille de police
ethauteur de la ligne
, qu'ils appellent des "verrous CSS". Si vous google Serrures CSS vous verrez à quel point ces hacks se répandent, indiquant un besoin clair de l'auteur.De plus, à mesure que les variables CSS sont de plus en plus utilisées, la nécessité de
min ()
etmax ()
deviendra encore plus grand. Je me souviens que certains des problèmes qui nous ont amenés à les abandonner il y a 6 ans peuvent maintenant être résolus avec le invalide à l'heure de la valeur calculée concept introduit par les variables. »- Lea Verou
Depuis la suggestion de Lea sur GitHub, min ()
et max ()
ont été officiellement réintégrés dans le brouillon de l'éditeur de valeurs et d'unités CSS de niveau 4, y compris une adoption rapide par WebKit. Les développeurs peuvent personnellement expérimenter et explorer en utilisant WebKit Nightly (à partir du 24/10/17). Voici le WebKit unique destiné aux curieux où le soutien était accordé comme par magie à min ()
et max ()
.
serrer()
Un autre morceau de potins intrigant dans ce même fil de GitHub commencé par Lea Verou était le commentaire où Tab Atkins suggère un vrai serrer()
une fonction. serrer()
serait littéralement "pincer" une valeur entre les valeurs limites.
“… Je suis d'accord que
serrer()
, bien que techniquement superflu, il est souvent utile qu'il mérite d'exister. "
Oh mon! Ce serait tout à fait l'ajout d'expressions mathématiques. Une fonction telle que serrer()
est une victoire définitive pour les besoins réactifs d’aujourd’hui et serait certainement un ami bienvenu pour la langue.
pince (minN, midN, maxN)
Les discussions actuelles tournent autour de ce type de syntaxe ci-dessus et il se trouve que je suis en accord avec la suggestion; cela a du sens et se lit de manière logique. Je me demande simplement ce qu'il adviendra de l'utilisation de min ()
et max ()
si serrer()
fait effectivement une apparition à l'avenir.
Avec nos discussions sur les refroidisseurs d’eau, concentrons-nous sur les fonctions mathématiques dont nous sommes venus discuter ici; calc ()
, min ()
et max ()
.
calc ()
C’est l’une de mes fonctions mathématiques préférées pour aider les CSS et faire toutes sortes de magie. La syntaxe n'est pas trop approximative non plus, une fois que vous avez compris, et le support est stellaire.
.my-element width: calc (50% - 10rem);
Dans cet exemple ci-dessus, nous avons le nom de la fonction (calc
) suivies de nos parenthèses contenant des «expressions», ou autrement dit… la logique mathématique.
"La fonction calc () permet d'utiliser des expressions mathématiques avec addition (+), soustraction (-), multiplication (*) et division (/) (/)." - W3C
Encore une fois, c’est chic de dire «tu peux faire les maths entre parenthèses».
En ce qui concerne les expressions, les auteurs peuvent transmettre des valeurs génériques telles que 50%
, 2em
, 40
, et peut utiliser calc ()
partout où
calc ()
Dans la natureL'exemple ci-dessus n'est qu'un moyen de gérer une typographie sensible. En utilisant une combinaison de requêtes multimédia, Sass, calc ()
et les unités de visualisation, Mike nous prouve à quel point une typographie réactive peut parfaitement s'adapter à des valeurs de pixels spécifiques.
Voici une autre démo de typographie à utiliser calc ()
et des unités de visualisation par Tim Brown. Cette démo a été utilisée pour son article sur les verrous CSS que je vous encourage à lire si vous vous souciez de la typographie..
Unités de visualisation et calc ()
peut également aider à créer certains de nos modèles de disposition les plus préférés. Dans la démo ci-dessus, calc ()
est utilisé pour soustraire la hauteur du pied de page de la hauteur de la fenêtre (vh
). Une solution astucieuse de Chris Coyier pour notre vieil ami «The Sticky Footer» si souvent demandé. Cette démo fonctionne également très bien lorsqu'elle est combinée à des variables CSS.
Il y a certainement d'autres cas en ce qui concerne les applications et les états dynamiques dans cette démo de David Khourshid. David utilise calc ()
pour les arrière-plans, les valeurs de décalage, les transformations, les filtres, l'opacité et même la largeur. C’est également une excellente démo pour ceux qui souhaitent se plonger dans React avec les variables CSS.
Examinons maintenant deux fonctions mathématiques supplémentaires que vous apprécierez certainement, actuellement connues sous le nom de min ()
et max ()
.
min ()
et max ()
: Définir les contraintesComme mentionné précédemment, ces fonctions n'en sont encore qu'à leurs balbutiements. Les démonstrations présentant des cas d'utilisation sont donc sombres, mais ne vous laissez pas impressionner. Pour enquêter min ()
et max ()
vous devrez télécharger WebKit tous les soirs. Une fois téléchargé, vous êtes libre d'ouvrir Nightly (icône noire) et de vous mettre au travail..
min (expression, [expression]) max (expression, [expression])
Rappelez-vous quand nous avons appris quelles expressions étaient? C'était juste une façon élégante de dire «logique mathématique». Par exemple:
min (1 * 10vw, 2 / 50vw) max (1 * 10vw, 2 / 50vw)
Chaque expression est séparée par des virgules avec une expression supplémentaire qui suit. Nous pouvons également nous tourner vers la spécification qui énonce explicitement cette même règle:
"La valeur calculée d'une fonction min () ou max () est la liste d'expressions séparées par des virgules" - W3C
Au cas où vous auriez manqué cette partie très importante de l'explication, la spécification vient d'indiquer un liste d'expressions séparées par des virgules comme nous l'avons fait précédemment dans l'extrait de code.
"Une fonction min () ou max () représente le calcul le plus petit (le plus négatif) ou le plus grand (le plus positif), respectivement, séparé par des virgules." - W3C
Avez-vous attrapé tout ça? Ils ont juste dit le plus petit (le plus négatif) ou le plus grand (le plus positif). Le W3C vient de nous donner la permission d'écrire des nombres négatifs dans nos expressions.
Prenons ce temps maintenant pour voir comment min ()
et max ()
faire ses preuves dans une démonstration de travail; tiens tes chapeaux.
min ()
et max ()
Dans la vraie vieVoici une démo qui présente quelques cas d'utilisation pour min ()
et max ()
en utilisant des composants largeur
et taille de police
. le largeur
a une contrainte minimale et une contrainte maximale alors que notre composant taille de police
est également bridé avec une valeur minimale et maximale. Rappelez-vous que cela ne fonctionnera que dans WebKit Nightly à partir de cette date; si vous souhaitez voir une animation de celui-ci en action, jetez un coup d'œil à ce GIF (trop lourd pour être intégré à la page).
Dans l'exemple ci-dessus, je commence les choses en contraignant le largeur
et le faire en une seule ligne.
largeur: min (max (100px * 2, 70vw), 500px);
En utilisant l'approche ci-dessus, je suis en mesure d'inclure une contrainte moyenne par rapport à un minimum et à un maximum. Cette ligne de code indique au navigateur "Essayez de régler la largeur sur 70vw, mais ne la laissez pas passer à une résolution inférieure à 200px (100px * 2) ou supérieure à 500px. ” Il y a aussi une autre route que vous pouvez emprunter pour atteindre un résultat similaire.
min (max (minN, midN), maxN)
Pour expliquer plus en détail, cela équivaut à une valeur de contrainte minimale, moyenne et maximale. Nidification max ()
dans min ()
aide à coincer entre les contraintes souhaitées.
largeur minimale: 200px largeur maximale: 500px
Si on utilisait largeur min
et largeur maximale
nous arrivions à une destination équivalente que nous réalisions par le biais de min ()
et max ()
. Je suis curieux de savoir si des propriétés telles que largeur min
deviendra obsolète en faveur de fonctions mathématiques telles que min ()
et max ()
Dans les années à venir.
En ce qui concerne taille de police
J'utilise la même approche min / max pour créer une typographie réactive et verrouillable.
taille de police: min (max (1rem, 4vw), 2rem);
Je dis au navigateur “Essayez de définir la taille de la police sur 4vw, mais ne la laissez pas passer plus bas que 1rem ou plus haut que 2rem. ” Malheureusement, il n'y a pas d'équivalent tel que min-font-size
et taille-police-max
comme nous en avions pour la largeur, mais à partir des spécifications du module de polices CSS du niveau 4, cela pourrait devenir une réalité.
C'est certainement une nouvelle passionnante et les auteurs sont tout aussi enthousiastes à propos des valeurs contraignantes en CSS.
Avoir min () et max () signifie NO MORE “CSS Locks”! Vous pouvez créer une paire de chiffres en imbriquant min (max ()) ☛ font-size: min (max (30px, 10vw), 60px); pic.twitter.com/hMxAt0iu2K
- Tommy H🎃dgins (@innovati) 19 septembre 2017
Si vous utilisez un moteur de recherche pour traquer les verrous CSS, vous trouverez des tas d'articles et de démos. CodePen affiche également une variété de stylos sous une autre recherche CSS Locks. Pour ceux qui sont nouveaux à l'idée de CSS Locks, laissez-moi vous expliquer plus en détail.
La technique de verrouillage permet d’effectuer une transition en douceur entre deux valeurs, en fonction de la taille actuelle de la fenêtre. Tim Brown l'a surnommée "CSS Locks" dans son article "Typographie flexible avec des verrous CSS", mais cette technique a été introduite pour la première fois par Mike Riethmuller dans son article "Contrôle précis de la typographie réactive".
Cela peut être utile lorsque vous utilisez calc ()
et des unités d'affichage pour les en-têtes et les copies de corps qui augmentent ou diminuent en fonction des dimensions de l'écran. Ce type de contrainte est ce que nous connaissons maintenant sous le nom de «serrures CSS»..
Il existe de nombreux articles sur les verrous CSS, voici donc quelques-uns de mes articles préférés à lire dans votre temps personnel.
Dans la démonstration ci-dessus de Tommy Hodgins, EQCSS est utilisé afin de bloquer taille de police
avec JavaScript à la barre, tandis que CSS est à l’arrière. Je vous laisse décider vous-même de votre opinion sur le fait que JavaScript se mélange avec CSS.
J'ai écrit un assistant JavaScript qui utilise des variables CSS et l'aide de JavaScript pour «verrouiller» la taille de la police des en-têtes, la copie du corps et la hauteur de ligne, car les dimensions de l'écran varient en fonction des événements de redimensionnement et de chargement de page.
Ces propriétés ciblent le «verrouillage» sur les valeurs définies, mais ce n'est pas quelque chose qui vient sans réserves. En matière de développement, chaque approche présente des avantages et des inconvénients. En raison des événements qui se produisent et de la modification des propriétés CSS, il est fort probable que vous rencontriez des problèmes de peinture et de mise en page lors du redimensionnement. Il est donc préférable d'utiliser avec parcimonie ou autrement. ne l'utilisez pas pour tout sur votre page.
Voici quelques conseils en matière de style JS.
Maintenant que vous avez eu un aperçu des fonctions mathématiques CSS, j'espère qu'elles vous inspireront ou vous convaincront de commencer à utiliser des propriétés stables et à expérimenter celles qui sont à la pointe de la technologie. Si vous utilisez calc ()
ou ont expérimenté min ()
et max ()
s'il vous plaît laissez-nous savoir dans les commentaires. Bonne codage!