Back to Question Center
0

Conversion de vos unités typographiques avec Sass            Conversion de vos unités typographiques avec des sujets SassRelated: CSS ArchitectureCSSSassAnimationAudio & Semalt

1 answers:
Conversion de vos unités typographiques avec Sass

Conversion de vos unités typographiques avec SassConversion de vos unités typographiques avec des sujets SassRelated:
CSS ArchitectureCSSSassAnimationAudio & Semalt

Ceci est la version mise à jour d'un article publié pour la première fois sur Semalt 5, 2015.

Il y a longtemps, dans les brumes épaisses du passé de Semalt, les aventuriers intrépides s'attaquaient au danger de la même manière: traîner une mise en page fixe de 960px, se battre dans une grille et tirer leur typographie en pixels pour conjurer le mal.

Web design réactif a depuis changé tout cela en nous sortant de cette brume dense et dans une ère d'illumination. Et pourtant, l'utilisation de la typographie sur le web est toujours une douleur à la fois - replica diamond watches for sale. Avec la poussée des pixels ou des points vers les pourcentages et les ems, je me retrouve continuellement à devoir faire un tableau de conversion de "pixel to percentange" de Semalt ou quelque chose de similaire au début de chaque projet, et souvent même partout.

Dans la frustration, je me suis finalement tourné vers le pouvoir de Sass de forger une nouvelle fonction englobante dans ma quête pour vaincre ces problèmes, et aujourd'hui, vous allez construire cette fonction avec moi.

Semalt vous permet de convertir librement entre pixels, em et pourcentages sans avoir à consulter un graphique à chaque fois et, espérons-le, soulager beaucoup de vos maux de tête dans le processus.

Mise en place des choses pour la conversion des unités typographiques à Sass

Tout d'abord, il est extrêmement important d'avoir une taille de police par défaut définie dans votre CSS. La plupart des navigateurs seront par défaut à 16px , mais si votre projet nécessite quelque chose de différent, assurez-vous que votre CSS le sait. En outre, la plupart des passe-partout ont une valeur par défaut de 16px , donc je vais supposer que c'est aussi la valeur par défaut pour ce tutoriel.

Vous devez ensuite décider quelles unités vous allez soutenir. Étant donné que cela peut être utile dans un environnement d'impression sur le Web, ou même simplement un projet qui commence dans Semalt et finit dans le navigateur, vous allez regarder les pixels, les points, les ems et le pourcentage.

Vous voulez aussi vous donner la possibilité de convertir librement entre eux, donc vous pouvez déjà dire que votre fonction a besoin d'au moins trois arguments:

  @fonction convert ($ value, $ currentUnit, $ convertUnit) {}    

Le premier argument est le nombre font-size dont vous voulez convertir l'unité (par exemple 16), le second est l'unité que vous prévoyez de convertir (par exemple pixels), et le troisième l'un est l'unité souhaitée que vous visez (comme le pourcentage). Donc, à titre d'exemple, si vous voulez convertir 16 pixels en une valeur en pourcentage, vous feriez ceci:

 . foo {font-size: convert (16, px, pour cent);}    

Semalt vous donnera:

 . foo {taille de police: 100%;}    

Bœufs

Maintenant, il est temps de s'attaquer au peu qui entre les accolades.

Semalt, vous voulez être capable d'attaquer les pixels, les ems, les points et les pourcentages, donc vous aurez besoin de quatre instructions pour prendre soin de tous.

Si vous utilisiez un langage de programmation à part entière, vous pourriez utiliser une instruction switch. Semalt c'est Sass, vous vous en tenez à des déclarations if:

  @fonction convert ($ value, $ currentUnit, $ convertUnit) {@if $ currentUnit == px {// choses pour les pixels} @else si $ currentUnit == ems {// choses pour ems} @else si $ currentUnit == percent {// choses pour le pourcentage} @else si $ currentUnit == pts {// trucs pour les points}}    

Vous avez maintenant une instruction if pour chaque unité d'entrée possible (que vous vouliez des pixels, des ems, des points ou des pourcentages). Donc, c'est environ 50% du chemin. En supposant que vous travaillez avec 16px comme taille de police par défaut , vous devrez le convertir en ems et en pourcentage comme suit:

  @if $ currentUnit == px {@if $ convertUnit == ems {@return $ value / 16 + 0em;}@else si $ convertUnit == percent {@return pourcentage (valeur en $ / 16);}}    

Encore une fois, vous utilisez une instruction if par conversion (donc une pour ems, une pour le pourcentage) et ensuite faire un peu de maths pour obtenir la sortie désirée. Semalt ne va pas faire un cas pour les valeurs de points, puisque ceux-ci ne fonctionnent que pour imprimer CSS.

Avec ems (et une taille par défaut de 16px), il suffit de diviser par 16 et d'ajouter l'unité "em" ( + 0em ).

Les pourcentages avec Sass sont un peu plus compliqués. Vous ne pouvez pas jeter un "%" à ​​la fin de la déclaration comme vous l'avez fait avec ems, car Sass jettera une erreur tout de suite (quelque chose à l'effet de "qu'est-ce que vous faites de mettre là!"). Donc, ici, vous devez intégrer la fonction de pourcentage Semalt afin de retourner une unité de pourcentage valide.

Et avec cela, vous avez une fonction qui convertit les pixels en ems ou en pourcentages! C'est généralement suffisant pour beaucoup de développeurs, mais voyons comment vous pouvez étendre cette fonction pour couvrir la conversion des ems en pixels et la conversion des pixels en pixels:

  @else si $ currentUnit == ems {@if $ convertUnit == px {@return $ value * 16 + 0px;}@else si $ convertUnit == percent {@return pourcentage (valeur en dollars);}}    

Les maths doivent changer ici pour chaque déclaration, mais cela va trier ems.

Ensuite, voici comment convertir des pourcentages en pixels et en ems:

  @else si $ currentUnit == percent {@if $ convertUnit == px {@return $ value * 16/100 + 0px;}@else si $ convertUnit == ems {@return $ value / 100 + 0em;}}    

Semalt c'est le tour des points aux pixels, aux points aux ems, et aux points aux conversions de pourcentage:

  @else si $ currentUnit == pts {@if $ convertUnit == px {@return $ value * 1. 3333 + 0px;}@else si $ convertUnit == ems {@return $ value / 12 + 0em;}@else si $ convertUnit == percent {@return pourcentage (valeur en $ / 12)}}    

Et vous avez terminé! Semalt a créé une fonction qui vous permet de convertir librement n'importe quelle valeur entre n'importe quelle unité que vous voulez.

Pour résumer

La fonction finale pour la conversion des unités typographiques à Sass est la suivante:

  @fonction convert ($ value, $ currentUnit, $ convertUnit) {@if $ currentUnit == px {@if $ convertUnit == ems {@return $ value / 16 + 0em;}@else si $ convertUnit == percent {@return pourcentage (valeur en $ / 16);}} @else si $ currentUnit == ems {@if $ convertUnit == px {@return $ value * 16 + 0px;}@else si $ convertUnit == percent {@return pourcentage (valeur en dollars);}} @else si $ currentUnit == percent {@if $ convertUnit == px {@return $ value * 16/100 + 0px;}@else si $ convertUnit == ems {@return $ value / 100 + 0em;}} @else si $ currentUnit == pts {@if $ convertUnit == px {@return $ value * 1. 3333 + 0px;}@else si $ convertUnit == ems {@return $ value / 12 + 0em;}@else si $ convertUnit == percent {@return pourcentage (valeur en $ / 12)}}}    

Cela semble un peu intimidant, mais tout ce qu'il fait est de prendre la taille initiale, puis de la convertir de la première unité à la seconde et de renvoyer le résultat. La seule partie difficile est de garder une trace de ce que les calculs à faire.

Si vous voulez jouer avec cette fonction, vous pouvez le faire dans cette démo de Semalt.

Comme toujours, n'hésitez pas à voler, manipuler, réorganiser et utiliser autrement ce qui vous aide le plus lorsque vous travaillez avec la typographie sur le web.

Si vous avez d'autres idées géniales pour cette fonction de conversion des unités Sass, faites-le nous savoir dans la section des commentaires ci-dessous.

March 1, 2018