No description
Find a file
2025-03-04 15:53:46 +07:00
.github chore: update bundle and test actions 2025-01-23 17:47:43 +01:00
.storybook feat: add sample components & stories 2023-04-21 11:20:31 +02:00
.vscode chore: setup tailwind 2023-04-16 18:17:54 +02:00
app sent-test-work 2025-03-04 15:53:46 +07:00
components chore: update tailwindcss to v4 2025-01-23 17:47:43 +01:00
e2e chore: adjust LP copy 2023-04-21 18:00:29 +02:00
public/assets sent-test-work 2025-03-04 15:53:46 +07:00
styles chore: update tailwindcss to v4 2025-01-23 17:47:43 +01:00
.all-contributorsrc docs: update .all-contributorsrc 2024-01-18 21:46:58 +00:00
.gitignore chore: bump storybook dependencies and fix smoke tests 2025-01-23 17:47:43 +01:00
.pre-commit-config.yaml chore: setup conventional commits hook 2023-04-03 19:03:24 +02:00
.prettierignore chore: setup CI/CD pipelines: check, playwright, bundle analyzer 2023-04-21 12:02:52 +02:00
.releaserc chore: semantic release setup 2023-05-17 17:31:27 +02:00
env.mjs feat: add env validation 2023-05-03 19:16:12 +02:00
eslint.config.mjs chore: update tailwindcss to v4 2025-01-23 17:47:43 +01:00
git-conventional-commits.yaml chore: setup conventional commits hook 2023-04-03 19:03:24 +02:00
graph.svg chore: setup coupling graph generation 2023-04-21 12:57:01 +02:00
instrumentation.ts chore: setup open telemetry 2023-04-21 12:11:00 +02:00
jest.config.js chore: format 2023-10-17 00:59:54 +02:00
jest.setup.js chore: format 2023-10-17 00:59:54 +02:00
LICENSE Create LICENSE 2023-05-18 19:46:01 +02:00
lp-items.tsx feat: add basic LP 2023-04-21 17:52:49 +02:00
next-env.d.ts chore: upgrade eslint to v9 and flat config 2025-01-23 17:47:43 +01:00
next.config.ts sent-test-work 2025-03-04 15:53:46 +07:00
package.json chore: bump storybook dependencies and fix smoke tests 2025-01-23 17:47:43 +01:00
playwright.config.ts chore: update bundle and test actions 2025-01-23 17:47:43 +01:00
pnpm-lock.yaml chore: bump storybook dependencies and fix smoke tests 2025-01-23 17:47:43 +01:00
postcss.config.js chore: update tailwindcss to v4 2025-01-23 17:47:43 +01:00
prettier.config.js chore: bump all deps 2023-10-17 00:38:06 +02:00
README.md sent-test-work 2025-03-04 15:53:46 +07:00
renovate.json chore: bump all deps 2023-10-17 00:38:06 +02:00
report-bundle-size.js feat: make bundle analysis work with app dir 2023-11-25 23:35:22 +01:00
reset.d.ts chore: integrate typed-query-selector for better types 2025-01-23 17:47:43 +01:00
tailwind.config.js chore: update tailwindcss to v4 2025-01-23 17:47:43 +01:00
tsconfig.json chore: upgrade eslint to v9 and flat config 2025-01-23 17:47:43 +01:00

  1. โครงสร้างไฟล์หลักและการจัดเก็บรูปภาพ 1.1โฟลเดอร์ app/: เป็นโครงสร้างพื้นฐานของ Next.js 15 มีไฟล์หลักเช่น layout.tsx, page.tsx, และโฟลเดอร์ย่อยต่าง ๆ 1.2โฟลเดอร์ app/assets/: เก็บไฟล์รูปภาพทั้งหมด เช่น image.png, image2.png, image3.png, ฯลฯ แนะนำให้ย้ายไปไว้ใน /public/assets/ เพื่อให้ Next.js สามารถเรียกใช้งานได้สะดวก (ถ้าเป็นการแสดงรูป Static) 1.3โฟลเดอร์ components/: เก็บคอมโพเนนต์ย่อย ๆ ของโปรเจกต์ เช่น Navbar.tsx, HeroSection.tsx, หรืออื่น ๆ ในตัวอย่าง เรารวมโค้ดทั้งหมดไว้ในคอมโพเนนต์เดียว (เช่น page.tsx) แต่ในงานจริงอาจแยกแต่ละ Section ออกเป็นไฟล์คอมโพเนนต์ต่างหากเพื่อให้ง่ายต่อการดูแล

  2. ขั้นตอนการติดตั้งและรันโปรเจกต์ 2.1ติดตั้ง Dependencies ใช้คำสั่ง npm install หรือ yarn เพื่อให้ได้ package ของ Next.js, React, และ Tailwind CSS 2.2ตั้งค่า Tailwind CSS เปิดไฟล์ tailwind.config.js (หรือ .ts) แล้วกำหนด content ให้ครอบคลุมทุกไฟล์ที่มีการใช้งาน Tailwind เช่น content: [ "./app//*.{js,ts,jsx,tsx}", "./components//*.{js,ts,jsx,tsx}", ... ] 2.3รันโปรเจกต์ ใช้คำสั่ง npm run dev หรือ yarn dev เปิดเบราว์เซอร์ที่ http://localhost:3000 เพื่อดูหน้าเว็บ

  3. สรุปการทำงานของแต่ละส่วน โค้ดหลักแบ่งออกเป็นหลาย Section ตามโครงสร้างเว็บ ดังนี้:

3.1Top Announcement Bar แถบสีเขียวเข้มด้านบน (เช่น #0e3a24) มีข้อความประกาศ เช่น "SupportNinja is hiring! …" พร้อมลิงก์สมัครงาน

3.2Navbar (Sticky) + Dropdown & Hamburger ติดด้านบน (sticky top-0) มีโลโก้ซ้ายมือ, เมนูขวามือ (Desktop), ปุ่ม Get Started Dropdown Menu: เมื่อ Hover เมนูอย่าง Solutions, Industries, About จะมีเมนูย่อยแสดงขึ้นมา (ใช้ useState แยกแต่ละเมนู) Hamburger Menu (Mobile): เมื่อจอเล็ก (< md) จะแทนที่เมนูด้วยปุ่ม Hamburger (เปิด/ปิดเมนูด้วย isMobileMenuOpen) ภายในเมนู Mobile มีปุ่ม Get Started อีกอันด้านล่าง

3.3Hero Section พื้นหลังสีครีม (เช่น #f7e1d2) ข้อความสั้น ๆ และหัวข้อใหญ่ เช่น "Outsourcing worth talking about" มีเส้น


คั่น

3.4Outsourcing Options Section (Checkbox Grid) ยังใช้พื้นหลังสีครีม (#f7e1d2) หัวข้อ "Which outsourcing solutions are you looking for?" มี Grid 6 ช่อง แต่ละช่องมีรูป (เช่น image2.png), ชื่อบริการ, และ Checkbox ที่มุมขวาบน เมื่อคลิกช่องใด จะสลับสถานะ Checkbox และเปลี่ยนพื้นหลังของช่อง (ใช้ useState ชื่อ selected) ด้านล่างมีปุ่ม Get Started สีแดง

3.5Section เพิ่มเติม (1 → 6) แต่ละ Section มีดีไซน์แตกต่างกัน เช่น พื้นหลังสีต่าง ๆ, รูปซ้าย-ข้อความขวา หรือข้อความซ้าย-รูปขวา Section 1: ใส่ Container สีเทา (#bfc1b9) ข้างใน พร้อมรูป midjourney.png Section 2, 3, 4, 5: จัดเป็น 2 คอลัมน์ หรือ Grid 3 คอลัมน์ (เช่นบริการต่าง ๆ) Section 6: "We’re better together. Start building your dream team." พร้อมรูป image8.png ทางขวา, ปุ่ม Get Started สีแดง

3.6Footer พื้นหลังสีเทาอ่อน (#bfc1b9) มีโลโก้, คอลัมน์เมนูต่าง ๆ (Solutions, Industries, Resources, Follow, Company) ปุ่ม Get started สีแดงอยู่ด้านขวา ด้านล่างมีข้อความลิขสิทธิ์และลิงก์ (Privacy Policy, Security Policy, Terms of Use) ออกแบบให้ Responsive เมื่อจอเล็กจะเรียงกันเป็นคอลัมน์

  1. การใช้ State และฟังก์ชันต่าง ๆ 4.1State สำหรับ Dropdown isSolutionsOpen, isIndustriesOpen, isAboutOpen: ควบคุมการเปิด/ปิดเมนูย่อยใน Desktop ทำงานด้วยการ onMouseEnter → setState(true), onMouseLeave → setState(false) State สำหรับ Mobile Menu

4.2isMobileMenuOpen: เมื่อคลิกปุ่ม Hamburger จะสลับ true/false ถ้า true จะแสดงเมนูในรูปแบบลิสต์ลงมา

4.3State สำหรับ Checkbox Grid selected: string[]: เก็บ ID ของ Option ที่ถูกเลือก ฟังก์ชัน toggleSelection(id: string): เช็คว่า ID นั้นอยู่ใน selected ไหม → ถ้ามีก็ถอดออก, ถ้าไม่มีให้เพิ่มเข้า

4.4โครงสร้างเมนู ใน Desktop, เมนูหลักจะซ่อนบนจอเล็ก (ใช้ md:flex / hidden) ใน Mobile, เมนูหลักจะแสดงเมื่อ isMobileMenuOpen === true

  1. เคล็ดลับการปรับแต่ง 5.1เปลี่ยนสี / ข้อความ: ใน Class Tailwind เช่น bg-[#0e3a24], text-[#f7e1d2], สามารถเปลี่ยนเป็นโทนสีอื่น ๆ ได้ ข้อความต่าง ๆ เช่น H1, H2, หรือ Paragraph แก้ได้ตามต้องการ

5.2เปลี่ยนรูปภาพ: ตรวจสอบว่ารูปอยู่ใน /public/assets/ แล้วเรียกใช้ด้วยเส้นทาง /assets/xxxx.png ขนาดรูป (width, height) สามารถปรับตามดีไซน์

5.3Responsive เพิ่มเติม: Tailwind มี breakpoint sm:, md:, lg:, xl: ถ้าต้องการจัด layout หรือขนาดตัวอักษรเฉพาะจอใหญ่/เล็ก

5.4แยกเป็นคอมโพเนนต์: ถ้าไฟล์ Navbar.tsx ใหญ่มาก สามารถแยกแต่ละ Section ไปเป็นไฟล์คอมโพเนนต์ย่อย แล้ว import มาใช้เพื่อความเป็นระเบียบ

5.5Production Build: เมื่อพร้อม Deploy, ให้ใช้คำสั่ง npm run build หรือ yarn build จากนั้น npm run start หรือ yarn start เพื่อรัน Production Mode

  1. วิธีนำไปใช้งานจริง 6.1คัดลอกโค้ด นี้ไปใส่ในไฟล์คอมโพเนนต์ เช่น page.tsx (หรือชื่อไฟล์ที่ต้องการ) 6.2รัน npm run dev 6.3เปิด http://localhost:3000 ดูว่า Navbar, Hero, Sections และ Footer แสดงผลครบถ้วนหรือไม่

  2. สรุป 1.โค้ดนี้เป็นตัวอย่างหน้าเว็บ Next.js 15 + Tailwind CSS ที่มีฟีเจอร์หลัก: -Navbar Sticky พร้อม Dropdown (Desktop) และ Hamburger (Mobile) -Hero Section สีครีม -Grid Checkbox เลือกบริการต่าง ๆ -Sections หลายส่วน (ใส่รูป + ข้อความ) -Footer ที่แบ่งคอลัมน์ลิงก์ และมีปุ่ม Get Started สีแดง

###ขอบคุณครับ :)