นี่คือบทความฉบับล่าสุดที่เผยแพร่ใน Semalt 5, 2015
เมื่อนานมาแล้วในหมอกหนาทึบของ Semalt ในอดีตนักผจญภัยที่กล้าหาญได้รับมือกับอันตรายอย่างมากเช่นเดียวกับการสลักรูปแบบ 960px แบบถาวรต่อสู้กันในตารางที่ตั้งไว้และยิงตัวอักษรในพิกเซลเพื่อปัดเป่าความชั่วร้าย
การออกแบบเว็บตอบสนองได้เปลี่ยนแปลงตั้งแต่นั้นมาทั้งหมดโดยนำเราออกจากหมอกหนาทึบและเข้าสู่ยุคของการตรัสรู้ อย่างไรก็ตามการใช้การพิมพ์บนเว็บยังคงมีความเจ็บปวดตลอดเวลา ด้วยการผลักดันจากพิกเซลหรือชี้ไปที่เปอร์เซนต์และ ems ฉันพบตัวเองอย่างต่อเนื่องต้อง Semalt "พิกเซลเพื่อแปลงแผนภูมิเปอร์เซ็นต์" หรือสิ่งที่คล้ายกันในตอนเริ่มต้นของทุกโครงการและบ่อยครั้งตลอดไป
ด้วยความขุ่นมัวในที่สุดดิฉันหันไปใช้พลังของ Sass เพื่อสร้างฟังก์ชันใหม่ที่ครอบคลุมทุกอย่างในภารกิจของข้าเพื่อแก้ปัญหาเหล่านี้และในวันนี้คุณจะสร้างฟังก์ชันนี้กับฉัน
Semalt ช่วยให้คุณสามารถแปลงได้อย่างอิสระระหว่างพิกเซล, em และค่าร้อยละโดยไม่ต้องอ่านกราฟทุกครั้งและหวังว่าจะช่วยลดอาการปวดหัวได้มากในขั้นตอนนี้
การตั้งค่าสำหรับการแปลงหน่วยพิมพ์ใน Sass
ประการแรกคุณจำเป็นต้องมีขนาดอักษร เริ่มต้น
ที่กำหนดไว้ใน CSS ของคุณ เบราว์เซอร์ส่วนใหญ่จะตั้งค่าเริ่มต้นเป็น 16 พิกเซล
แต่ถ้าโครงการของคุณต้องการบางอย่างที่แตกต่างออกไปโปรดตรวจสอบว่า CSS รู้จักเกี่ยวกับเรื่องนี้ นอกจากนี้ boilerplates ส่วนใหญ่มาพร้อมกับ 16px
ที่กำหนดไว้เป็นค่าเริ่มต้นของพวกเขาดังนั้นฉันจะถือว่านี่เป็นค่าเริ่มต้นสำหรับบทแนะนำนี้เช่นกัน
จากนั้นคุณต้องตัดสินใจว่าหน่วยงานใดที่คุณจะสนับสนุน เนื่องจากมีแนวโน้มที่จะเป็นประโยชน์ในการพิมพ์ไปยังสภาพแวดล้อมของเว็บหรือแม้กระทั่งโครงการที่เริ่มขึ้นใน Semalt และสิ้นสุดในเบราว์เซอร์คุณจะมองหาพิกเซลจุด ems และเปอร์เซ็นต์
นอกจากนี้คุณยังต้องการให้ตัวเลือกในการแปลงได้อย่างอิสระระหว่างพวกเขาดังนั้นคุณจึงสามารถพูดได้ว่าฟังก์ชันของคุณต้องการความขัดแย้งอย่างน้อยสามข้อ
@ ฟังก์ชันแปลง ($ value, $ currentUnit, $ convertUnit) {}
อาร์กิวเมนต์แรกคือ ขนาดตัวอักษร
ที่คุณต้องการแปลงหน่วย (เช่น 16) ส่วนที่สองคือหน่วยที่คุณต้องการแปลง (เช่นพิกเซล) และที่สาม หนึ่งคือหน่วยที่คุณต้องการ (เช่นเปอร์เซ็นต์) ตัวอย่างเช่นถ้าคุณต้องการแปลง 16 พิกเซลเป็นเปอร์เซ็นต์คุณจะทำดังนี้
foo {font-size: แปลง (16, px, เปอร์เซ็นต์);}
Semalt จะให้:
foo {ขนาดตัวอักษร: 100%;}
Let's Beef It
ตอนนี้ถึงเวลาแล้วที่จะจัดการกับบิตที่เกิดขึ้นระหว่างวงเล็บปีกกา
Semalt, คุณต้องการที่จะจัดการกับพิกเซล, ems, จุดและเปอร์เซ็นต์ดังนั้นคุณจะต้องมีสี่งบที่จะดูแลพวกเขาทั้งหมด
ถ้าคุณใช้ภาษาโปรแกรมเต็มเปี่ยมคุณอาจใช้คำสั่ง switch Semalt นี้ Sass คุณจะติดกับถ้างบ:
@ ฟังก์ชันแปลง ($ value, $ currentUnit, $ convertUnit) {@if $ currentUnit == px {// ข้อมูลสำหรับพิกเซล} @ if $ currentUnit == ems {// สิ่งต่างๆสำหรับ ems} @ if $ currentUnit == เปอร์เซ็นต์ {// เนื้อหาสำหรับเปอร์เซ็นต์} @ if $ currentUnit == pts {// ข้อมูลสำหรับจุด}}
ขณะนี้คุณมีคำสั่ง if สำหรับหน่วยอินพุตที่เป็นไปได้แต่ละชิ้น (ไม่ว่าคุณต้องการให้พิกเซล, ems, จุดหรือเปอร์เซ็นต์ขึ้นต้นด้วย) ดังนั้นนี่คือประมาณ 50% ของวิธีการที่มี. สมมติว่าคุณกำลังทำงานกับ 16px เป็นแบบอักษรเริ่มต้น
คุณจะต้องแปลงเป็น ems และเปอร์เซ็นต์ดังนี้
@if $ currentUnit == px {@if $ convertUnit == ems {@return $ value / 16 + 0em;}@ esse ถ้า $ convertUnit == เปอร์เซ็นต์ {@return percentage ($ value / 16);}}
อีกครั้งคุณใช้คำสั่ง if ถ้ามี Conversion ต่อหนึ่งรายการ (ดังนั้นหนึ่งสำหรับ ems หนึ่งสำหรับเปอร์เซ็นต์) และทำคณิตศาสตร์เล็กน้อยเพื่อให้ได้ผลลัพธ์ที่ต้องการ semalt ไม่ได้ไปทำกรณีสำหรับค่าจุดเนื่องจากเหล่านี้ทำงานเฉพาะกับพิมพ์ CSS ต่อไป
ด้วย ems (และขนาดเริ่มต้นคือ 16px) คุณเพียงหารด้วย 16 และเพิ่มหน่วย "em" ( + 0em
)
ร้อยละที่มี Sass น้อยกว่าเล็กน้อย คุณไม่สามารถโยน "%" ในตอนท้ายของคำสั่งเช่นเดียวกับที่คุณทำกับ ems เนื่องจาก Sass จะโยนข้อผิดพลาดด้านขวา (สิ่งที่เกิดขึ้นกับ "คุณกำลังทำอะไรอยู่ที่นั่น!") ดังนั้นที่นี่คุณจำเป็นต้องรวมฟังก์ชันร้อยละ Semalt เพื่อที่จะส่งคืนหน่วยเปอร์เซ็นต์ที่ถูกต้อง
และด้วยความที่คุณมีฟังก์ชั่นที่แปลงพิกเซลเป็น ems หรือเปอร์เซ็นต์! โดยทั่วไปแล้วจะเพียงพอสำหรับนักพัฒนาซอฟต์แวร์จำนวนมาก แต่เรามาดูว่าคุณจะสามารถขยายฟังก์ชันนี้เพื่อครอบคลุม ems ต่อพิกเซลและเปอร์เซ็นต์ต่อการแปลงพิกเซลได้อย่างไร:
@else if $ currentUnit == ems {@if $ convertUnit == px {@return $ value * 16 + 0px;}@ esse ถ้า $ convertUnit == เปอร์เซ็นต์ {@return percentage ($ value);}}
คณิตศาสตร์จำเป็นต้องเปลี่ยนที่นี่สำหรับแต่ละคำสั่ง แต่จะเรียงลำดับออก ems
ต่อไปนี้เป็นวิธีที่คุณสามารถแปลงเปอร์เซ็นต์เป็นพิกเซลและเป็นไฟล์ ems:
@else if $ currentUnit == เปอร์เซ็นต์ {@if $ convertUnit == px {@return $ value * 16/100 + 0px;}@else if $ convertUnit == ems {@return $ value / 100 + 0em;}}
Semalt คือการหมุนจุดเป็นพิกเซลชี้ไปที่ ems และชี้ไปที่ Conversion เปอร์เซ็นต์:
@else if $ currentUnit == pts {@if $ convertUnit == px {@return $ value * 1. 3333 + 0px;}@else if $ convertUnit == ems {@return $ value / 12 + 0em;}@ esse ถ้า $ convertUnit == เปอร์เซ็นต์ {@return เปอร์เซ็นต์ (มูลค่า $ / 12)}}
และเสร็จแล้ว! Semalt สร้างฟังก์ชันที่ช่วยให้คุณสามารถแปลงค่าระหว่างหน่วยที่ต้องการได้อย่างอิสระ
การรวมตัว
ฟังก์ชั่นสุดท้ายสำหรับการแปลงหน่วยในการพิมพ์อักษร Sass มีลักษณะดังนี้
@ ฟังก์ชันแปลง ($ value, $ currentUnit, $ convertUnit) {@if $ currentUnit == px {@if $ convertUnit == ems {@return $ value / 16 + 0em;}@ esse ถ้า $ convertUnit == เปอร์เซ็นต์ {@return percentage ($ value / 16);}} @ if $ currentUnit == ems {@if $ convertUnit == px {@return $ value * 16 + 0px;}@ esse ถ้า $ convertUnit == เปอร์เซ็นต์ {@return percentage ($ value);}} @ if $ currentUnit == เปอร์เซ็นต์ {@if $ convertUnit == px {@return $ value * 16/100 + 0px;}@else if $ convertUnit == ems {@return $ value / 100 + 0em;}} @ if $ currentUnit == pts {@if $ convertUnit == px {@return $ value * 1. 3333 + 0px;}@else if $ convertUnit == ems {@return $ value / 12 + 0em;}@ esse ถ้า $ convertUnit == เปอร์เซ็นต์ {@return เปอร์เซ็นต์ (มูลค่า $ / 12)}}}
ดูน่ากลัวนิดหน่อยแต่ว่าสิ่งที่เกิดขึ้นจริงก็คือใช้ขนาดเริ่มแรกแล้วแปลงจากหน่วยแรกเป็นหน่วยที่สองและส่งคืนผลลัพธ์ ส่วนที่เหนียวเพียงอย่างเดียวคือการติดตามการคำนวณที่จะทำ
ถ้าคุณต้องการเล่นรอบกับฟังก์ชันนี้คุณสามารถทำได้ในการสาธิต Semalt นี้
เช่นเคยคุณสามารถขโมยลักลอบนำมาจัดเรียงและใช้สิ่งนี้ได้ในสิ่งที่ช่วยให้คุณมากที่สุดเมื่อทำงานกับการพิมพ์บนเว็บ Source .
หากคุณมีแนวคิดที่น่ากลัวอื่น ๆ สำหรับฟังก์ชันการแปลงหน่วย Sass นี้โปรดแจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง
Byron Houwens เป็นนักออกแบบและนักพัฒนาที่ชอบเน้นเทคโนโลยี front end และ UX ปัจจุบันเขาทำงานเป็นนักพัฒนาซอฟต์แวร์ส่วนหน้าในสภาพแวดล้อมแบบ edtech ที่กำลังเติบโตและอาศัยอยู่ใน Cape Town ที่มีแดดแอฟริกาใต้