ข้อดี - ข้อเสีย กับ 5 วิธีจัดการ Styling (CSS) ใน React App
Table of contents
Intro
สวัสดีครับวันนี้จะมาเล่าวิธีจัดการกับ Styling (CSS) และข้อดี - ข้อเสีย ใน React App โดยปัญหาของคนเขียน React ในช่วงเริ่มต้น ไม่ว่าคุณจะหัด หรือฝึกมาจาก Tutorial ที่ไหนก็ตาม (ผู้เขียนก็เคยเป็น) จะพบว่ามันมีหลายวิธีมาก
แต่ก่อนอื่นต้องเข้าใจก่อนว่า ที่เขาพาทำส่วนใหญ่เป็นแบบง่าย (simple) เพื่อ ให้ผู้เรียน หรือผู้ที่ทำตามเห็นภาพและเข้าใจได้เร็ว แต่ด้วยความที่วิธีการจัดการกับ Styling ของ React นั้นมีหลายวิธีพอสมควร และวิธีไหนดีที่สุดบทความนี้จะอธิบายให้ฟัง 😊
Inline style
เริ่มจากท่าเบสิคสุด ใคร ๆ ที่เขียน React ล้วนต้องเคยทำคือการเขียน Objects ของ CSS Style ด้วย JS แล้วนำไปแทรกตาม Element ของ HTML ที่ต้องการเรียกกว่า Inline style
ตัวอย่าง
ข้อดี
- ง่าย เพราะเขียนแทรกลงใน JS ได้เลย
- เห็นผลลัพธ์เร็ว
ข้อเสีย
- Reuse และ Maintain ยากเมื่อโปรเจคใหญ่ขึ้น
- รก และทำให้ขนาดไฟล์ JSX ใหญ่ขึ้นเวลา Build แล้วก็จะได้ไฟล์ขนาดใหญ่
() => { const divStyle = { backgroundColor: 'gray', borderRadius: '0.5rem', padding: 15, display: 'flex', justifyContent: 'center' } return ( <div style={divStyle}> <span style={ { fontSize: 20, color: 'white', fontWeight: 'bolder' } }>Hello World!</span> </div> ) }
CSS Class Files
คือการเขียน CSS Class ที่แยกออกมาเป็น 1 ไฟล์จากนั้นก็ใช้วิธี Import เข้า JSX เพื่อใช้งาน
ข้อดี
- Reuse และ Maintain style ได้ง่ายกว่าวิธีแรก
- เวลา Build แยกออกมาเป็นไฟล์ CSS กับ JSX
ข้อเสีย
- Reuse และ Maintain ยากกว่าวิธีของ SCSS & LESS
- ขาดการกำหนด Property (Mixins), Nested Rules, Functions & Operations แบบของ SCSS & LESS ที่ยืดหยุ่นกว่า
.div-style {
background-color: gray;
border-radius: 0.5rem;
padding: 15px;
display: flex;
justify-content: center;
}
.text-style {
font-size: 20px;
color: white;
font-weight: bolder;
}
import './styles/App.css'
() => {
return (
<div className="div-style">
<span className="text-style">Hello World!</span>
</div>
)
}
SCSS & LESS
SCSS & LESS เป็น CSS Pre-processor ที่มีความสามารถยืดหยุ่นโดยความสามารถหลัก ๆ คือ
- Variables
- การกำหนด Property (Mixins)
- Nested Rules
- Functions & Operations
ข้อดี
- ได้ข้อดีทั้งหมดแบบเดียวกับ CSS
- มีความสามารถยืดหยุ่นกับงานที่ซับซ้อน
ข้อเสีย
- ต้องติดตั้งหรือกำหนดค่าที่ใช้ในการ Build ของ CSS Pre-processor
- ทำงานได้ช้ากว่า CSS นิดนึงเพราะต้อง Build ก่อน
- ต้องสร้างไฟล์ที่เป็น Pre-processor (.less, .scss, .sass)
styled-components & emotion
styled-components และ emotion คือ Library โดยทั้งสองใช้กับ React แต่ emotion สามารถใช้กับอย่างอื่น ๆ ที่ไม่ใช่ React ได้ด้วย
ข้อดี
- ได้ข้อดีทั้งหมดแบบเดียวกับแบบ CSS Pre-processor
- มีความสามารถยืดหยุ่นกับงานที่ซับซ้อน ทำเป็น CSS Module ได้ง่าย
- ไม่จำเป็นต้องสร้างไฟล์แบบ Pre-processor
ข้อเสีย
- ต้องติดตั้ง Library เพิ่ม
- ต้องศึกษาวิธีเขียนแบบ Best Practices ไม่งั้นก็จะทำงานช้าและอาจจะทำให้ได้ไฟล์ขนาดใหญ่ที่ไม่จำเป็น ตัวอย่าง https://emotion.sh/docs/best-practices
Tailwind
Tailwind CSS คือ Utility-First CSS Framework เป็น CSS Selector แบบสำเร็จที่เรามานำ Class เล็ก ๆ มาประกอบกันขึ้นอยู่กับวัตถุประสงค์การใช้งานสามารถนำไป Implement ได้หลายแบบเช่น