ข้อกำหนดแบบอักษรใหม่ที่สามารถลดขนาดไฟล์แบบอักษรได้อย่างมาก
ในบทความนี้ เราจะดูว่าแบบอักษรแบบแปรผันคืออะไร ประโยชน์ที่นำเสนอ และวิธีที่เรานำไปใช้ในงานได้ ก่อนอื่น มาทบทวนวิธีการทำงานของการจัดรูปแบบตัวอักษรบนเว็บและนวัตกรรมที่แบบอักษรแบบผันแปรนำมา
ความเข้ากันได้กับเบราว์เซอร์
ตั้งแต่เดือนพฤษภาคม 2020 เบราว์เซอร์ส่วนใหญ่รองรับแบบอักษรที่เปลี่ยนแปลงได้ ดูหัวข้อฉันจะใช้แบบอักษรแบบผันแปรได้ไหมและแบบอักษรสำรอง
บทนำ
นักพัฒนาซอฟต์แวร์มักใช้คำว่า "แบบอักษร" และ "แบบอักษร" แทนกัน แต่ก็มีความแตกต่างกัน กล่าวคือ แบบตัวพิมพ์คือการออกแบบภาพที่แฝงอยู่ซึ่งอาจมีอยู่ในเทคโนโลยีการพิมพ์ประเภทต่างๆ มากมาย และแบบอักษรเป็นหนึ่งในการใช้งานเหล่านี้ในรูปแบบไฟล์ดิจิทัล กล่าวคือ รูปแบบตัวอักษรคือสิ่งที่คุณเห็น ส่วนแบบอักษรคือสิ่งที่คุณใช้
อีกแนวคิดหนึ่งที่มักถูกมองข้ามคือความแตกต่างระหว่างสไตล์กับครอบครัว รูปแบบคือแบบอักษรเดียวที่เฉพาะเจาะจง เช่น ตัวหนาเอียง และตระกูลคือชุดรูปแบบที่สมบูรณ์
ก่อนที่จะมีแบบอักษรแบบแปรผัน แต่ละสไตล์จะใช้เป็นไฟล์แบบอักษรแยกกัน เมื่อใช้แบบอักษรแบบผันแปร คุณจะเก็บสไตล์ทั้งหมดไว้ในไฟล์เดียวได้
ความท้าทายสำหรับนักออกแบบและนักพัฒนาซอฟต์แวร์
เมื่อนักออกแบบสร้างโปรเจ็กต์สิ่งพิมพ์ จะต้องพบกับข้อจำกัดบางอย่าง เช่น ขนาดจริงของเลย์เอาต์หน้า จำนวนสีที่ใช้ได้ (ซึ่งกำหนดโดยประเภทเครื่องพิมพ์ที่จะใช้) และอื่นๆ แต่จะใช้แบบอักษรได้หลายแบบเท่าที่ต้องการ ซึ่งหมายความว่าการจัดรูปแบบตัวอักษรของสื่อสิ่งพิมพ์มักจะมีความซับซ้อนและประณีต เพื่อให้ประสบการณ์การอ่านน่าพึงพอใจ ลองนึกถึงครั้งล่าสุดที่คุณเพลิดเพลินกับการอ่านนิตยสารที่ยอดเยี่ยม
นักออกแบบและนักพัฒนาเว็บไซต์มีข้อจำกัดต่างจากนักออกแบบสิ่งพิมพ์ และปัจจัยที่สำคัญคือต้นทุนแบนด์วิดท์ที่เกี่ยวข้องกับการออกแบบของเรา ปัญหานี้ถือเป็นจุดที่ขัดขวางประสบการณ์การพิมพ์ที่สมบูรณ์ยิ่งขึ้น เนื่องจากต้องเสียค่าใช้จ่าย เมื่อใช้แบบอักษรบนเว็บแบบดั้งเดิม แต่ละรูปแบบที่ใช้ในการออกแบบจะต้องให้ผู้ใช้ดาวน์โหลดไฟล์แบบอักษรแยกต่างหาก ซึ่งจะเพิ่มเวลาในการตอบสนองและเวลาในการแสดงผลหน้าเว็บ เฉพาะแบบปกติและแบบหนา รวมถึงแบบเอียงของแบบอักษรดังกล่าวจะมีข้อมูลแบบอักษรขนาด 500 KB ขึ้นไป ปัญหานี้เกิดขึ้นก่อนที่จะจัดการกับวิธีแสดงผลแบบอักษร รูปแบบสำรองที่เราต้องใช้ หรือผลข้างเคียงที่ไม่พึงประสงค์ เช่น FOIT และ FOUT
ชุดแบบอักษรจำนวนมากมีสไตล์ที่หลากหลายกว่ามาก ตั้งแต่แบบบางไปจนถึงแบบหนา มีทั้งแบบแคบและแบบกว้าง รายละเอียดของสไตล์ที่หลากหลาย และแม้แต่การออกแบบสำหรับขนาดที่เฉพาะเจาะจง (เพิ่มประสิทธิภาพสำหรับขนาดข้อความขนาดใหญ่หรือขนาดเล็ก) เนื่องจากคุณจะต้องโหลดไฟล์แบบอักษรใหม่สำหรับทุกสไตล์ (หรือชุดค่าผสมของสไตล์) นักพัฒนาเว็บจํานวนมากจึงเลือกที่จะไม่ใช้ความสามารถเหล่านี้ ซึ่งทำให้ประสบการณ์การอ่านของผู้ใช้ลดลง
โครงสร้างของแบบอักษรที่ปรับแต่งได้
แบบอักษรที่ปรับเปลี่ยนได้จะช่วยจัดการกับความท้าทายเหล่านี้โดยการรวมรูปแบบเป็นไฟล์เดียว
ซึ่งทำงานโดยเริ่มด้วยรูปแบบ "กลาง" หรือ "เริ่มต้น" ซึ่งมักจะเป็น "ปกติ" ซึ่งเป็นการออกแบบแบบโรมันตั้งตรงโดยมีน้ำหนักและความกว้างทั่วไป เหมาะกับข้อความธรรมดาที่สุด รูปแบบนี้จะเชื่อมต่อกับรูปแบบอื่นๆ ในช่วงที่ต่อเนื่องซึ่งเรียกว่า "แกน" แกนที่ใช้บ่อยที่สุดคือน้ำหนัก ซึ่งสามารถเชื่อมต่อสไตล์เริ่มต้นกับสไตล์ตัวหนาได้ สไตล์แต่ละแบบจะวางตามแนวแกนได้ และเรียกว่า "อินสแตนซ์" ของแบบอักษรแบบปรับเปลี่ยนได้ อินสแตนซ์บางรายการตั้งชื่อโดยนักพัฒนาแบบอักษร เช่น แกนน้ำหนัก ตำแหน่ง 600 เรียกว่า SemiBold
แบบอักษรแบบแปรผัน Roboto Flex มี 3 สไตล์สำหรับแกนน้ำหนัก สไตล์ปกติอยู่ตรงกลาง และอีก 2 สไตล์อยู่ตรงข้ามกันบนแกน โดยสไตล์หนึ่งเบากว่าและอีกสไตล์หนึ่งหนักกว่า โดยคุณเลือกอินสแตนซ์จากรายการต่อไปนี้ได้ 900 รายการ
นักพัฒนาแบบอักษรสามารถเสนอชุดแกนต่างๆ ได้ คุณรวมรายการเหล่านี้เข้าด้วยกันได้เนื่องจากรายการทั้งหมดใช้สไตล์เริ่มต้นเดียวกัน Roboto มี 3 รูปแบบในแกนความกว้าง ได้แก่ แบบปกติที่กึ่งกลางแกน และอีก 2 รูปแบบที่แคบและกว้างกว่าอยู่ตรงปลายแต่ละด้าน ซึ่งแสดงความกว้างทั้งหมดของสไตล์ปกติ และรวมกับแกนน้ำหนักเพื่อให้ความกว้างทั้งหมดของน้ำหนักทุกระดับ
ซึ่งหมายความว่ามีรูปแบบให้เลือกนับพันรายการ การใช้แบบอักษรหลายแบบอาจดูเยอะไป แต่ความหลากหลายนี้จะช่วยยกระดับคุณภาพประสบการณ์การอ่านได้อย่างมาก และหากไม่มีผลเสียต่อประสิทธิภาพ นักพัฒนาเว็บจะใช้สไตล์ได้กี่สไตล์ก็ได้ตามต้องการ ทั้งนี้ขึ้นอยู่กับการออกแบบ
ตัวเอียง
การจัดการแบบตัวเอียงในแบบอักษรที่เปลี่ยนแปลงได้นั้นน่าสนใจเนื่องจากมีแนวทางที่แตกต่างกัน 2 วิธี แบบอักษรอย่าง Helvetica หรือ Roboto มีเส้นโครงร่างที่เข้ากันได้กับการประมาณด้วยเช่นกัน ดังนั้น รูปแบบโรมันและตัวเอียงสามารถสอดประสานระหว่างและแกนการเอียง เพื่อแปลงจากภาษาโรมันไปยังตัวเอียงได้
รูปแบบตัวอักษรอื่นๆ (เช่น Garamond, Baskerville หรือ Bodoni) มีเส้นขอบของแบบอักษรโรมันและแบบเอียงที่ไม่เข้ากันได้กับการเติมเต็ม เช่น เส้นขอบที่มักกำหนด "n" ตัวพิมพ์เล็กแบบโรมันไม่ตรงกับเส้นขอบที่ใช้กำหนด "n" ตัวพิมพ์เล็กแบบเอียง แทนที่จะใช้การหาค่าเฉลี่ยเชิงเส้นจากเส้นชั้นระดับหนึ่งไปยังอีกเส้นหนึ่ง แอกซิสตัวเอียงจะสลับจากเส้นชั้นระดับแบบโรมันเป็นแบบตัวเอียง
หลังจากเปลี่ยนเป็นแบบเอียง แกนที่ใช้ได้สำหรับผู้ใช้ควรเหมือนกับแกนสำหรับแบบโรมัน เช่นเดียวกับชุดอักขระที่ควรเหมือนกัน
นอกจากนี้ คุณยังดูความสามารถในการแทนที่แบบอักษรสำหรับแบบอักษรแต่ละแบบและใช้แบบอักษรนั้นได้ทุกที่ในพื้นที่การออกแบบของแบบอักษรแบบแปรผัน เช่น การออกแบบเครื่องหมายดอลลาร์ที่มีแถบแนวตั้ง 2 แถบจะเหมาะกับขนาดจุดที่ใหญ่กว่า แต่การออกแบบที่มีแถบเพียงแถบเดียวจะเหมาะกับขนาดจุดที่เล็กกว่า เมื่อมีพิกเซลในการแสดงผลสัญลักษณ์น้อยลง การออกแบบแถบ 2 แถบอาจอ่านไม่ออก ในการแก้ปัญหานี้ เช่นเดียวกับแกนเอียง การแทนที่แบบอักษรหนึ่งด้วยอีกแบบหนึ่งอาจเกิดขึ้นได้ вдольแกนขนาดแบบออปติคอล ณ จุดที่นักออกแบบแบบอักษรกำหนด
กล่าวโดยสรุปคือ นักออกแบบแบบอักษรสามารถสร้างแบบอักษรที่สื่อถึงสไตล์ต่างๆ ในเชิงพื้นที่การออกแบบหลายมิติได้เมื่อรูปร่างของแบบอักษรเอื้ออำนวย ซึ่งจะช่วยให้คุณควบคุมการพิมพ์ได้อย่างละเอียดและมีประสิทธิภาพมากขึ้น
คำจำกัดความของแกน
มีแกนที่ลงทะเบียน 5 แกน ซึ่งควบคุมคุณลักษณะที่ทราบและคาดการณ์ได้ของแบบอักษร ได้แก่ น้ำหนัก ความกว้าง ขนาดออปติคัล เอียงและตัวเอียง นอกจากสิ่งเหล่านี้แล้ว ฟอนต์ยังมีแกนที่กำหนดเองได้อีกด้วย ตัวแปรเหล่านี้สามารถควบคุมลักษณะของแบบอักษรที่นักออกแบบต้องการ เช่น ขนาดของ Serif ความยาวของขอบ ความสูงของตัวอักษรขึ้นลง หรือขนาดของจุดบน i
แม้ว่าแกนต่างๆ จะควบคุมฟีเจอร์เดียวกันได้ แต่ก็อาจใช้ค่าที่ต่างกัน ตัวอย่างเช่น ในแบบอักษรแบบแปรผันของ Oswald และ Hepta Slab มีแกนเดียวเท่านั้นที่ใช้ได้ นั่นคือน้ำหนัก แต่ช่วงจะแตกต่างกัน Oswald มีช่วงเดียวกับก่อนที่จะอัปเกรดเป็นแบบแปรผัน ซึ่งก็คือ 200 ถึง 700 แต่ Hepta Slab มีน้ำหนักเส้นผมที่ 1 ซึ่งเพิ่มขึ้นไปจนถึง 900
แกน 5 แกนที่ลงทะเบียนมีแท็กตัวพิมพ์เล็ก 4 อักขระที่ใช้เพื่อกำหนดค่าใน CSS
ชื่อแกนและค่า CSS | |
---|---|
น้ำหนัก |
wght
|
ความกว้าง |
wdth
|
ไม่มั่นใจ |
slnt
|
ขนาดออปติคัล |
opsz
|
ตัวเอียง |
ital
|
เนื่องจากนักพัฒนาแบบอักษรเป็นผู้กำหนดว่าแกนใดบ้างที่ใช้ได้ในรูปแบบอักษรแบบแปรผัน และค่าใดบ้างที่แกนได้ คุณจึงต้องดูว่าแบบอักษรแต่ละแบบมีอะไรให้บ้าง เอกสารประกอบของแบบอักษรควรระบุข้อมูลนี้ หรือคุณจะตรวจสอบแบบอักษรโดยใช้เครื่องมืออย่าง Wakamai Fondue ก็ได้
กรณีการใช้งานและประโยชน์
การตั้งค่าแกนต่างๆ ขึ้นอยู่กับรสนิยมส่วนตัวและการใช้แนวทางปฏิบัติแนะนำในการพิมพ์ อันตรายจากเทคโนโลยีใหม่อาจเป็นการใช้ในทางที่ผิด และการตั้งค่าที่มีความเป็นศิลปะหรือการสำรวจมากเกินไปก็อาจทำให้ข้อความจริงอ่านน้อยลงด้วย สําหรับชื่อ การใช้แกนต่างๆ เพื่อสร้างการออกแบบที่ยอดเยี่ยมและเหมือนงานศิลปะเป็นสิ่งที่น่าตื่นเต้น แต่สําหรับข้อความหลัก การใช้แกนต่างๆ อาจทําให้ข้อความอ่านไม่ออก
นิพจน์ที่ตื่นเต้น
ตัวอย่างที่ดีอย่างหนึ่งของการแสดงออกด้านศิลปะข้างต้นคือการสำรวจ แบบอักษรของ Decovar โดย Mandy Michael
คุณดูตัวอย่างที่ใช้งานได้และซอร์สโค้ดของตัวอย่างข้างต้นได้ที่นี่
แอนิเมชัน
นอกจากนี้ คุณยังอาจได้ลองสร้างภาพเคลื่อนไหวของอักขระด้วยแบบอักษรแบบผันแปร ด้านบนเป็นตัวอย่างของแกนต่างๆ ที่ใช้กับ Zycon แบบตัวพิมพ์ ดูตัวอย่างภาพเคลื่อนไหวแบบเรียลไทม์ใน Axis Praxis
Anicons เป็นแบบอักษรไอคอนสีแบบเคลื่อนไหวไอคอนแรกของโลก โดยอิงตามไอคอน Material Design Anicons เป็นการทดลองซึ่งรวมเทคโนโลยีแบบอักษรที่ล้ำสมัย 2 แบบเข้าด้วยกัน ได้แก่ แบบอักษรที่หลากหลายและแบบอักษรสีต่างๆ
Finesse
Roboto Flex และ Amstelvar มีชุด "แกนพารามิเตอร์" ในแกนเหล่านี้ ตัวอักษรจะแยกออกเป็น 4 ด้านพื้นฐานของรูปแบบ ได้แก่ รูปทรงสีดําหรือบวก รูปทรงสีขาวหรือลบ และมิติข้อมูล x และ y ในลักษณะเดียวกับที่สีหลักสามารถผสมกับสีอื่นๆ เพื่อปรับแต่งได้ คุณสามารถใช้ 4 ด้านข้างต้นเพื่อปรับแต่งแกนอื่นๆ เพิ่มเติมได้
แกน XTRA ใน Amstelvar ช่วยให้คุณปรับค่า "สีขาว" ต่อพันได้ ดังที่แสดงด้านบน การใช้ XTRA เล็กน้อยในทิศทางตรงข้ามจะทำให้ความกว้างของคำเท่ากัน
แบบอักษรที่ปรับแต่งได้ใน CSS
กำลังโหลดไฟล์แบบอักษรที่ปรับแต่งได้
แบบอักษรแบบแปรผันจะโหลดผ่าน@font-face
กลไกเดียวกับแบบอักษรเว็บแบบคงที่แบบดั้งเดิม แต่มีการปรับปรุงใหม่ 2 อย่างดังนี้
@font-face {
font-family: 'Roboto Flex';
src: url('RobotoFlex-VF.woff2') format('woff2-variations');
src: url('RobotoFlex-VF.woff2') format('woff2') tech('variations');
font-weight: 100 1000;
font-stretch: 25% 151%;
}
1. รูปแบบแหล่งที่มา: เราไม่ต้องการให้เบราว์เซอร์ดาวน์โหลดแบบอักษรหากไม่รองรับแบบอักษรที่เปลี่ยนแปลงได้ เราจึงเพิ่มคำอธิบาย format
และ tech
ดังนี้ เมื่ออยู่ในไวยากรณ์ในอนาคต (format('woff2') tech('variations')
) เมื่อมีการเลิกใช้งานแต่รองรับไวยากรณ์เบราว์เซอร์ (format('woff2-variations')
) แล้ว หากเบราว์เซอร์รองรับแบบอักษรที่เปลี่ยนแปลงได้และรองรับแบบอักษรที่กำลังจะมีขึ้น เบราว์เซอร์จะใช้การประกาศครั้งแรก หากรองรับแบบอักษรแบบปรับเปลี่ยนได้และไวยากรณ์ปัจจุบัน ก็จะใช้การประกาศที่ 2 โดยทั้ง 2 รายการชี้ไปยังไฟล์แบบอักษรเดียวกัน
2. ช่วงสไตล์: คุณจะเห็นว่าเรามีค่า 2 ค่าสําหรับ font-weight
และ font-stretch
แทนที่จะบอกเบราว์เซอร์ว่าแบบอักษรนี้ให้น้ำหนักใด (เช่น font-weight: 500;
) ตอนนี้เราจะกำหนด range ของน้ำหนักที่แบบอักษรดังกล่าวรองรับ สำหรับ Roboto Flex แกนน้ำหนักจะอยู่ที่ 100 ถึง 1,000 และ CSS จะแมปช่วงแกนกับพร็อพเพอร์ตี้ font-weight
style โดยตรง การระบุช่วงใน @font-face
จะทำให้ค่าที่อยู่นอกช่วงนี้ "ถูกจำกัด" เป็นค่าที่ถูกต้องซึ่งใกล้เคียงที่สุด ช่วงแกนความกว้างจะแมปกับพร็อพเพอร์ตี้ font-stretch
ในลักษณะเดียวกัน
หากคุณใช้ Google Fonts API ระบบจะจัดการเรื่องนี้ให้ทั้งหมด นอกจาก CSS จะมีรูปแบบและช่วงแหล่งที่มาที่เหมาะสมแล้ว Google Fonts จะส่งแบบอักษรสำรองแบบคงที่ในกรณีที่ระบบไม่รองรับแบบอักษรที่เปลี่ยนแปลงได้
การใช้น้ำหนักและความกว้าง
ปัจจุบันแกนที่คุณตั้งค่าจาก CSS ได้คือแกน wght
ถึง font-weight
และแกน wdth
ถึง font-stretch
เดิมที คุณจะต้องตั้งค่า font-weight
เป็นคีย์เวิร์ด (light
, bold
) หรือเป็นค่าตัวเลขระหว่าง 100 ถึง 900 โดยแบ่งเป็นขั้นๆ ละ 100 เมื่อใช้แบบอักษรแบบแปรผัน คุณจะตั้งค่าใดก็ได้ภายในช่วงความกว้างของแบบอักษร ดังนี้
.kinda-light {
font-weight: 125;
}
.super-heavy {
font-weight: 1000;
}
ในทํานองเดียวกัน เราตั้งค่า font-stretch
ด้วยคีย์เวิร์ด (condensed
,
ultra-expanded
) หรือด้วยค่าเปอร์เซ็นต์ได้ ดังนี้
.kinda-narrow {
font-stretch: 33.3%;
}
.super-wide {
font-stretch: 151%;
}
การใช้ตัวเอียงและเอียง
แกน ital
มีไว้สำหรับแบบอักษรที่มีทั้งแบบปกติและแบบเอียง แกนนี้ใช้เพื่อเปิด/ปิด โดยค่า 0
จะปิดอยู่และจะแสดงแบบปกติ ส่วนค่า 1
จะแสดงแบบตัวเอียง ไม่เหมือนกับแกนอื่นๆ
ตรงที่ไม่ต้องเปลี่ยน ค่า 0.5
จะไม่แสดงเป็น "ตัวเอียงครึ่งตัว"
แกน slnt
แตกต่างจากตัวเอียงตรงที่ไม่ใช่รูปแบบใหม่แต่เพียงแค่เอียงรูปแบบปกติ โดยค่าเริ่มต้น ค่าของแอตทริบิวต์นี้คือ 0
ซึ่งหมายถึงรูปร่างตัวอักษรตั้งตรงเริ่มต้น Roboto Flex มีองศาความเอียงสูงสุดที่ -10 องศา ซึ่งหมายความว่าตัวอักษรจะเอียงไปทางขวาเมื่อค่าอยู่ในช่วง 0 ถึง -10
คุณสามารถตั้งค่าแกนเหล่านี้ผ่านพร็อพเพอร์ตี้ font-style
ได้โดยสะดวก แต่ตั้งแต่เดือนเมษายน 2020 เป็นต้นไป จะอยู่ระหว่างการแก้ปัญหาเท่านั้น ดังนั้นในตอนนี้ คุณควรถือว่าแกนเหล่านี้เป็นแกนที่กำหนดเอง และตั้งค่าผ่าน font-variation-settings
ดังนี้
i, em, .italic {
/* Should be font-style: italic; */
font-variation-settings: 'ital' 1;
}
.slanted {
/* Should be font-style: oblique 10deg; */
font-variation-settings: 'slnt' 10;
}
การใช้ขนาดออปติคัล
รูปแบบตัวอักษรอาจแสดงผลได้เล็กมาก (เชิงอรรถขนาด 12 พิกเซล) หรือใหญ่มาก (บรรทัดแรกขนาด 80 พิกเซล) แบบอักษรจะตอบสนองต่อการเปลี่ยนแปลงขนาดเหล่านี้ได้โดยการเปลี่ยนรูปร่างของตัวอักษรให้เหมาะกับขนาดมากขึ้น รูปภาพขนาดเล็กอาจดูดีกว่าหากไม่มีรายละเอียดเล็กๆ น้อยๆ ส่วนรูปภาพขนาดใหญ่อาจดูดีขึ้นหากมีรายละเอียดมากขึ้นและเส้นบางลง
มีการแนะนําพร็อพเพอร์ตี้ CSS ใหม่สำหรับแกนนี้: font-optical-sizing
โดยค่าเริ่มต้น ระบบจะตั้งค่าเป็น auto
ซึ่งทําให้เบราว์เซอร์กําหนดค่าแกนตาม font-size
ซึ่งหมายความว่าเบราว์เซอร์จะเลือกขนาดตัวอักษรที่เหมาะสมที่สุดโดยอัตโนมัติ แต่หากต้องการปิดการตั้งค่านี้ ให้ตั้งค่า font-optical-sizing
เป็น none
คุณยังตั้งค่าที่กำหนดเองสำหรับแกน opsz
ได้ด้วย หากต้องการขนาดแบบออปติคอลที่ไม่ตรงกับขนาดแบบอักษร CSS ต่อไปนี้จะทำให้ข้อความแสดงในขนาดที่ใหญ่ แต่มีขนาดแบบออปติคอลราวกับว่าพิมพ์ใน 8pt
.small-yet-large {
font-size: 100px;
font-variation-settings: 'opsz' 8;
}
การใช้แกนที่กำหนดเอง
แกนที่กำหนดเองจะไม่แมปกับพร็อพเพอร์ตี้ CSS ที่มีอยู่ ต่างจากแกนที่ลงทะเบียนไว้ คุณจึงต้องตั้งค่าแกนผ่าน font-variation-settings
เสมอ
แท็กสําหรับแกนที่กำหนดเองจะเป็นตัวพิมพ์ใหญ่เสมอ เพื่อแยกความแตกต่างจากแกนที่ลงทะเบียน
Roboto Flex มีแกนที่กำหนดเอง 2-3 แกน และที่สำคัญที่สุดคือ Grade (GRAD
)
แกน Grade น่าสนใจตรงที่เปลี่ยนน้ำหนักของแบบอักษรโดยไม่เปลี่ยนความกว้าง ดังนั้นการแบ่งบรรทัดจึงไม่เปลี่ยนแปลง การปรับแกนระดับจะช่วยให้คุณไม่ต้องเปลี่ยนแปลงแกนน้ำหนักที่ส่งผลต่อความกว้างโดยรวม แล้วค่อยไปเปลี่ยนแปลงแกนความกว้างที่ส่งผลต่อน้ำหนักโดยรวม
เนื่องจาก GRAD
เป็นแกนที่กำหนดเอง ซึ่งมีช่วงของ Roboto Flex ตั้งแต่ -200 ถึง 150
เราต้องส่งเรื่องนี้ให้ font-variation-settings
.grade-light {
font-variation-settings: `GRAD` -200;
}
.grade-normal {
font-variation-settings: `GRAD` 0;
}
.grade-heavy {
font-variation-settings: `GRAD` 150;
}
แบบอักษรที่ปรับแต่งได้ใน Google Fonts
Google Fonts ได้ขยายแคตตาล็อกด้วยแบบอักษรแบบผันแปร และเพิ่มแบบอักษรใหม่ๆ เป็นประจำ
ปัจจุบันอินเทอร์เฟซมีไว้เพื่อเลือกอินสแตนซ์เดียวจากแบบอักษร โดยคุณเลือกรูปแบบที่ต้องการ แล้วคลิก "เลือกสไตล์นี้" จากนั้นระบบจะเพิ่มรูปแบบนั้นลงในองค์ประกอบ <link>
ที่ดึงข้อมูล CSS และแบบอักษรจาก Google Fonts
หากต้องการใช้แกนหรือช่วงของค่าทั้งหมดที่มีอยู่ คุณจะต้องเขียน URL ไปยัง Google Fonts API ด้วยตนเอง ภาพรวมแบบอักษรแบบผันแปรจะแสดงแกนและค่าทั้งหมด
เครื่องมือลิงก์แบบอักษรแบบแปรผันของ Google ยังแสดง URL ล่าสุดสำหรับแบบอักษรแบบแปรผันเวอร์ชันเต็มให้คุณได้ด้วย
การรับช่วงการตั้งค่าแบบอักษร
แม้ว่าระบบจะรองรับแกนที่ลงทะเบียนทั้งหมดผ่านพร็อพเพอร์ตี้ CSS ที่มีอยู่ในเร็วๆ นี้ แต่ในระหว่างนี้คุณอาจต้องใช้ font-variation-settings
เป็นทางเลือกสำรอง และหากแบบอักษรของคุณมีแกนที่กำหนดเอง คุณก็ต้องใช้ font-variation-settings
ด้วย
อย่างไรก็ตาม โปรดทราบว่า font-variation-settings
มีจุดที่ควรทราบอยู่บ้าง ระบบจะรีเซ็ตพร็อพเพอร์ตี้ทั้งหมดที่คุณไม่ได้ตั้งค่าไว้อย่างชัดเจนเป็นค่าเริ่มต้นโดยอัตโนมัติ
และจะไม่รับค่าที่กําหนดไว้ก่อนหน้านี้ ซึ่งหมายความว่าฟีเจอร์ต่อไปนี้จะไม่ทํางานตามที่คาดไว้
<span class="slanted grade-light">
I should be slanted and have a light grade
</span>
ก่อนอื่น เบราว์เซอร์จะใช้ font-variation-settings: 'slnt' 10
จากคลาส
.slanted
จากนั้นจะมีการใช้ font-variation-settings: 'GRAD' -200
จากคลาส .grade-light
แต่การดำเนินการนี้จะรีเซ็ต slnt
กลับไปเป็นค่าเริ่มต้นเป็น 0 ผลลัพธ์ที่ได้จะเป็นข้อความที่มีสีอ่อน แต่ไม่เอียง
แต่โชคดีที่เราสามารถแก้ปัญหานี้โดยใช้ตัวแปร CSS ดังนี้
/* Set the default values */
:root {
--slnt: 0;
--GRAD: 0;
}
/* Change value for these elements and their children */
.slanted {
--slnt: 10;
}
.grade-light {
--grad: -200;
}
.grade-normal {
--grad: 0;
}
.grade-heavy {
--grad: 150;
}
/* Apply whatever value is kept in the CSS variables */
.slanted,
.grade-light,
.grade-normal,
.grade-heavy {
font-variation-settings: 'slnt' var(--slnt), 'GRAD' var(--GRAD);
}
ตัวแปร CSS จะทํางานแบบตามลําดับชั้น ดังนั้นหากองค์ประกอบ (หรือองค์ประกอบหลักรายการใดรายการหนึ่ง) จะตั้งค่า slnt
เป็น 10
ตัวแปรดังกล่าวจะเก็บค่านั้นไว้ แม้ว่าคุณจะตั้งค่า GRAD
เป็นอย่างอื่นก็ตาม ดูคำอธิบายเชิงลึกเกี่ยวกับเทคนิคนี้ได้จากหัวข้อการแก้ไขการสืบทอดแบบอักษรแบบผันแปร
โปรดทราบว่าภาพเคลื่อนไหวของตัวแปร CSS ใช้งานไม่ได้ (ตามการออกแบบ) ดังนั้นโค้ดต่อไปนี้จึงใช้งานไม่ได้
@keyframes width-animation {
from { --wdth: 25; }
to { --wdth: 151; }
}
ภาพเคลื่อนไหวเหล่านี้จะต้องเกิดขึ้นโดยตรงใน font-variation-settings
ประสิทธิภาพที่ได้รับ
แบบอักษรของตัวแปร OpenType ช่วยให้เราจัดเก็บตระกูลประเภท หลายรูปแบบไว้ในไฟล์แบบอักษรเดียวได้ Monotype ทำการทดสอบโดยการรวมแบบอักษรอินพุต 12 แบบเข้าด้วยกันเพื่อสร้างน้ำหนัก 8 แบบ จากความกว้าง 3 แบบ ทั้งในรูปแบบตัวเอียงและโรมัน การจัดเก็บแบบอักษรเดี่ยว 48 แบบในไฟล์แบบอักษรที่เปลี่ยนแปลงได้ไฟล์เดียวทำให้ขนาดไฟล์ลดลง 88%
อย่างไรก็ตาม หากคุณใช้แบบอักษรเดียว เช่น Roboto Regular และไม่มีแบบอักษรอื่น คุณอาจไม่เห็นขนาดแบบอักษรเพิ่มขึ้นหากเปลี่ยนไปใช้แบบอักษรแบบผันแปรที่มีหลายแกน ดังเช่นเคย ทุกอย่างขึ้นอยู่กับกรณีการใช้งานของคุณ
ในทางกลับกัน การแสดงผลแบบเคลื่อนไหวของแบบอักษรระหว่างการตั้งค่าอาจทำให้เกิดปัญหาด้านประสิทธิภาพ แม้ว่าวิธีนี้จะดีขึ้นเมื่อการรองรับแบบอักษรในเบราว์เซอร์มีอายุมากขึ้น แต่ปัญหาจะลดลงได้พอสมควรโดยการทำให้แบบอักษรเคลื่อนไหวอยู่บนหน้าจอเท่านั้น ข้อมูลโค้ดที่มีประโยชน์นี้จาก Dinamo จะหยุดภาพเคลื่อนไหวในองค์ประกอบที่มีคลาส vf-animation
ชั่วคราวเมื่อองค์ประกอบดังกล่าวไม่ได้แสดงบนหน้าจอ
var observer = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
// Pause/Play the animation
if (entry.isIntersecting) entry.target.style.animationPlayState = "running"
else entry.target.style.animationPlayState = "paused"
});
});
var variableTexts = document.querySelectorAll(".vf-animation");
variableTexts.forEach(function(el) { observer.observe(el); });
หากแบบอักษรตอบสนองต่อการโต้ตอบของผู้ใช้ คุณควรควบคุมหรือทำให้การตอบสนองของเหตุการณ์การป้อนข้อมูลล่าช้า ซึ่งจะช่วยป้องกันไม่ให้เบราว์เซอร์แสดงผลอินสแตนซ์ของแบบอักษรแบบผันแปรที่มีการเปลี่ยนแปลงจากอินสแตนซ์ก่อนหน้าเพียงเล็กน้อยจนสายตามนุษย์มองไม่เห็นความแตกต่าง
หากใช้ Google Fonts คุณควรเชื่อมต่อล่วงหน้ากับ https://fonts.gstatic.com
ซึ่งเป็นโดเมนที่โฮสต์แบบอักษรของ Google ซึ่งจะช่วยให้เบราว์เซอร์ทราบตั้งแต่เนิ่นๆ ว่าจะหาแบบอักษรได้จากที่ใดเมื่อพบแบบอักษรใน CSS
<link rel="preconnect" href="https://fonts.gstatic.com" />
เคล็ดลับนี้เหมาะสำหรับ CDN อื่นๆ ด้วย นั่นคือยิ่งคุณอนุญาตให้เบราว์เซอร์ตั้งค่าการเชื่อมต่อเครือข่ายเร็วเท่าไร เบราว์เซอร์ก็จะดาวน์โหลดแบบอักษรได้เร็วขึ้น
ดูเคล็ดลับเพิ่มเติมเกี่ยวกับประสิทธิภาพในการโหลด Google Fonts ได้ใน Google Fonts ที่เร็วที่สุด
เนื้อหาสำรองและการรองรับเบราว์เซอร์
เบราว์เซอร์สมัยใหม่ทั้งหมดรองรับ แบบอักษรที่หลากหลาย ในกรณีที่ต้องรองรับเบราว์เซอร์รุ่นเก่า คุณสามารถเลือกสร้างเว็บไซต์ด้วยแบบอักษรแบบคงที่ และใช้แบบอักษรแบบผันแปรเป็นการเพิ่มประสิทธิภาพแบบเป็นขั้นเป็นตอนได้ ดังนี้
/* Set up Roboto for old browsers, only regular + bold */
@supports not (font-variation-settings: normal) {
@font-face {
font-family: Roboto;
src: url('Roboto-Regular.woff2');
font-weight: normal;
}
@font-face {
font-family: Roboto;
src: url('Roboto-Bold.woff2');
font-weight: bold;
}
body {
font-family: Roboto;
}
.super-bold {
font-weight: bold;
}
}
/* Set up Roboto for modern browsers, all weights */
@supports (font-variation-settings: normal) {
@font-face {
font-family: 'Roboto';
src: url('RobotoFlex-VF.woff2') format('woff2 supports variations'),
url('RobotoFlex-VF.woff2') format('woff2-variations');
font-weight: 100 1000;
font-stretch: 25% 151%;
}
.super-bold {
font-weight: 1000;
}
}
สำหรับเบราว์เซอร์รุ่นเก่า ข้อความที่มีคลาส .super-bold
จะแสดงผลแบบตัวหนาปกติ เนื่องจากเป็นแบบอักษรตัวหนาเพียงแบบเดียวที่เรามี เมื่อรองรับแบบอักษรแบบผันแปรแล้ว เราจะใช้น้ำหนักที่หนาที่สุดที่ 1000 ได้
Internet Explorer ไม่รองรับกฎ @supports
เบราว์เซอร์นี้จึงจะไม่แสดงการจัดรูปแบบใดๆ หากเกิดปัญหานี้ขึ้น คุณสามารถใช้เคล็ดลับการใช้งานแบบเก่าเพื่อกำหนดเป้าหมายเบราว์เซอร์รุ่นเก่าที่เกี่ยวข้องได้เสมอ
หากคุณใช้ Google Fonts API อยู่ ระบบจะจัดการโหลดแบบอักษรที่เหมาะสมสําหรับเบราว์เซอร์ของผู้เข้าชม สมมติว่าคุณขอแบบอักษร Oswald ในช่วงน้ำหนัก 200 ถึง 700 ดังนี้
<link href="https://fonts.googleapis.com/css2?family=Oswald:wght@200..700&display=swap" rel="stylesheet">
เบราว์เซอร์สมัยใหม่ที่ใช้แบบอักษรแบบแปรผันได้จะใช้แบบอักษรแบบแปรผันได้ และจะแสดงแบบอักษรทุกน้ำหนักระหว่าง 200 ถึง 700 เบราว์เซอร์รุ่นเก่าจะได้รับ แบบอักษรแบบคงที่สำหรับแต่ละน้ำหนัก ในกรณีนี้ พวกเขาจะดาวน์โหลดไฟล์แบบอักษร 6 ไฟล์ ได้แก่ ไฟล์หนึ่งสำหรับน้ำหนัก 200 ไฟล์หนึ่งสำหรับน้ำหนัก 300 เป็นต้น
ขอขอบคุณ
บทความนี้เกิดขึ้นได้ด้วยความช่วยเหลือจากบุคคลต่อไปนี้
- Mustafa Kurtuldu นักออกแบบ UX และผู้สนับสนุนด้านการออกแบบที่ Google
- Roel Nieskens นักออกแบบ/นักพัฒนาซอฟต์แวร์ UX และผู้เชี่ยวชาญด้านการออกแบบตัวอักษรของ Kabisa
- Dave Crossland ผู้จัดการโปรแกรมของ Google Fonts
- David Berlow ผู้ออกแบบและนักออกแบบการพิมพ์ที่ Font Bureau
- Laurence Penney นักพัฒนาซอฟต์แวร์ของ axis-praxis.org
- Mandy Michael นักพัฒนาซอฟต์แวร์ variablefonts.dev
รูปภาพหลักโดย Bruno Martins ใน Unsplash