การสร้าง Progress Bars ด้วย Tailwind CSS
Progress bars เป็นส่วนประกอบ UI ที่สำคัญสำหรับการแสดงสถานะความคืบหน้าของงานต่างๆ เช่น การอัปโหลดไฟล์ การดาวน์โหลดข้อมูล หรือการประมวลผลข้อมูล Progress bars ที่ดีควรจะให้ข้อมูลที่เป็นประโยชน์แก่ผู้ใช้และสร้างความรู้สึกว่าระบบกำลังทำงานอยู่ ในบทความนี้ เราจะมาเรียนรู้วิธีการสร้าง Progress bars ที่สวยงามและใช้งานได้จริงด้วย Tailwind CSS โดยจะเน้นการใช้ JavaScript และ CSS animations เพื่อสร้าง progress bars ที่มีชีวิตชีวา
โครงสร้าง HTML พื้นฐาน
เริ่มต้นด้วยการสร้างโครงสร้าง HTML พื้นฐานสำหรับ Progress bar ของเรา โดยเราจะใช้ <div> สองตัว ตัวแรกเป็น container สำหรับ Progress bar ทั้งหมด และตัวที่สองเป็น bar จริงๆ ที่จะแสดงความคืบหน้า
<div class="bg-gray-200 rounded-full h-2.5 dark:bg-gray-700">
<div class="bg-blue-600 h-2.5 rounded-full" style="width: 45%"></div>
</div>
ในโค้ดด้านบน:
bg-gray-200: กำหนดสีพื้นหลังของ container เป็นสีเทาอ่อนrounded-full: ทำให้ขอบของ container โค้งมนh-2.5: กำหนดความสูงของ containerdark:bg-gray-700: กำหนดสีพื้นหลังของ container เป็นสีเทาเข้มเมื่ออยู่ใน dark modebg-blue-600: กำหนดสีพื้นหลังของ bar เป็นสีน้ำเงินh-2.5: กำหนดความสูงของ bar ให้เท่ากับ containerrounded-full: ทำให้ขอบของ bar โค้งมนstyle="width: 45%": กำหนดความกว้างของ bar เป็น 45% ซึ่งแสดงถึงความคืบหน้า
การเพิ่ม Label แสดงเปอร์เซ็นต์
เพื่อให้ Progress bar มีประโยชน์มากยิ่งขึ้น เราจะเพิ่ม label เพื่อแสดงเปอร์เซ็นต์ความคืบหน้า
<div class="flex items-center justify-between mb-2">
<span class="text-sm font-medium text-blue-700 dark:text-white">Progress</span>
<span class="text-sm font-medium text-blue-700 dark:text-white">45%</span>
</div>
<div class="bg-gray-200 rounded-full h-2.5 dark:bg-gray-700">
<div class="bg-blue-600 h-2.5 rounded-full" style="width: 45%"></div>
</div>
ในโค้ดด้านบน:
flex items-center justify-between: จัดเรียง label และเปอร์เซ็นต์ให้อยู่ในบรรทัดเดียวกัน โดยให้ชิดซ้ายและขวาtext-sm font-medium text-blue-700 dark:text-white: กำหนดรูปแบบของข้อความ (ขนาดเล็ก, ตัวหนา, สีน้ำเงิน)mb-2: เพิ่ม margin ด้านล่างเพื่อให้มีช่องว่างระหว่าง label และ Progress bar
การใช้งาน JavaScript เพื่ออัปเดต Progress Bar
เพื่อให้ Progress bar สามารถแสดงความคืบหน้าแบบไดนามิก เราจะต้องใช้ JavaScript ในการอัปเดตความกว้างของ bar และเปอร์เซ็นต์ที่แสดง
<div class="flex items-center justify-between mb-2">
<span class="text-sm font-medium text-blue-700 dark:text-white">Progress</span>
<span id="progress-percentage" class="text-sm font-medium text-blue-700 dark:text-white">0%</span>
</div>
<div class="bg-gray-200 rounded-full h-2.5 dark:bg-gray-700">
<div id="progress-bar" class="bg-blue-600 h-2.5 rounded-full" style="width: 0%"></div>
</div>
<script>
const progressBar = document.getElementById('progress-bar');
const progressPercentage = document.getElementById('progress-percentage');
function updateProgress(percentage) {
progressBar.style.width = `${percentage}%`;
progressPercentage.textContent = `${percentage}%`;
}
// ตัวอย่างการใช้งาน: อัปเดตความคืบหน้าทุกๆ 1 วินาที
let currentProgress = 0;
const interval = setInterval(() => {
currentProgress += 10;
if (currentProgress >= 100) {
currentProgress = 100;
clearInterval(interval); // หยุดเมื่อถึง 100%
}
updateProgress(currentProgress);
}, 1000);
</script>
ในโค้ดด้านบน:
- เราเพิ่ม
idให้กับ bar (progress-bar) และ label (progress-percentage) เพื่อให้สามารถเข้าถึงได้จาก JavaScript - ฟังก์ชัน
updateProgress(percentage)จะอัปเดตความกว้างของ bar และเปอร์เซ็นต์ที่แสดงตามค่าpercentageที่ได้รับ - เราใช้
setIntervalเพื่อจำลองการอัปเดตความคืบหน้าทุกๆ 1 วินาที - เมื่อความคืบหน้าถึง 100% เราจะหยุดการอัปเดตโดยใช้
clearInterval
การเพิ่ม CSS Animation
เพื่อทำให้ Progress bar ดูน่าสนใจยิ่งขึ้น เราสามารถเพิ่ม CSS animation เพื่อสร้างความรู้สึกเคลื่อนไหว
#progress-bar {
transition: width 0.5s ease-in-out;
}
เพิ่ม CSS ด้านบนลงในไฟล์ CSS ของคุณ (หรือภายใน <style> tag ใน HTML) transition property จะทำให้การเปลี่ยนแปลงความกว้างของ bar เป็นไปอย่างราบรื่น
การปรับแต่ง Styles
Tailwind CSS มี utility classes มากมายให้เราเลือกใช้ในการปรับแต่ง styles ของ Progress bar ให้เข้ากับ design ของเว็บไซต์ของเรา
ตัวอย่าง:
- เปลี่ยนสี: ใช้
bg-red-500,bg-green-500,bg-yellow-500เพื่อเปลี่ยนสีของ bar - เปลี่ยนความสูง: ใช้
h-4,h-6,h-8เพื่อเปลี่ยนความสูงของ bar - เพิ่มเงา: ใช้
shadow-md,shadow-lgเพื่อเพิ่มเงาให้กับ container - ปรับแต่งขอบ: ใช้
rounded-sm,rounded-md,rounded-lgเพื่อปรับแต่งความโค้งมนของขอบ
<div class="flex items-center justify-between mb-2">
<span class="text-sm font-medium text-green-700 dark:text-white">Progress</span>
<span id="progress-percentage" class="text-sm font-medium text-green-700 dark:text-white">0%</span>
</div>
<div class="bg-gray-200 rounded-md h-4 shadow-md dark:bg-gray-700">
<div id="progress-bar" class="bg-green-500 h-4 rounded-md" style="width: 0%"></div>
</div>
กรณีใช้งานจริง
Progress bars สามารถนำไปใช้ในหลายสถานการณ์ ตัวอย่างเช่น:
- การอัปโหลดไฟล์: แสดงความคืบหน้าของการอัปโหลดไฟล์
- การดาวน์โหลดไฟล์: แสดงความคืบหน้าของการดาวน์โหลดไฟล์
- การประมวลผลข้อมูล: แสดงความคืบหน้าของการประมวลผลข้อมูล
- การโหลดหน้าเว็บ: แสดงความคืบหน้าของการโหลดหน้าเว็บ
- แบบทดสอบออนไลน์: แสดงความคืบหน้าในการทำแบบทดสอบ
ข้อผิดพลาดที่พบบ่อย
- ลืมใส่
idให้กับ bar หรือ label ทำให้ JavaScript ไม่สามารถเข้าถึงได้ - ไม่ได้กำหนด
transitionทำให้ animation ไม่ราบรื่น - ไม่ได้หยุด
setIntervalเมื่อความคืบหน้าถึง 100% ทำให้เกิด error - ไม่ได้ปรับแต่ง styles ให้เข้ากับ design ของเว็บไซต์
สรุป
ในบทความนี้ เราได้เรียนรู้วิธีการสร้าง Progress bars ที่สวยงามและใช้งานได้จริงด้วย Tailwind CSS โดยใช้ JavaScript และ CSS animations เพื่อสร้างความรู้สึกเคลื่อนไหว Progress bars เป็นส่วนประกอบ UI ที่สำคัญสำหรับการแสดงสถานะความคืบหน้าของงานต่างๆ และสามารถนำไปใช้ในหลายสถานการณ์ หวังว่าบทความนี้จะเป็นประโยชน์และช่วยให้คุณสร้าง Progress bars ที่ดีขึ้นได้