Modernizr สามารถช่วยให้คุณใช้ CSS Fallbacks ได้อย่างไร

เผยแพร่แล้ว: 2021-04-05

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

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

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

วันนี้ เราจะแสดงให้คุณเห็นถึงวิธีการใช้ไลบรารีการตรวจหาคุณลักษณะ Modernizr เพื่อจุดประสงค์นี้ ไปเลย!

Modernizr คืออะไร?

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

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

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

งานสร้างของเรา

เพื่อจุดประสงค์ของเรา (และเพื่อให้สิ่งต่าง ๆ ง่ายขึ้น) เรากำลังสร้างแพ็คเกจ Modernizr เพื่อตรวจจับ Flexbox เราจะเลือก ย่อ โค้ดและ เพิ่มคลาส CSS ด้วย

เว็บไซต์ Modernizr

ขั้นตอนที่ 1: การตั้งค่าการสาธิต

ในการสาธิตวิธีการทำงานทั้งหมดจะต้องมีไฟล์สองสามไฟล์ – ทั้งสองไฟล์มีอยู่ใน GitHub:

  • flexgrid.css – นี่คือระบบกริด CSS Flexbox แบบง่ายของเรา คุณจะสังเกตเห็นว่ามีคลาสสำหรับการจัดตำแหน่งและความกว้างของคอลัมน์ที่แตกต่างกัน นอกจากนี้ยังมีชุดคลาสพิเศษ . .no-flexbox ที่ใช้ CSS floats ของโรงเรียนเก่าด้วยเช่นกัน ซึ่งจะช่วยให้เราสร้างรูปแบบการจัดวางที่คล้ายกันในเบราว์เซอร์รุ่นเก่า
  • modernizr-custom.js – สคริปต์ดังกล่าวจะตรวจสอบว่าเบราว์เซอร์ปัจจุบันรองรับ CSS Flexbox หรือไม่

ต่อไป เราจะต้องการสร้างเอกสาร HTML ใหม่ที่เรียกไฟล์ทั้งสองด้านบนในพื้นที่ <head> นอกจากนี้ เอกสารจะต้องมีตัวอย่างเค้าโครง CSS Flexbox และเนื้อหาบางส่วน

คุณสามารถใช้ไฟล์สาธิตด้านล่างเพื่อทำการทดลองได้ ประกอบด้วยเลย์เอาต์ 3 คอลัมน์ที่เรียบง่าย พร้อมด้วยการปรับปรุงภาพเล็กน้อย (เพิ่มเติมในอีกเล็กน้อย)

ขั้นตอนที่ 2: ดูเอกสาร HTML ในเบราว์เซอร์สมัยใหม่

ตอนนี้ได้เวลาดูว่าการสาธิตของเรามีลักษณะอย่างไรในเบราว์เซอร์ ในการเริ่มต้น ให้ใช้เว็บเบราว์เซอร์สมัยใหม่ที่รองรับ Flexbox

เค้าโครง CSS 3 คอลัมน์

อย่างน้อยเรา สงสัย ว่ามันรองรับ Flexbox เราจะบอกได้อย่างไร? นั่นคือสิ่งที่ Modernizr ต้องทำ

ในกรณีของเรา เราต้องการดูที่มาของหน้าสาธิต โดยเฉพาะองค์ประกอบ <HTML> หากมีการเพิ่มคลาสของ flexbox ให้กับองค์ประกอบ เรารู้ว่าเบราว์เซอร์ของเรารองรับคุณสมบัตินี้ ไปข้างหน้าและดูที่มาของหน้าในเบราว์เซอร์ของคุณ – เราจะรอ

คลาสไหนคะ?

หากคุณพยายามดูแหล่งที่มาทั้งหมดของหน้า คุณอาจสังเกตเห็นว่าองค์ประกอบ <HTML> ไม่มีคลาส ไม่ต้องกังวล นี่เป็นเรื่องปกติ

นั่นเป็นเพราะคลาสถูกเพิ่มขณะรันไทม์ หลังจาก Modernizr ทดสอบฟีเจอร์ที่เลือก ดังนั้นจะไม่แสดงในซอร์สโค้ดแบบเต็ม

ใช้เครื่องมือสำหรับนักพัฒนาของเบราว์เซอร์ของคุณ

ให้เปิดเครื่องมือสำหรับนักพัฒนาเว็บเบราว์เซอร์ของคุณแทน (กดปุ่ม F12 บนแป้นพิมพ์ของคุณ) ซึ่งจะทำให้มองเห็นองค์ประกอบ <HTML> ได้อย่างแม่นยำ

ที่นี่ เราใช้ Firefox Developer Edition เวอร์ชันล่าสุด ตาม Modernizr รองรับ CSS Flexbox เย้!

Firefox Developer Tools แสดงการสนับสนุน CSS Flexbox

ขั้นตอนที่ 3: ทดสอบ CSS Fallback ในเบราว์เซอร์รุ่นเก่า

ทุกอย่างดูดีมากในเบราว์เซอร์ที่ทันสมัยของเรา แต่ซอฟต์แวร์รุ่นเก่าล่ะ?

สไตล์ของเราตั้งค่าให้ใช้ CSS แบบลอยในเบราว์เซอร์ที่ไม่รองรับ Flexbox ทางเลือกดังกล่าวจะช่วยให้เราสร้างเลย์เอาต์แบบหลายคอลัมน์ได้ แม้กระทั่งในการตั้งค่าแบบโบราณ

อ้างอิงจาก Can I use, Flexbox มีการสนับสนุนบางส่วนจนถึง Internet Explorer 10, Firefox 2, Chrome 4 และ Safari 3.1 หลายปีที่ผ่านมาเนื่องจากเบราว์เซอร์เหล่านี้มีการใช้งานกันอย่างแพร่หลาย อย่างไรก็ตาม โดยเฉพาะอย่างยิ่ง IE ยังคงค้างอยู่ที่นี่และที่นั่น

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

มาดูการสาธิตของเราใน IE 10 (ผ่านบริการทดสอบเบราว์เซอร์) และดูว่าเกิดอะไรขึ้น

เลย์เอาต์ CSS แบบ 3 คอลัมน์ โดยคอลัมน์ที่สามถูกผลักไปที่แถวใหม่

ไม่โทรมเกินไป คอลัมน์ที่สามของเราจะถูกผลักลงไปที่แถวถัดไป ซึ่งสามารถปรับแต่งได้ แต่สิ่งที่เกี่ยวกับการสนับสนุน Flexbox?

มุมมองอย่างรวดเร็วของเครื่องมือสำหรับนักพัฒนาของ IE แสดงให้เห็นว่าองค์ประกอบ <HTML> ของเราแสดงคลาสของ no-flexbox นั่นหมายความว่า ไม่รองรับ Flexbox ที่นี่ และกำลังใช้ CSS ทางเลือก

เครื่องมือสำหรับนักพัฒนา Internet Explorer ไม่สนับสนุน CSS Flexbox

แก้ไขเค้าโครงสำหรับ CSS Floats

CSS floats ทางเลือกของเราจะไม่ร่วมมือกับการปรับปรุงภาพที่เราทำ คอลัมน์ที่สามถูกผลักลงไปที่แถวที่สอง ซึ่งดูไม่ค่อยดีนัก

นั่นเป็นเพราะ floats เพิ่ม ช่องว่างภายในและเส้นขอบให้กับความกว้างของคอลัมน์ที่เราตั้งค่าไว้ก่อนหน้านี้ในสไตล์ชีต ในทางกลับกัน Flexbox สามารถปรับรายการเหล่านี้ได้โดยไม่ต้องเพิ่มความกว้างของคอลัมน์โดยรวม จึงเกิดความแตกต่างในผลลัพธ์

มีหลายสิ่งที่เราสามารถทำได้เพื่อแก้ไขสถานการณ์ เราอาจตัดความกว้างของคอลัมน์หรือแม้แต่ลดระยะขอบระหว่างคอลัมน์ ลองตัดความกว้างคอลัมน์จาก 30.66% เป็น 28.66%

การเปรียบเทียบ: เลย์เอาต์ CSS Flexbox (บนสุด) และ CSS float fallback (ล่างสุด)

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

ตรวจจับคุณสมบัติของเบราว์เซอร์และปรับให้เหมาะสม

ในขณะที่การสาธิตของเรามุ่งเน้นไปที่การตรวจจับ CSS Flexbox แต่ Modernizr สามารถทำได้มากกว่านั้น มันสามารถค้นหาคุณสมบัติทั่วไปอื่น ๆ เช่น HTML Canvas, การสนับสนุน SVG, CSS Grid และอาร์เรย์ของเกร็ดความรู้ที่มีประโยชน์อื่น ๆ

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

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