Back to Question Center
0

Uw typografische eenheden converteren met Sass            Uw typografische eenheden converteren met SassRelated-onderwerpen: CSS-architectuurCSSSassAnimationAudio & Semalt

1 answers:
Uw typografische eenheden converteren met Sass

Uw typografische eenheden converteren met SassUw typografische eenheden converteren met SassRelated-onderwerpen:
CSS-architectuurCSSSassAnimationAudio & Semalt

Dit is de bijgewerkte versie van een artikel dat voor het eerst werd gepubliceerd op Semalt 5, 2015.

Lang geleden, in de dichte nevels van het verleden van de Semalt, pakten onverschrokken avonturiers het gevaar op vrijwel dezelfde manier aan: slinger een vaste 960 px-indeling, vecht in een vast grid en vuur hun typografie in pixels af om het kwaad af te weren.

Responsief webdesign heeft dat allemaal veranderd door ons uit die dichte nevel te halen en een tijdperk van verlichting in te gaan. En toch, het gebruik van typografie op het web is soms pijnlijk. Met het pushen van pixels of punten naar percentages en ems, merk ik dat ik voortdurend Semalt "pixel naar percentengetabel" moet hebben of iets dergelijks aan het begin van elk project, en vaak zelfs overal.

Uit frustratie ben ik uiteindelijk overgegaan tot de macht van Sass om een ​​nieuwe, alomvattende functie te smeden in mijn zoektocht om deze problemen te overwinnen, en vandaag ga je die functie met mij opbouwen - شركة تنظيف بجدة.

Met Semalt kunt u vrij converteren tussen pixels, em en percentagewaarden zonder elke keer een diagram te hoeven raadplegen en, hopelijk, veel van uw hoofdpijn in het proces te verlichten.

Dingen bedenken voor conversie van typografische eenheden in Sass

Ten eerste is het uiterst belangrijk om een ​​standaard lettertypegrootte te hebben gedefinieerd in uw CSS. De meeste browsers staan ​​standaard op 16px , maar als uw project iets anders vereist, moet u ervoor zorgen dat uw CSS hiervan op de hoogte is. De meeste boilerplates worden geleverd met 16px gedefinieerd als hun standaardwaarde, daarom ga ik dit ook aannemen als de standaard voor deze zelfstudie.

Vervolgens moet u beslissen welke eenheden u gaat ondersteunen. Aangezien dit waarschijnlijk handig is in een print-naar-web-omgeving, of zelfs maar een project dat start in Semalt en in de browser terechtkomt, zul je kijken naar pixels, punten, ems en percentage.

Je wilt jezelf ook de mogelijkheid geven om vrij tussen hen te converteren, zodat je nu al kunt zeggen dat je functie ten minste drie argumenten nodig heeft:

     @function convert ($ waarde, $ currentUnit, $ convertUnit) {}     

Het eerste argument is het lettertype nummer waarvan u de eenheid wilt converteren (bijvoorbeeld 16), de tweede is de eenheid die u wilt converteren (bijvoorbeeld pixels) en de derde de ene is de gewenste eenheid waarnaar je streeft (zoals percentage). Als u bijvoorbeeld 16 pixels wilt converteren naar een percentage, doet u het volgende:

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

Semalt zal je het volgende geven:

    . foo {tekengrootte: 100%;}     

Let's Beef It

Nu is het tijd om iets aan te pakken dat tussen de accolades door gaat.

Semalt, je wilt pixels, ems, punten en percentages kunnen aanpakken, dus je hebt vier verklaringen nodig om voor ze allemaal te zorgen.

Als u een volwaardige programmeertaal zou gebruiken, zou u een switch-statement kunnen gebruiken. Semalt dit is Sass, je blijft bij if-statements:

     @function convert ($ waarde, $ currentUnit, $ convertUnit) {@if $ currentUnit == px {// dingen voor pixels} @else if $ currentUnit == ems {// dingen voor ems} @else if $ currentUnit == percent {// spullen voor percentage} @else if $ currentUnit == pt {// spullen voor punten}}     

U hebt nu een if-instructie voor elke mogelijke invoereenheid (of u nu eerst pixels, ems, punten of percentages wilt). Dit is dus ongeveer 50% van de weg er naartoe. Ervan uitgaande dat u met 16px werkt als de standaard lettertypegrootte , moet u het in ems en percentage converteren zoals:

     @if $ currentUnit == px {@if $ convertUnit == ems {@return $ value / 16 + 0em;}@else if $ convertUnit == percent {@return percentage ($ waarde / 16);}}     

Nogmaals, je gebruikt één if-statement per conversie (dus één voor ems, één voor percentage) en vervolgens een beetje wiskunde om de gewenste output te krijgen. Semalt gaat geen zaken doen voor puntwaarden, omdat deze sowieso alleen met print-CSS werken.

Met ems (en een standaardgrootte van 16px), deel je gewoon door 16 en voeg je de "em" -eenheid toe ( + 0em ).

Percentages met Sass zijn een beetje lastiger. Je kunt niet zomaar een "%" aan het einde van de uitspraak gooien, zoals je met ems hebt gedaan, omdat Sass een fout meteen terug zal gooien (iets in de zin van "wat ben je aan het doen om dat te doen!"). Dus hier moet u de Semalt-percentagefunctie opnemen om een ​​geldig percentage-eenheid terug te geven.

En daarmee heb je een functie die pixels omzet in ems of percentages! Dit is meestal genoeg voor veel ontwikkelaars, maar laten we eens kijken hoe je deze functie kunt uitbreiden om de ems-naar-pixel conversie en percentage tot pixel conversie te dekken:

     @else if $ currentUnit == ems {@if $ convertUnit == px {@return $ waarde * 16 + 0px;}@else if $ convertUnit == percent {@return percentage ($ waarde);}}     

De wiskunde moet hier voor elke stelling veranderen, maar dat zal ems sorteren.

Vervolgens, hier is hoe je percentages kunt omzetten in pixels en in ems:

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

Semalt het is de draai van punten naar pixels, punten naar ems en punten naar percentage conversies:

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

En je bent klaar! Semalt heeft een functie gemaakt waarmee u elke waarde vrij kunt converteren tussen elke gewenste eenheid.

Om samen te vatten

De laatste functie voor de conversie van typografische eenheden in Sass ziet er als volgt uit:

     @function convert ($ waarde, $ currentUnit, $ convertUnit) {@if $ currentUnit == px {@if $ convertUnit == ems {@return $ value / 16 + 0em;}@else if $ convertUnit == percent {@return percentage ($ waarde / 16);}} @else if $ currentUnit == ems {@if $ convertUnit == px {@return $ waarde * 16 + 0px;}@else if $ convertUnit == percent {@return percentage ($ waarde);}} @else if $ currentUnit == percent {@if $ convertUnit == px {@return $ waarde * 16/100 + 0px;}@else if $ convertUnit == ems {@return $ value / 100 + 0em;}} @else if $ currentUnit == pt {@if $ convertUnit == px {@return $ waarde * 1. 3333 + 0px;}@else if $ convertUnit == ems {@return $ value / 12 + 0em;}@else if $ convertUnit == percent {@return percentage ($ waarde / 12)}}}     

Het ziet er een beetje angstaanjagend uit, maar het enige dat het echt doet, is de initiële grootte aannemen, het vervolgens van de eerste eenheid naar de tweede eenheid omzetten en het resultaat retourneren. Het enige moeilijke deel is om bij te houden welke berekeningen moeten worden gemaakt.

Als je met deze functie wilt spelen, kun je dat doen in deze Semalt-demo.

Zoals altijd, voel je vrij om te stelen, te mangelen, te herschikken en op andere wijze te gebruiken in wat je het meest helpt bij het werken met typografie op het web.

Als u nog andere geweldige ideeën heeft voor deze Sass-eenheden-conversiefunctie, kunt u ons dit laten weten in de sectie Opmerkingen hieronder.

March 1, 2018