- CSS
text-stroke รับได้เพียงค่าเดียว แต่ถ้านำตัวอักษรเดียวกันมาซ้อนกันหลายเลเยอร์ แล้วกำหนด ความหนาของเส้นขอบ และสีของแต่ละเลเยอร์ให้ต่างกัน ก็สามารถสร้างเอฟเฟกต์ข้อความเส้นขอบหลายชั้นสไตล์เรโทรได้
- เมื่อนำเอฟเฟกต์ข้อความจาก Graphic Japan : from woodblock and zen to manga and kawaii มาเป็นต้นแบบ แล้วตั้งค่า
text-stroke-width ของหลายองค์ประกอบให้ต่างกัน ก็จะได้ผลลัพธ์ที่ใกล้เคียงมากขึ้น
- ใช้การผสมกันของ
text-stroke-width, text-stroke-color, z-index ในแต่ละเลเยอร์เพื่อควบคุมลำดับและสีของเส้นขอบ และแม้ความหนาจะเพิ่มขึ้น รูปร่างตัวอักษรดั้งเดิมก็ยังคงอยู่
- ผลการเรนเดอร์แตกต่างกันไปตามเบราว์เซอร์ โดย Firefox ดูนุ่มนวลกว่า Chrome และ Safari และหากใส่หลายตัวอักษรไว้ในบรรทัดเดียว รูปร่างของตัวอักษรจะถูกรวมเข้าด้วยกัน
- ผลลัพธ์ขึ้นอยู่กับ ฟอนต์ ที่เลือกอย่างมาก และเมื่อ
font-size ใหญ่ขึ้นอาจเห็นอาการกะพริบได้ จึงเหมาะกับการทดลองหรือการสร้างภาพด้วย css-doodle มากกว่าการใช้งานจริงในโปรดักชัน
วิธีทำ
-webkit-text-stroke-color: @pn(--c, #f4e1e8);
-webkit-text-stroke-width: $em(.08n+.02(1-(-1)^n));
- ใส่สีต่างกันในแต่ละเลเยอร์และซ้อนตามลำดับที่ต้องการ ก็จะควบคุมสีและลำดับของเส้นขอบได้
-webkit-text-stroke-color: @pn(#f4e1e8, #cc0d55);
-webkit-text-stroke-width: @i(*3px);
การเรนเดอร์และข้อจำกัด
- Firefox ให้การเรนเดอร์ที่นุ่มนวลกว่า Chrome และ Safari
- หากใส่หลายตัวอักษรไว้ในบรรทัดเดียว รูปร่างของตัวอักษรจะถูกรวมเข้าด้วยกัน
@content: '秋收冬藏';
- เพื่อให้ทดลองฟอนต์หลากหลายแบบได้รวดเร็ว จึงเพิ่มฟังก์ชัน
@google-font เพื่อเร่งการโหลดฟอนต์
font-family: @google-font(Matemasie);
@content: 'b';
font-family: @google-font(Tangerine);
@content: 'Love';
font-family: @google-font('Cherry Bomb One');
@content: '+';
- ประสิทธิภาพไม่ได้ดีเท่าฟิลเตอร์ CSS และโดยเฉพาะเมื่อ
font-size ใหญ่ขึ้น อาจเห็นอาการกะพริบได้
- ตัวอย่างเพิ่มเติมถูกสร้างด้วย css-doodle และสามารถดู CodePen ของตัวอย่างแรกได้ที่ https://codepen.io/yuanchuan/pen/ogzarGo
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
บทความนี้ทำโดยผู้สร้าง css-doodle โดยใช้ css-doodle เอง เว็บคอมโพเนนต์นี้ช่วยให้ใส่ไวยากรณ์ CSS แบบดัดแปลงที่เขาใช้ในบล็อกลงใน HTML ได้โดยตรง
ตัวอย่างจะประมาณนี้:
@grid: 15 / 90%;border-radius: 50%;background: hsl(@t(/20), 70%, 60%);scale: sin(@atan2(@dx, @dy) + @ts);ไม่ต้องใช้ JavaScript นอกจากตอนโหลดนิยามของคอมโพเนนต์ และมันทำงานได้กับ HTML ปกติ, Markdown, เฟรมเวิร์ก ฯลฯ
https://css-doodle.com/
CSS ในหน้านี้หลายส่วนดูเหมือนรหัสลับสำหรับผม ขอชื่นชมผู้เขียนที่โพสต์อะไรใหม่ ๆ และเจ๋ง ๆ ในยุคที่สไตล์ส่วนใหญ่กลายเป็นมาตรฐานไปมากแล้ว
สงสัยว่าทำไม CSS rendering engine ของ Firefox ถึงชอบจัดการแบบนุ่มนวลกว่า แม้ว่าการทำงานจะดูต่างกันมาก แต่ก็อาจเป็นเพราะนี่คือกรณีขอบเขตของการเรนเดอร์เลยออกมาแบบนั้น
Firefox เลือกที่จะขยายโดยอิงระยะทางในทุกจุด ซึ่งเป็นคำตอบที่สมเหตุสมผลแบบหนึ่ง และน่าจะเป็นแนวทางที่ใช้กันทั่วไปที่สุด ดังนั้น cusp ที่แหลมจึงถูกขยายเป็นเส้นโค้ง
เบราว์เซอร์อื่นเลือกคง cusp ไว้ ซึ่งก็อาจสมเหตุสมผลเช่นกัน และน่าจะคำนวณได้ถูกกว่ามาก แต่ถ้าขยายเกินขนาดของรายละเอียดนั้นเอง คือเกินระยะระหว่าง node ก็จะเกิดกรณีเสื่อมสภาพจำนวนมาก ทำให้ราว ๆ วงแหวนสีแดงชั้นที่สี่มันดูผิดอย่างชัดเจน
box-shadow ก็เป็นอีกกรณีหนึ่งที่เกิดการขยาย โดยก็คือค่า spread distance ซึ่งเป็นค่าความยาวตัวที่สี่ ถ้ามุมเป็น cusp มุมของเงาก็จะเป็น cusp ด้วย ถ้ากลม มุมของเงาก็จะกลมตาม มีภาพประกอบที่เป็นประโยชน์อยู่ที่ https://drafts.csswg.org/css-backgrounds/#shadow-shape
มีทริกเล็กน้อยคือใส่
0.1px border-radiusแล้วกล่องจะยังดูเหมือนสี่เหลี่ยมอยู่ แต่เงาที่ถูกขยายจะกลายเป็นเส้นโค้ง ซึ่งบางครั้งก็มีประโยชน์ กลับมาที่บทความต้นฉบับ ถ้าใช้ฟอนต์ที่มีเส้นโค้งละเอียดมากแทน node แบบ cusp แล้ว Chromium/Safari ก็น่าจะออกมาใกล้ Firefox มากขึ้นตามสัญชาตญาณแล้วคาดว่าเส้นขอบของรูปดาวน่าจะค่อย ๆ เข้าใกล้รูปหกเหลี่ยมธรรมดา แต่ไม่มีเบราว์เซอร์ไหนทำออกมาแบบนั้น
มุมโค้งในเลเยอร์แรกน่าจะอยู่ห่างจากมุมที่ใกล้ที่สุดของตัวอักษรต้นฉบับเท่ากันทั้งหมด
ดีไซน์บล็อกนี้ดีมาก เรียบง่าย ชัดเจน และให้เนื้อหาเป็นหลัก
ซีรีส์ Daily Sketch หรือ
CSS Animation with offset-pathก็สนุกพอ ๆ กันอ่านบทความนี้แล้วเพิ่งรู้จัก https://css-doodle.com เป็นครั้งแรก
เมื่อไม่กี่เดือนก่อนผมกำลังทำอะไรคล้าย ๆ กันด้วย HTML Canvas API แต่ไม่รู้เลยว่า CSS ก็ทำงานเล็ก ๆ สนุก ๆ แบบนี้ได้เหมือนกัน ชอบมาก
ลองเปลี่ยน fiddle ให้เป็น โลโก้และสีของ Apple แล้วพบว่าวงแหวนแรกกินส่วนหนึ่งของแอปเปิลไป สงสัยว่ามีใครรู้ไหมว่าทำไมส่วนบนของแอปเปิลถึงถูกตัด
--c: #5EBD3E,#FFB900,#F78200,#E23838,#973999,#009CDF;@content: '';สงสัยว่าวิธีที่ดีที่สุดในการทำ ข้อความเส้นขอบคู่ โดยไม่ต้องใช้ตัวอักษร Unicode แปลก ๆ แต่ยังคงการแสดงผลตามที่ฟอนต์แนะนำไว้คืออะไร
ตอนนี้ใน my blog ผมใช้ตัวอักษรเท่ ๆ อยู่ แต่มันไม่ดีกับผลการค้นหา กำลังย้ายบล็อกจาก HTML ที่เขียนมือไปเป็น 11ty เลยอยากปรับปรุงบล็อกไปพร้อมกันด้วย
อีกอย่างก็อยากได้ความเห็นเกี่ยวกับดีไซน์บล็อกปัจจุบันด้วย
เจ๋งดี แค่เสียดายที่ ความต่างในการเรนเดอร์ ระหว่างเบราว์เซอร์เยอะเกินไป
สงสัยว่าเคยลองทำแบบเดียวกันด้วยเงาหรือยัง เพราะเงาก็น่าจะซ้อนได้เหมือนกัน
สิ่งแรกที่ผมนึกถึงคือใส่ อีโมจิ ลงใน content แต่กลับได้แค่สี่เหลี่ยมแทนอักขระที่ไม่รู้จัก คงคาดหวังอะไรที่เหมือนเวทมนตร์เกินไปหน่อย