- มินิแมปของบล็อกที่แสดงเฉพาะผู้ใช้ Firefox บนเดสก์ท็อป เป็นกรณีศึกษาของการทดลองใช้ฟีเจอร์ CSS เฉพาะเบราว์เซอร์ แม้ Firefox จะมีส่วนแบ่งตลาดเพียง 4%
- แกนหลักคือ ฟังก์ชัน CSS
element() ที่ Firefox เท่านั้นที่รองรับ และในการใช้งานจริงจะใช้ -moz-element() ที่มี vendor prefix
- ฟังก์ชันนี้สามารถ แสดงองค์ประกอบ HTML ใดก็ได้เสมือนเป็นภาพ ขณะเดียวกันก็สะท้อนการเลือกข้อความ การเลื่อนหน้า และการเปลี่ยนแปลงของภาพ lazy-loading แบบเรียลไทม์
- พื้นหลังของมินิแมปใช้ CSS เพียงบรรทัดเดียวในการวาด DOM node
#main เป็น background และใช้ JavaScript ร่วมด้วยสำหรับการเลื่อนกล่อง viewport ปัจจุบัน
- เมื่อใช้ฟีเจอร์เฉพาะของ Firefox ก็สามารถนำบางส่วนของหน้ามาใช้ซ้ำเป็นพื้นหลังของมินิแมปได้ โดยไม่ต้องเรนเดอร์ผ่านแคนวาสแยกต่างหาก
มินิแมปที่อิงกับ element() สำหรับ Firefox โดยเฉพาะ
- มินิแมปของบทความในบล็อกเป็นฟีเจอร์ที่แสดงให้ผู้ใช้ Firefox บนเดสก์ท็อปเห็นเท่านั้น และมีการระบุว่าส่วนแบ่งตลาดของ Firefox ปัจจุบันอยู่ที่ 4%
- Firefox เป็นเบราว์เซอร์เดียวที่รองรับ ฟังก์ชัน CSS
element() และในการใช้งานจริงจำเป็นต้องใช้ vendor prefix
- ฟังก์ชัน
element() สามารถแสดงองค์ประกอบ HTML ใด ๆ ภายในหน้าเป็นเสมือนภาพได้
- สิ่งที่แสดงไม่ใช่ภาพหน้าจอแบบคงที่ แต่ทำงานเหมือน ภาพแบบ live
- การเลือกข้อความหรือการเปลี่ยนแปลงอย่างภาพ lazy-loading ที่ปรากฏระหว่างการเลื่อนหน้าก็จะถูกสะท้อนด้วย
วิธีการทำงาน
- CSS ที่กำหนดองค์ประกอบ HTML อื่นให้เป็นภาพพื้นหลังมีรูปแบบดังนี้
mini-map .screen-image .canvas {
background: white -moz-element(#main) no-repeat scroll center center / contain;
}
-moz-element(#main) ทำหน้าที่วาด DOM node #main เป็น ภาพพื้นหลัง ของมินิแมป
- มีการใช้ JavaScript ด้วยสำหรับการเลื่อนกล่อง viewport ปัจจุบันภายในมินิแมป แต่หัวใจสำคัญในการวาด DOM node อื่นคือ CSS เพียงบรรทัดเดียว
- ใน Firefox สามารถใช้
-moz-element เพื่อแสดงบางส่วนของหน้าในลักษณะมินิแมปได้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เมื่อ 10 ปีก่อนฉันเคยทำไลบรารี JS แนวของเล่นสำหรับพับองค์ประกอบ DOM เหมือนกระดาษชื่อ https://oridomi.com และหวังว่าจะได้ใช้ element() แทนการโคลนโหนดแบบน่าเบื่อทุกครั้งที่พับ
ผ่านมา 10 ปีแล้ว ฟีเจอร์ CSS เฉพาะทางนี้ก็ยังไม่ได้ถูกรับไปใช้โดยเบราว์เซอร์อื่น และสเปก CSS custom filters ที่ออกมาในช่วงเวลาเดียวกัน ตอนนั้นก็คิดว่าอีกไม่นานคงได้ใช้ แต่จนถึงตอนนี้ก็ยังไม่ได้รับ traction
ด้านหนึ่งก็เข้าใจได้ว่าถ้าทำให้ปลอดภัยไม่ได้ก็ควรเลิกฟีเจอร์นั้นไป แต่อีกด้านหนึ่งฉันอยากได้ CSS custom filters มากจริงๆ และจนถึงตอนนี้ก็ยังนึกถึงงานที่น่าจะทำได้ด้วยมันอยู่บ่อยๆ
https://lists.webkit.org/pipermail/webkit-dev/2014-January/0...
ถ้าใช้เอดิเตอร์ที่มีมินิแมป สิ่งแรกที่ฉันทำคือ ปิดมันทันที
สำหรับการเขียนโค้ดมันแทบจะเป็นฟีเจอร์ที่ไร้ประโยชน์ที่สุด และบนเว็บก็ดูไร้ประโยชน์พอๆ กัน เนื้อหามันเล็กเกินกว่าจะดูออกว่าจะไปที่ไหน ไม่ว่าจะเป็นหน้าเว็บสั้นหรือยาวก็ไม่คุ้มกับพื้นที่หน้าจอที่เสียไปหรือความรบกวนสายตา และสารบัญที่ดีมีหัวข้ออธิบายชัดเจนหรือฟังก์ชันค้นหาก็ดีกว่ามากสำหรับการนำทางในหน้า
ที่ที่มินิแมปอาจดูดีได้คือกับสิ่งที่เป็นภาพโดยเนื้อแท้ เช่น รูปขนาดใหญ่หรือแผนที่ ซึ่งตอนซูมแล้วช่วยให้รู้ว่ากำลังดูส่วนไหนของภาพรวมอยู่ เป็นฟีเจอร์แห่งอนาคตที่เท่ดี แต่ implementation นี้ดูไม่ค่อยดีเท่าไร
ทุกวันนี้ระบบปฏิบัติการชอบซ่อนแถบเลื่อนหรือทำให้มันเล็กที่สุดเท่าที่จะทำได้ แต่มินิแมปช่วยแก้ปัญหานั้นได้ และยังแสดงรูปทรงโดยรวมของเนื้อหาในไฟล์ให้เห็นเล็กน้อยด้วย ถึงจะอ่านข้อความไม่ได้ แต่ถ้าเป็นไฟล์ที่ทำมานานแล้ว คุณจะรู้ได้ค่อนข้างแม่นว่ากำลังดูอะไรอยู่
ถึงจะไม่ค่อยจ้องมันตรงๆ แต่มันอยู่ในสายตาเลยเผลอกวาดตามองอยู่บ่อยๆ แบบไม่รู้ตัว ฟีเจอร์แบบนี้ชัดเจนว่าไม่ได้เหมาะกับทุกคน แต่ไม่ชอบมันก็ไม่ได้แปลว่ามันไร้ประโยชน์
เช่น VSCode จะแสดงข้อผิดพลาดในมินิแมปด้วยสีแดงที่เห็นเด่นชัด ทำให้กระโดดไปยังตำแหน่งนั้นได้ง่าย
แถบเลื่อนบอกความยาวของหน้าเพื่อให้ตัดสินใจได้ว่าจะอ่านต่อไหม แต่มินิแมปช่วยแยกได้ว่าเป็นกรณี “บทความสั้นที่ต่อท้ายด้วยคอมเมนต์หลายหน้าซึ่งข้ามได้” หรือ “บทความที่ยาวเกินจะอ่านตั้งแต่แรก”
แต่ฉันคิดเรื่องโค้ดในเชิง ภาพและตำแหน่ง และมักไม่ค่อยแยกไฟล์จนกว่าจะจำเป็น มันเลยช่วยให้ดู “รูปร่าง” ของไฟล์แล้วกระโดดไปยังจุดต่างๆ ได้เร็ว โดยเฉพาะเมื่อไฟล์แบ่งเป็นส่วนชัดเจน
ฉันก็เห็นด้วยเรื่องรูปใหญ่หรือแผนที่ โปรแกรมแต่งภาพส่วนใหญ่ก็มีฟังก์ชัน viewport แบบนั้น และมันมีประโยชน์มากตอนทำงานรายละเอียด
มองเห็นประโยชน์อยู่ แต่ก็ค่อนข้าง wild มัน อัปเดตแบบเรียลไทม์ ตอนเลือกข้อความ และดูเหมือน viewport แยกอีกอันที่ชี้ไปยังเนื้อหาเกือบชุดเดียวกัน
ฉันกำลังคิดถึง use case กับผลกระทบของมันอยู่ และมันก็น่าจะทำงานกับองค์ประกอบที่ซ่อนด้วยเทคนิค offscreen หรือ
overflow:hiddenได้ด้วย แต่เท่าที่รู้ ถ้าไม่มีไลบรารีก็ยังไม่มีวิธีแปลงองค์ประกอบนั้นเป็นภาพ และคงเพราะเหตุผลด้านความเป็นส่วนตัวหน้า MDN ค่อนข้างสั้นเลยมีคำถามเยอะ ถึงจะสามารถใช้ CSS filters และการบิดรูปกับองค์ประกอบโดยตรงได้อยู่แล้ว แต่การที่อันนี้ถูกจัดการเหมือนพื้นหลังจะเปิดความเป็นไปได้ใหม่หรือเปล่า? มันมีมานานแล้วแต่ฉันเพิ่งเคยได้ยิน และไม่คิดว่าฟีเจอร์แบบนี้จะเคยถูกเสนอเข้าชิงใน CSS ด้วย ถ้าตั้งใจทำเพื่อ Firefox อย่างเดียวและไม่สน Chrome ฉันก็สงสัยว่ามันจะมีประโยชน์มากไปกว่าการโคลน viewport แค่ไหน
อย่างเช่นอาจใช้กับงานแก้ไขได้ และน่าจะยังมี use case ที่ฉันนึกไม่ถึงอีกมาก โดยพื้นฐานแล้วมันไม่ใช่ฟีเจอร์ที่จำเป็นสุดๆ แต่แต่ละแบบก็ดูเท่ในทางของมัน
ทุกวันฉันเจอ เว็บที่ใช้ได้แค่บน Chrome ตอนนี้ได้เวลาสวนกลับแล้ว :)
เดือนที่แล้วตอนเช็กอินเที่ยวบินระหว่างประเทศของ American Airlines ฉันทำขั้นตอนต่อไม่ได้เพราะ checkbox ที่จำเป็นไม่แสดงใน Firefox จนมารู้ว่าเปิดใน Chrome แล้วมันแสดง จึงไปต่อได้
ฉันเคยเจอหน้าที่ obscure กว่าของเว็บไซต์ Vanguard พังพร้อมคอนโซลเออร์เรอร์ แต่พอเปลี่ยนไป Chrome ก็ใช้งานได้
ฉันเจอหลายหน้าที่เมื่อก่อนทำงานบน Firefox ได้ดีแต่ตอนนี้ไม่ได้แล้ว และบางครั้งต้องเปิดเบราว์เซอร์อื่น หวังจริงๆ ว่าจะไม่ใช่เรื่องแบบนั้น โดยปกติฉันใช้ Firefox เป็นหลัก
น่าประหลาดใจที่
element()บน Firefox รองรับอย่างสมบูรณ์มาตั้งแต่ปี 2011 พร้อม-moz-แต่เบราว์เซอร์อื่นดูเหมือนจะยังไม่รองรับแม้แต่บางส่วน https://caniuse.com/css-element-functionถ้ามีการรองรับข้ามเบราว์เซอร์ ก็นึก use case ทรงพลังได้อีกหลายอย่าง ไม่ใช่แค่มินิแมปอย่างเดียว ถ้ามีใครรู้จักคนในทีม Chrome หรือ WebKit ก็อยากรู้เหตุผลว่าเป็นเพราะไม่ค่อยมีความสนใจ ทำให้มีประสิทธิภาพดีได้ยาก หรือมีปัญหาด้านความปลอดภัยที่ซับซ้อนกันแน่
element()ทำ https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-box...โดยเฉพาะคือจัดการการสะท้อนขององค์ประกอบ ส่วนตัวคิดว่า use case ที่ใหญ่ที่สุดของ
-moz-elementก็คือเรื่องการสะท้อนนี่เองมินิแมปก็น่ารักดี แต่ โปรแกรมรักษาหน้าจอ ที่เปิดขึ้นเมื่อปล่อยแท็บ idle ไว้ 3 นาทีสนุกกว่าอีก
ชอบที่บนเว็บยังมีความขี้เล่นแบบนี้หลงเหลืออยู่
สิ่งนี้ดูเหมือนเป็นฟีเจอร์ที่เว็บไซต์ซึ่ง ตั้งใจทำลายความสามารถพื้นฐานของเบราว์เซอร์ อย่างการคลิกขวาบันทึกรูปหรือเลือกข้อความ น่าจะเอาไปใช้ในทางที่แย่มากได้
ถ้าเรนเดอร์ทั้งหน้าเป็นภาพพื้นหลัง ก็จะไม่สามารถตรวจสอบ บันทึก หรือแปลเนื้อหาได้อีก นี่เป็นแค่ตัวอย่างแรกที่นึกออก และน่าจะมีวิธีไม่หวังดีอีกสารพัดที่จะใช้ฟังก์ชันนี้มารังแกผู้อ่าน
เหตุผลที่เว็บไซต์ส่วนใหญ่ไม่ทำแบบนั้น ไม่ใช่เพราะทำไม่ได้ แต่เพราะจริง ๆ แล้วไม่ได้อยากทำ และเว็บไซต์ห่วย ๆ ก็มี บทลงโทษทางเศรษฐกิจ คือผู้ใช้จะหนีไปหาคู่แข่ง
แต่ในพื้นที่ที่ไม่ใช่ตลาดเสรี เช่น พอร์ทัลอินทราเน็ตของบริษัทหรือเว็บไซต์รัฐบาลท้องถิ่นห่วย ๆ หลักการนี้ใช้ได้ไม่ดี จึงมักเห็นสิ่งที่เป็นปฏิปักษ์ต่อผู้ใช้บ่อยกว่า โดยทั่วไปแล้ว การคิดว่าต้องคอยจำกัดผู้ดูแลเว็บไซต์โดยเจตนาเพื่อให้คุณภาพเว็บดีขึ้นนั้นเป็นความเข้าใจผิด จริง ๆ แล้วตรงกันข้าม
น่าประทับใจที่มินิแมปทำงานได้ดีแค่ไหนกับบทความยาว ๆ ผมลองคลิกสุ่มไปเจอ https://www.stefanjudis.com/notes/should-responsive-images-w... แล้วมินิแมปก็ขึ้นมาทันที และอัปเดตแบบซิงก์กับการกระทำอย่างการเลือกข้อความด้วย จนรู้สึกเหมือนเวทมนตร์นิด ๆ
น่าเสียดายอยู่นิดที่มันยังควบคุมมินิแมปเพื่อเลื่อนหน้าแบบ Sublime Text ไม่ได้ แต่ในมุมคนทำเว็บก็น่าจะทำยากกว่า ถึงอย่างนั้นการที่เว็บทำอะไรแบบนี้ได้ก็น่าทึ่งมาก และก็สงสัยว่าถ้าจะให้ Chrome หรือ Safari รองรับฟีเจอร์ CSS ซับซ้อนนี้จะต้องใช้แรงงานมากแค่ไหน
ช่วงปีที่ผ่านมาใช้ Firefox เพราะมีความเข้ากันไม่ได้แปลก ๆ ระหว่าง GPU กับการถอดรหัสวิดีโอของ Chrome
มันทำให้เกิดเฟรมดรอปและคุณภาพ YouTube ลดลง นอกจากเรื่องที่บน Firefox ไม่มีเว็บแปลภาษาที่ดีจริง ๆ แล้ว ก็แทบไม่เจอปัญหาใหญ่
-moz-elementดูดีมาก และอยากให้มีในเบราว์เซอร์อื่นด้วยเหตุผลหลักคือมันมีพอร์ตพกพามาให้เป็นค่าปริยาย และหาโปรไฟล์ได้จากการดูแค่โฟลเดอร์ จึงสะดวกกับการซิงก์มาก แต่ช้ามาก ต่อให้ปิดเมลกับฟีดที่กิน CPU หนัก ๆ ก็ยังทำให้มันเร็วขึ้นไม่ได้ พอกลับมาใช้ Firefox แล้วจัดการใหม่ ก็รู้สึกว่ามันลื่นมากจนคิดว่ามี 3 โปรไฟล์คือ
normal,dev,mediaแล้วใช้บุ๊กมาร์กจัดการที่เหลือน่าจะดีกว่าตัวเลือก UI และความสามารถในการปรับแต่งของ Vivaldi นั้นยอดเยี่ยม แต่พอรวม Tree Style Tabs กับแอดออนอีกบางตัว รวมถึงการแฮ็ก CSS ของ UI เข้าไป สุดท้ายก็กลับมาใช้ Firefox เป็นเบราว์เซอร์หลักอีกครั้งและทำเหมือนไม่มีอะไรเกิดขึ้น
อย่างไรก็ตาม อยากให้ Firefox แคช WebGL shaders ที่คอมไพล์แล้ว ตรงนี้ Chrome เหนือกว่ามาก อาจจะมีวิธีปรับใน settings ก็ได้ แต่ผมยังไม่ได้ไปดู และในค่าเริ่มต้น เวลารีโหลดหน้าที่มี shader เยอะ ๆ Chrome จะเกือบเสร็จทันทีแม้บนมือถือ ขณะที่ Firefox อาจใช้เวลานาน ขึ้นอยู่กับ shader
ถ้าจากนี้ไปเราเริ่มเห็นคำว่า ทำงานได้ดีที่สุดบน Firefox แทน “ทำงานได้ดีที่สุดบน Chrome/Edge” ก็คงดีเหมือนกัน