เปิดซอร์สความคืบหน้าของ Tailwind CSS v4.0
(tailwindcss.com)- กำลังพัฒนา Oxide เอนจินประสิทธิภาพสูงตัวใหม่สำหรับ Tailwind CSS v4.0
- ออกแบบมาเพื่อทำให้ประสบการณ์นักพัฒนาง่ายขึ้น และใช้ประโยชน์จากวิวัฒนาการล่าสุดของเว็บแพลตฟอร์ม
- เดิมทีวางแผนจะออกเป็นรุ่น v3.x แต่ตัดสินใจปล่อยเป็น v4.0 ในฐานะเฟรมเวิร์กรุ่นใหม่
- ยังอยู่ในช่วงเริ่มต้นและยังมีงานอีกมาก แต่ได้แท็กอัลฟาสาธารณะรุ่นแรกไว้เพื่อให้เริ่มทดลองได้
เอนจินใหม่ สร้างมาเพื่อความเร็ว
- เอนจินใหม่ถูกเขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้น เพื่อให้เร็วขึ้นด้วยโค้ดที่น้อยลง
- ให้ความเร็วในการบิลด์สูงสุดมากขึ้นถึง 10 เท่า โดยเว็บไซต์ Tailwind CSS บิลด์ได้ใน 105ms และชุด UI Catalyst บิลด์ได้ใน 55ms
- เอนจินใหม่มีขนาดติดตั้งเล็กลงมากกว่า 35% แม้จะรวมแพ็กเกจเนทีฟขนาดใหญ่อย่าง Rust และ Lightning CSS
- ใช้ Rust จัดการส่วนที่มีต้นทุนสูงที่สุดของเฟรมเวิร์ก และคงแกนหลักไว้ใน TypeScript เพื่อความสามารถในการขยายต่อ
- เอนจินใหม่พึ่งพาเพียง Lightning CSS เท่านั้น
- มีการเขียน CSS parser ขึ้นเอง และออกแบบโครงสร้างข้อมูลที่พาร์สได้เร็วกว่า PostCSS 2 เท่า
ทูลเชนแบบรวมศูนย์
- Tailwind CSS v4 ไม่ใช่ปลั๊กอินอีกต่อไป แต่เป็นเครื่องมือแบบ all-in-one สำหรับจัดการ CSS
- มี
@import, vendor prefixing และการรองรับ nested syntax ในตัว จึงไม่ต้องตั้งค่าแยก - แปลงฟีเจอร์ CSS สมัยใหม่อย่าง
oklch()และ media query range ให้เป็น syntax ที่รองรับเบราว์เซอร์ได้ดียิ่งขึ้น - ยังคงมี PostCSS plugin ให้ใช้งาน แต่กำลังสำรวจปลั๊กอินสำหรับ bundler และจะมี Vite plugin อย่างเป็นทางการพร้อมอัลฟารุ่นแรก
ออกแบบเพื่อเว็บยุคใหม่
- Tailwind CSS v4 ต้องการสร้างเฟรมเวิร์กที่ยังคงให้ความรู้สึกล้ำสมัยไปอีกหลายปีข้างหน้า
- ใช้กฎ
@layerจริงเพื่อแก้ปัญหา specificity ที่เคยเป็นปัญหาในอดีต - ใช้
@propertyเพื่อกำหนด custom property ภายในอย่างชัดเจน และเปิดทางให้เอฟเฟ็กต์อย่าง background gradient - ใช้
color-mixเพื่อให้แก้ไข opacity ของตัวแปรสี หรือปรับ opacity ของcurrentColorได้ง่ายขึ้น - รองรับ container queries โดยตรงในแกนหลัก และรองรับช่วงของ container query ผ่าน variants ใหม่
@min-*และ@max-*
Variants ที่ประกอบร่วมกันได้
- สถาปัตยกรรมใหม่ทำให้สามารถประกอบ variants ที่ทำงานกับ selector คนละตัวเข้าด้วยกันได้
- ในเวอร์ชันก่อนหน้า variants อย่าง
group-has-*ต้องถูกกำหนดไว้อย่างชัดเจนในเฟรมเวิร์ก แต่ตอนนี้group-*สามารถนำมาประกอบร่วมกับ varianthas-*ที่มีอยู่แล้วได้
การตรวจจับคอนเทนต์แบบไม่ต้องตั้งค่า
- ในอัลฟารุ่นแรกยังไม่สามารถตั้งค่าเส้นทาง
contentได้ และสำหรับโปรเจ็กต์ส่วนใหญ่ก็ไม่น่าจำเป็นต้องกำหนดใหม่อีก - หากใช้ PostCSS plugin หรือ CLI, Tailwind จะไล่สำรวจทั้งโปรเจ็กต์เพื่อค้นหาไฟล์เทมเพลต
- หากใช้ Vite plugin ก็จะอาศัย module graph เพื่อรู้ได้อย่างแม่นยำว่าไฟล์ใดถูกใช้งานจริง
การตั้งค่าแบบ CSS-first
- เป้าหมายสำคัญของ Tailwind CSS v4.0 คือทำให้เฟรมเวิร์กรู้สึกเหมือนเป็น native ของ CSS มากขึ้น และไม่เหมือน JavaScript library
- หลังติดตั้งแล้ว สามารถเพิ่มเข้าโปรเจ็กต์ได้ด้วยคำสั่ง
@importของ CSS ปกติ - แทนที่จะตั้งค่าการปรับแต่งทั้งหมดในไฟล์คอนฟิก JavaScript จะหันมาใช้ CSS variables
สิ่งที่เปลี่ยนไป
- แม้จะไม่ได้มองข้าม breaking changes แต่ใน v4 มีบางอย่างที่จัดการแตกต่างไป
- ลบ utility ที่ไม่ได้มีการบันทึกไว้ในเอกสารแล้ว
- PostCSS plugin และ CLI ถูกแยกออกเป็นแพ็กเกจต่างหาก
- เอาสีเส้นขอบเริ่มต้นออก
- โดยค่าเริ่มต้น utility
ringจะกลายเป็นวงแหวน 1px ที่ใช้currentColor
โรดแมปสู่ v4.0
- เอนจินใหม่ถูกเขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้น และมุ่งเน้นเต็มที่ไปที่ประสบการณ์นักพัฒนาด้วยแนวทางการตั้งค่าแบบใหม่
- ให้ความสำคัญอย่างมากกับ backward compatibility และนี่คือหนึ่งในงานหลักเพื่อให้ไปถึงรุ่นเสถียร v4.0
- รวมถึงการรองรับไฟล์คอนฟิก JavaScript, การตั้งค่าเส้นทาง content แบบ explicit, การรองรับ dark mode แบบอื่น, การรองรับปลั๊กอินและ custom utility, การตั้งค่า class prefix, การรองรับ safelists และ blocklists, การรองรับการตั้งค่า
important, การรองรับฟังก์ชันtheme(), การรองรับ standalone CLI เป็นต้น
ลองใช้อัลฟาเวอร์ชัน
- มีการแท็กอัลฟาหลายรุ่นไว้แล้ว และสามารถเริ่มทดลองในโปรเจ็กต์ได้ตั้งแต่วันนี้
- หากใช้ส่วนขยาย Tailwind CSS IntelliSense จะต้องสลับไปใช้รุ่น pre-release จากหน้า VS Code extension
- หากพบปัญหา อยากให้แจ้งผ่าน GitHub
การใช้ Vite
- ติดตั้ง Tailwind CSS v4 alpha และ Vite plugin ตัวใหม่
- เพิ่มปลั๊กอินลงในไฟล์
vite.config.ts - import Tailwind ในไฟล์ CSS หลัก
การใช้ PostCSS
- ติดตั้ง Tailwind CSS v4 alpha และแพ็กเกจ PostCSS plugin ที่แยกออกมาต่างหาก
- เพิ่มปลั๊กอินลงในไฟล์
postcss.config.js - import Tailwind ในไฟล์ CSS หลัก
การใช้ CLI
- ติดตั้ง Tailwind CSS v4 alpha และแพ็กเกจ CLI ที่แยกออกมาต่างหาก
- import Tailwind ในไฟล์ CSS หลัก
- ใช้เครื่องมือ CLI เพื่อคอมไพล์ CSS
ความเห็นของ GN⁺
- การเปิดซอร์สของ Tailwind CSS v4.0 เปิดโอกาสให้นักพัฒนาได้ลองใช้ฟีเจอร์และการปรับปรุงใหม่ล่วงหน้า นั่นหมายถึงนักพัฒนาสามารถส่ง feedback ต่อเฟรมเวิร์ก และมีส่วนช่วยให้รุ่นสุดท้ายมีความเสถียรมากขึ้น
- การเพิ่มประสิทธิภาพของเอนจินใหม่ดูเหมือนจะช่วยลดเวลาบิลด์ได้อย่างมาก ซึ่งน่าจะเป็นประโยชน์โดยเฉพาะกับโปรเจ็กต์ขนาดใหญ่หรือสภาพแวดล้อมที่วงจรการพัฒนารวดเร็วเป็นเรื่องสำคัญ
- การผสานกันของ Rust และ TypeScript สะท้อนแนวทางสมัยใหม่ที่ต้องการทั้งประสิทธิภาพและความสามารถในการขยายต่อ โดยส่วนที่เขียนด้วย Rust จะช่วยดันประสิทธิภาพให้สูงสุด ขณะที่ TypeScript ทำให้นักพัฒนาขยายและดูแลรักษาได้ง่าย
- แนวทางการตั้งค่าใหม่ด้วย CSS variables มีความเป็นมิตรกับ CSS มากกว่าการตั้งค่าแบบ JavaScript เดิม และอาจช่วยให้การผสานกับดีไซน์ซิสเต็มทำได้ง่ายขึ้น
- การเปลี่ยนแปลงเหล่านี้อาจทำให้ผู้ใช้เดิมต้องมีงาน migration อยู่บ้าง แต่ในระยะยาวคาดว่าจะนำไปสู่โค้ดเบสที่กระชับและดูแลรักษาง่ายขึ้น
2 ความคิดเห็น
ความคิดเห็นบน Hacker News
Tailwind CSS เป็นสิ่งที่ดีที่สุดอันดับสองในฝั่งฟรอนต์เอนด์ โดยมีเพียง Vue 3 เท่านั้นที่เหนือกว่า
ในฐานะคนที่วิจารณ์ Tailwind อย่างหนัก การประกาศทั้งหมดภายใต้แนวทางการตั้งค่าแบบ CSS-first นั้นน่ายินดีอย่างมาก
CTRL+u แสดงให้เห็นตัวอย่างที่ดีของไวยากรณ์
ยังไม่ได้ทำงานกับ standalone CLI แต่จะต้องทำให้เสร็จก่อนออก v4.0 อย่างแน่นอน
มีการปรับปรุงที่มีอนาคตไกลหลายอย่าง
หวังว่า Tailwind จะรองรับ attributify แบบเดียวกับ unocss
ไม่ใช่นักพัฒนาฟรอนต์เอนด์ แต่ดูแลเว็บไซต์อยู่หลายแห่งและทั้งหมดใช้ Tailwind
สงสัยว่ามีบทสอน/คู่มือที่ดีสำหรับ Tailwind หรือไม่
สงสัยว่ามีใครใช้ tailwindcss ร่วมกับ htmx หรือแนวทาง hateoas แบบอื่นบ้างไหม
อยากใช้ในโปรเจ็กต์เดโม แต่
import from "node:@tailwindcss/postcss@latest"ทำให้เกิดข้อผิดพลาดเกี่ยวกับฟิลด์exportsใน package.jsonpostcss-importแต่ก็ยังคงใส่มันไว้เป็น dependency