ข้อมูลเบื้องต้นเกี่ยวกับแบบอักษรตัวแปรบนเว็บ

ข้อกำหนดแบบอักษรใหม่ที่สามารถลดขนาดไฟล์แบบอักษรได้อย่างมาก

ในบทความนี้ เราจะดูว่าแบบอักษรแบบแปรผันคืออะไร ประโยชน์ที่นำเสนอ และวิธีที่เรานำไปใช้ในงานได้ ก่อนอื่น มาทบทวนวิธีการทำงานของการจัดรูปแบบตัวอักษรบนเว็บและนวัตกรรมที่แบบอักษรแบบผันแปรนำมา

ความเข้ากันได้กับเบราว์เซอร์

ตั้งแต่เดือนพฤษภาคม 2020 เบราว์เซอร์ส่วนใหญ่รองรับแบบอักษรที่เปลี่ยนแปลงได้ ดูหัวข้อฉันจะใช้แบบอักษรแบบผันแปรได้ไหมและแบบอักษรสำรอง

บทนำ

นักพัฒนาซอฟต์แวร์มักใช้คำว่าแบบอักษรและแบบตัวพิมพ์สลับกันไปมา แต่ก็มีความแตกต่างอยู่บ้าง นั่นคือแบบอักษรเป็นการออกแบบภาพพื้นฐานที่อาจอยู่ในเทคโนโลยีการจัดเรียงแบบต่างๆ มากมาย และแบบอักษรเป็นหนึ่งในการใช้งานเหล่านี้ในรูปแบบไฟล์ดิจิทัล กล่าวคือ รูปแบบตัวอักษรคือสิ่งที่คุณเห็น ส่วนแบบอักษรคือสิ่งที่คุณใช้

อีกแนวคิดหนึ่งที่มักถูกมองข้ามคือความแตกต่างระหว่างสไตล์กับครอบครัว รูปแบบคือแบบอักษรเดียวที่เฉพาะเจาะจง เช่น ตัวหนาเอียง และตระกูลคือชุดรูปแบบที่สมบูรณ์

ก่อนที่จะมีแบบอักษรแบบแปรผัน แต่ละสไตล์จะใช้เป็นไฟล์แบบอักษรแยกกัน เมื่อใช้แบบอักษรแบบผันแปร คุณจะเก็บสไตล์ทั้งหมดไว้ในไฟล์เดียวได้

ตัวอย่างองค์ประกอบและรายการสไตล์ต่างๆ ของตระกูล Roboto
ซ้าย: ตัวอย่างแบบอักษร Roboto ขวา: รูปแบบที่มีชื่อภายในครอบครัว

ความท้าทายสำหรับนักออกแบบและนักพัฒนาซอฟต์แวร์

เมื่อนักออกแบบสร้างโปรเจ็กต์สิ่งพิมพ์ จะต้องพบกับข้อจำกัดบางอย่าง เช่น ขนาดจริงของเลย์เอาต์หน้า จำนวนสีที่ใช้ได้ (ซึ่งกำหนดโดยประเภทเครื่องพิมพ์ที่จะใช้) และอื่นๆ แต่จะใช้แบบอักษรได้หลายแบบเท่าที่ต้องการ ซึ่งหมายความว่าการจัดรูปแบบตัวอักษรของสื่อสิ่งพิมพ์มักจะมีความซับซ้อนและประณีต เพื่อให้ประสบการณ์การอ่านน่าพึงพอใจ ลองนึกถึงครั้งล่าสุดที่คุณเพลิดเพลินกับการอ่านนิตยสารที่ยอดเยี่ยม

นักออกแบบและนักพัฒนาเว็บมีข้อจำกัดแตกต่างจากนักออกแบบสิ่งพิมพ์ และข้อจำกัดที่สำคัญอย่างหนึ่งคือค่าแบนด์วิดท์ที่เชื่อมโยงกับการออกแบบของเรา ปัญหานี้ถือเป็นจุดที่ขัดขวางประสบการณ์การพิมพ์ตัวอักษรที่สมบูรณ์ยิ่งขึ้น เนื่องจากต้องเสียค่าใช้จ่าย เมื่อใช้แบบอักษรเว็บแบบดั้งเดิม แต่ละสไตล์ที่ใช้ในการออกแบบจะต้องให้ผู้ใช้ดาวน์โหลดไฟล์แบบอักษรแยกต่างหาก ซึ่งจะเพิ่มเวลาในการตอบสนองและเวลาในการแสดงผลหน้าเว็บ เฉพาะแบบปกติและแบบหนา รวมถึงแบบเอียงของแบบอักษรดังกล่าวจะมีข้อมูลแบบอักษรขนาด 500 KB ขึ้นไป ปัญหานี้เกิดขึ้นก่อนที่จะจัดการกับวิธีแสดงผลแบบอักษร รูปแบบสำรองที่เราต้องใช้ หรือผลข้างเคียงที่ไม่พึงประสงค์ เช่น FOIT และ FOUT

ชุดแบบอักษรจำนวนมากมีสไตล์ที่หลากหลายกว่ามาก ตั้งแต่แบบบางไปจนถึงแบบหนา มีทั้งแบบแคบและแบบกว้าง รายละเอียดของสไตล์ที่หลากหลาย และแม้แต่การออกแบบสำหรับขนาดที่เฉพาะเจาะจง (เพิ่มประสิทธิภาพสำหรับขนาดข้อความขนาดใหญ่หรือขนาดเล็ก) เนื่องจากคุณจะต้องโหลดไฟล์แบบอักษรใหม่สำหรับทุกสไตล์ (หรือชุดค่าผสมของสไตล์) นักพัฒนาเว็บจํานวนมากจึงเลือกที่จะไม่ใช้ความสามารถเหล่านี้ ซึ่งทำให้ประสบการณ์การอ่านของผู้ใช้ลดลง

โครงสร้างของแบบอักษรที่ปรับแต่งได้

แบบอักษรแบบแปรผันช่วยแก้ปัญหาเหล่านี้ได้ด้วยการรวมรูปแบบไว้ในไฟล์เดียว

ซึ่งจะเริ่มต้นด้วยสไตล์กลางหรือ "ค่าเริ่มต้น" ซึ่งโดยปกติแล้วจะเป็น "ปกติ" ซึ่งเป็นแบบอักษรโรมันแนวตั้งที่มีน้ำหนักและความกว้างตามแบบฉบับมากที่สุดซึ่งเหมาะกับข้อความธรรมดามากที่สุด จากนั้นจะเชื่อมต่อกับรูปแบบอื่นๆ ในช่วงที่ต่อเนื่องกัน ซึ่งเรียกว่า "แกน" แกนที่ใช้บ่อยที่สุดคือน้ำหนัก ซึ่งสามารถเชื่อมต่อสไตล์เริ่มต้นกับสไตล์ตัวหนาได้ สไตล์แต่ละแบบจะอยู่ในแนวแกน และเรียกว่า "อินสแตนซ์" ของแบบอักษรแบบแปรผัน อินสแตนซ์บางรายการตั้งชื่อโดยนักพัฒนาแบบอักษร เช่น แกนน้ำหนัก ตำแหน่ง 600 เรียกว่า SemiBold

แบบอักษรแบบแปรผัน Roboto Flex มี 3 สไตล์สำหรับแกนน้ำหนัก สไตล์ปกติอยู่ตรงกลาง และอีก 2 สไตล์อยู่ตรงข้ามกันบนแกน โดยสไตล์หนึ่งจะเบากว่าและอีกสไตล์หนึ่งจะหนักกว่า โดยคุณเลือกอินสแตนซ์จากรายการต่อไปนี้ได้ 900 รายการ

อักษร "ก" ที่แสดงในน้ำหนักที่แตกต่างกัน
ด้านบน: ภาพแสดงลักษณะของแกนน้ำหนักสำหรับแบบอักษร Roboto

นักพัฒนาแบบอักษรสามารถเสนอชุดแกนต่างๆ ได้ คุณรวมรายการเหล่านี้เข้าด้วยกันได้เนื่องจากรายการทั้งหมดใช้สไตล์เริ่มต้นเดียวกัน Roboto มี 3 รูปแบบในแกนความกว้าง ได้แก่ แบบปกติที่กึ่งกลางแกน และอีก 2 รูปแบบที่แคบกว่าและกว้างกว่าที่ปลายแต่ละด้าน ซึ่งแสดงความกว้างทั้งหมดของสไตล์ปกติ และรวมกับแกนน้ำหนักเพื่อให้ความกว้างทั้งหมดของน้ำหนักทุกระดับ

Roboto Flex ที่มีความกว้างและน้ำหนักแบบสุ่ม

ซึ่งหมายความว่ามีรูปแบบให้เลือกนับพันรายการ การใช้แบบอักษรหลายแบบอาจดูเยอะไป แต่ความหลากหลายนี้จะช่วยยกระดับคุณภาพประสบการณ์การอ่านได้อย่างมาก และหากไม่มีผลเสียต่อประสิทธิภาพ นักพัฒนาเว็บจะใช้สไตล์ได้กี่สไตล์ก็ได้ตามต้องการ ทั้งนี้ขึ้นอยู่กับการออกแบบ

ตัวเอียง

การจัดการแบบตัวเอียงในแบบอักษรที่เปลี่ยนแปลงได้นั้นน่าสนใจเนื่องจากมีแนวทางที่แตกต่างกัน 2 วิธี ประเภทตัวอักษรอย่าง Helvetica หรือ Roboto มีเส้นขอบที่รองรับการประมาณค่า จึงสามารถประมาณค่าระหว่างรูปแบบโรมันกับเอียงได้ และสามารถใช้แกนความลาดเอียงเพื่อเปลี่ยนจากแบบโรมันเป็นเอียง

รูปแบบตัวอักษรอื่นๆ (เช่น Garamond, Baskerville หรือ Bodoni) มีเส้นขอบของแบบอักษรโรมันและแบบเอียงที่ไม่เข้ากันได้กับการเติมเต็ม เช่น เส้นขอบที่มักกำหนด "n" ตัวพิมพ์เล็กแบบโรมันไม่ตรงกับเส้นขอบที่ใช้กำหนด "n" ตัวพิมพ์เล็กแบบเอียง แทนที่จะใช้การหาค่าเฉลี่ยเชิงเส้นจากเส้นชั้นระดับหนึ่งไปยังอีกเส้นหนึ่ง แอกซิสตัวเอียงจะสลับจากเส้นชั้นระดับแบบโรมันเป็นแบบตัวเอียง

ตัวอย่างแกนน้ำหนักสำหรับแบบอักษร Amstelvar
เส้นขอบของ "n" ใน Amstelvar แบบเอียง (12 จุด น้ำหนักปกติ และความกว้างปกติ) และแบบโรมัน รูปภาพนี้จัดทำโดย David Berlow นักออกแบบและช่างพิมพ์ตัวอักษรจาก Font Bureau

หลังจากเปลี่ยนเป็นแบบเอียง แกนที่ใช้ได้สำหรับผู้ใช้ควรเหมือนกับแกนสำหรับแบบโรมัน เช่นเดียวกับชุดอักขระที่ควรเหมือนกัน

นอกจากนี้ คุณยังดูความสามารถในการแทนที่แบบอักษรสำหรับแบบอักษรแต่ละแบบและใช้แบบอักษรนั้นได้ทุกที่ในพื้นที่การออกแบบของแบบอักษรแบบแปรผัน เช่น การออกแบบเครื่องหมายดอลลาร์ที่มีแถบแนวตั้ง 2 แถบจะเหมาะกับขนาดจุดที่ใหญ่กว่า แต่การออกแบบที่มีแถบเพียงแถบเดียวจะเหมาะกับขนาดจุดที่เล็กกว่า เมื่อมีพิกเซลในการแสดงผลสัญลักษณ์น้อยลง การออกแบบ 2 แถบอาจอ่านไม่ออก ในการแก้ปัญหานี้ เช่นเดียวกับแกนเอียง การแทนที่แบบอักษรหนึ่งด้วยอีกแบบหนึ่งอาจเกิดขึ้นได้ вдольแกนขนาดแบบออปติคอล ณ จุดที่นักออกแบบแบบอักษรกำหนด

กล่าวโดยสรุปคือ นักออกแบบแบบอักษรสามารถสร้างแบบอักษรที่แทรกระหว่างสไตล์ต่างๆ ในเวิร์กช็อปการออกแบบหลายมิติได้เมื่อรูปร่างของแบบอักษรนั้นเอื้ออำนวย ซึ่งจะช่วยให้คุณควบคุมแบบอักษรได้อย่างละเอียดและมีประสิทธิภาพ

คําจํากัดความของแกน

แกนที่มีการจดทะเบียนมี 5 แกน ซึ่งควบคุมลักษณะที่ทราบและคาดการณ์ได้ของแบบอักษร ได้แก่ ความหนา ความกว้าง ขนาดแบบอักษรตามแบบฉบับ ความเอียง และตัวเอียง นอกจากสิ่งเหล่านี้แล้ว ฟอนต์ยังมีแกนที่กำหนดเองได้อีกด้วย ซึ่งสามารถควบคุมแง่มุมการออกแบบแบบอักษรตามที่นักออกแบบแบบอักษรต้องการ ไม่ว่าจะเป็นขนาดของส่วนหัว ความยาวของส่วนโค้งมน ความสูงของส่วนยื่นขึ้น หรือขนาดของจุดบนตัว i

แม้ว่าแกนจะควบคุมฟีเจอร์เดียวกันได้ แต่อาจใช้ค่าที่แตกต่างกัน ตัวอย่างเช่น ในแบบอักษรแบบแปรผันของ Oswald และ Hepta Slab มีแกนเดียวเท่านั้นที่ใช้ได้ นั่นคือน้ำหนัก แต่ช่วงจะแตกต่างกัน Oswald มีช่วงเดียวกับก่อนที่จะอัปเกรดเป็นแบบแปรผัน ซึ่งก็คือ 200 ถึง 700 แต่ Hepta Slab มีน้ำหนักเส้นผมที่ 1 ซึ่งเพิ่มขึ้นไปจนถึง 900

แกน 5 แกนที่ลงทะเบียนมีแท็กตัวพิมพ์เล็ก 4 อักขระที่ใช้เพื่อกำหนดค่าใน CSS

ชื่อแกนและค่า CSS
น้ำหนัก wght
ความกว้าง wdth
ไม่มั่นใจ slnt
ขนาดออปติคอล opsz
ตัวเอียง ital

เนื่องจากนักพัฒนาแบบอักษรเป็นผู้กำหนดว่าแกนใดบ้างที่ใช้ได้ในรูปแบบอักษรแบบแปรผัน และค่าใดบ้างที่แกนได้ คุณจึงต้องดูว่าแบบอักษรแต่ละแบบมีอะไรให้บ้าง เอกสารประกอบของแบบอักษรควรระบุข้อมูลนี้ หรือคุณจะตรวจสอบแบบอักษรโดยใช้เครื่องมืออย่าง Wakamai Fondue ก็ได้

กรณีการใช้งานและประโยชน์

การตั้งค่าค่าแกนขึ้นอยู่กับรสนิยมส่วนตัวและการใช้แนวทางปฏิบัติแนะนำด้านแบบอักษร อันตรายของเทคโนโลยีใหม่คืออาจมีการนำไปใช้ในทางที่ผิด และการตั้งค่าที่เน้นศิลปะหรือเป็นการทดลองมากเกินไปอาจทำให้อ่านข้อความจริงได้ยากขึ้น สําหรับชื่อ การใช้แกนต่างๆ เพื่อสร้างการออกแบบที่ยอดเยี่ยมและเหมือนงานศิลปะเป็นสิ่งที่น่าตื่นเต้น แต่สําหรับข้อความหลัก การใช้แกนต่างๆ อาจทําให้ข้อความอ่านไม่ออก

นิพจน์ที่ตื่นเต้น

ตัวอย่างหญ้าโดย Mandy Michael

ตัวอย่างที่ยอดเยี่ยมอย่างหนึ่งของการแสดงออกทางศิลปะแสดงอยู่ด้านบน ซึ่งเป็นการสํารวจแบบอักษร Decovar โดย Mandy Michael

คุณดูตัวอย่างที่ใช้งานได้และซอร์สโค้ดของตัวอย่างข้างต้นได้ที่นี่

แอนิเมชัน

แบบอักษร Zycon ออกแบบมาเพื่อภาพเคลื่อนไหวโดย David Berlow นักออกแบบและที่ปรึกษาด้านแบบอักษรที่ Font Bureau

นอกจากนี้ คุณยังอาจได้ลองสร้างภาพเคลื่อนไหวของอักขระด้วยแบบอักษรแบบผันแปร ด้านบนคือตัวอย่างการใช้แกนต่างๆ กับแบบอักษร Zycon ดูตัวอย่างภาพเคลื่อนไหวแบบเรียลไทม์ใน Axis Praxis

Anicons เป็นแบบอักษรไอคอนสีแบบเคลื่อนไหวครั้งแรกของโลก โดยอิงตามไอคอน Material Design Anicons เป็นการทดลองที่รวมเทคโนโลยีแบบอักษรล้ำสมัย 2 อย่างเข้าด้วยกัน ได้แก่ แบบอักษรแบบปรับเปลี่ยนได้และแบบอักษรสี

ตัวอย่างภาพเคลื่อนไหวเมื่อวางเมาส์เหนือจากแบบอักษรไอคอนสีของ Anicon

Finesse

Amstelvar ใช้ XTRA เล็กน้อยในทิศทางตรงข้ามเพื่อให้ความกว้างของคำเท่ากัน

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 1 ครั้งในไวยากรณ์ในอนาคต (format('woff2') tech('variations')) และ 1 ครั้งในไวยากรณ์ที่เลิกใช้งานแล้วแต่เบราว์เซอร์รองรับ (format('woff2-variations')) หากเบราว์เซอร์รองรับแบบอักษรแบบแปรผันและรองรับไวยากรณ์ที่กําลังจะมีขึ้น ก็จะใช้คําประกาศแรก หากรองรับแบบอักษรแบบปรับเปลี่ยนได้และไวยากรณ์ปัจจุบัน ก็จะใช้การประกาศที่ 2 โดยทั้ง 2 รายการชี้ไปยังไฟล์แบบอักษรเดียวกัน

2. ช่วงสไตล์: คุณจะเห็นว่าเรามีค่า 2 ค่าสําหรับ font-weight และ font-stretch แทนที่จะบอกเบราว์เซอร์ว่าแบบอักษรนี้มีน้ำหนักแบบใดบ้าง (เช่น font-weight: 500;) ตอนนี้เราจะระบุช่วงน้ำหนักที่แบบอักษรรองรับ สำหรับ 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;
}
เปลี่ยนแกนน้ำหนักของ Roboto Flex จากค่าต่ำสุดเป็นค่าสูงสุด

ในทํานองเดียวกัน เราตั้งค่า font-stretch ด้วยคีย์เวิร์ด (condensed, ultra-expanded) หรือด้วยค่าเปอร์เซ็นต์ได้ ดังนี้

.kinda-narrow {
  font-stretch: 33.3%;
}

.super-wide {
  font-stretch: 151%;
}
การเปลี่ยนแปลงแกนความกว้างของ Roboto Flex จากค่าต่ำสุดเป็นค่าสูงสุด

การใช้ตัวเอียงและตัวเฉียง

แกน 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;
}
เปลี่ยนแกนเอียงของ Roboto Flex จากค่าต่ำสุดเป็นค่าสูงสุด

การใช้ขนาดออปติคัล

รูปแบบตัวอักษรอาจแสดงผลได้เล็กมาก (เชิงอรรถขนาด 12 พิกเซล) หรือใหญ่มาก (บรรทัดแรกขนาด 80 พิกเซล) แบบอักษรสามารถตอบสนองต่อการเปลี่ยนแปลงขนาดเหล่านี้ได้โดยการเปลี่ยนรูปร่างของตัวอักษรให้เหมาะกับขนาดมากขึ้น รูปภาพขนาดเล็กอาจดูดีกว่าหากไม่มีรายละเอียดเล็กๆ น้อยๆ ส่วนรูปภาพขนาดใหญ่อาจดูดีขึ้นหากมีรายละเอียดมากขึ้นและเส้นบางลง

อักษร "a" ที่แสดงในขนาดแบบออปติคอลที่แตกต่างกัน
ตัวอักษร "a" ใน Roboto Flex ที่มีขนาดพิกเซลต่างกัน จากนั้นปรับขนาดให้มีขนาดเท่ากันเพื่อแสดงให้เห็นความแตกต่างในการออกแบบ ลองใช้เองใน Codepen

เราได้เปิดตัวพร็อพเพอร์ตี้ 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 น่าสนใจตรงที่เปลี่ยนน้ำหนักของแบบอักษรโดยไม่เปลี่ยนความกว้าง ดังนั้นการแบ่งบรรทัดจึงไม่เปลี่ยนแปลง การปรับแกนระดับจะช่วยให้คุณไม่ต้องเปลี่ยนแปลงแกนน้ำหนักที่ส่งผลต่อความกว้างโดยรวม แล้วค่อยไปเปลี่ยนแปลงแกนความกว้างที่ส่งผลต่อน้ำหนักโดยรวม

เปลี่ยนแกนระดับของ Roboto Flex จากค่าต่ำสุดเป็นค่าสูงสุด

เนื่องจาก GRAD เป็นแกนที่กำหนดเองซึ่งมีช่วงตั้งแต่ -200 ถึง 150 ใน Roboto Flex เราต้องส่งเรื่องนี้ให้ 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 ล่าสุดสำหรับแบบอักษรแบบแปรผันเวอร์ชันเต็มให้คุณได้ด้วย

การรับค่า Font-variation-settings

แม้ว่าระบบจะรองรับแกนที่ลงทะเบียนทั้งหมดผ่านพร็อพเพอร์ตี้ 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 ไฟล์ ได้แก่ 1 ไฟล์สำหรับน้ำหนัก 200, 1 ไฟล์สำหรับน้ำหนัก 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