ฟังก์ชัน `if` ใน SASS
บทความนี้อธิบายฟังก์ชัน if ใน SASS
เราจะพาคุณไล่ตั้งแต่พื้นฐานของฟังก์ชัน if ไปจนถึงเทคนิคขั้นสูง แบบทีละขั้นตอน
YouTube Video
ฟังก์ชัน if ใน SASS
    
ฟังก์ชัน if() เป็นฟังก์ชันเชิงเงื่อนไขแบบง่ายที่มีใน SASS ซึ่งจะคืนค่าหนึ่งในสองค่าโดยอิงตามเงื่อนไขแบบบูลีน มีความคล้ายกับตัวดำเนินการแบบสามทาง (ternary) ของ JavaScript
ไวยากรณ์
ไวยากรณ์มีดังนี้:
1// if(condition, trueValue, falseValue)- ถ้า conditionเป็นจริง จะคืนค่าtrueValueหากเป็นเท็จ จะคืนค่าfalseValue
การใช้งานพื้นฐาน
ตัวอย่างเช่น คุณสามารถใช้ฟังก์ชัน if() เพื่อเปลี่ยนสีพื้นหลังและสีข้อความตามว่าธีมเป็นแบบมืดหรือสว่าง
โค้ดตัวอย่าง
1$theme: "dark";
2
3$background-color: if($theme == "dark", black, white);
4$text-color: if($theme == "dark", white, black);
5
6body {
7  background-color: $background-color;
8  color: $text-color;
9}- ถ้าตัวแปร $themeเป็น"dark"พื้นหลังจะเป็นสีดำพร้อมข้อความสีขาว; ถ้าเป็น"light"พื้นหลังจะเป็นสีขาวพร้อมข้อความสีดำ
CSS ที่ถูกสร้างขึ้น
1body {
2  background-color: black;
3  color: white;
4}- เนื่องจากตัวแปร $themeเป็น"dark"พื้นหลังจึงเป็นสีดำและข้อความเป็นสีขาว
ความแตกต่างระหว่างคำสั่ง @if และฟังก์ชัน if()
    
Sass มีคำสั่ง @if และฟังก์ชัน if() สำหรับการแตกแขนงตามเงื่อนไข แต่ทั้งสองถูกใช้เพื่อวัตถุประสงค์ที่ต่างกัน
โค้ดตัวอย่าง
 1$theme: "dark";
 2
 3// `@if` statement: Compile-time branching (syntax level)
 4$background-color: null;
 5@if $theme == "dark" {
 6  $background-color: black;
 7} @else if $theme == "light" {
 8  $background-color: white;
 9} @else {
10  $background-color: gray;
11}
12
13// `if()` function: Returns a value (expression level)
14$text-color: if($theme == "dark", white, black);
15
16body {
17  background-color: $background-color;
18  color: $text-color;
19}- คำสั่ง @ifควบคุมว่าโค้ดส่วนใดจะถูกส่งออกในระหว่างการคอมไพล์ของ Sass
- ในทางกลับกัน ฟังก์ชัน if()จะส่งคืนค่า และใช้สำหรับสลับค่าแบบไดนามิกภายในนิพจน์
CSS ที่ถูกสร้างขึ้น
1body {
2  background-color: black;
3  color: white;
4}- ในตัวอย่างนี้ เนื่องจาก $themeเป็น"dark"จึงใช้พื้นหลังสีดำและสีข้อความเป็นสีขาว
- ความแตกต่างสำคัญสองประการคือ คำสั่ง @ifใช้ควบคุมโครงสร้าง ส่วนฟังก์ชันif()จะส่งคืนค่า
การใช้ฟังก์ชัน if แบบซ้อนกัน
    
เมื่อคุณต้องการการแตกแขนงที่ซับซ้อน คุณสามารถซ้อนฟังก์ชัน if ได้
โค้ดตัวอย่าง
 1$theme: "custom";
 2$custom-color: blue;
 3
 4$background-color: if(
 5  $theme == "dark",
 6  black,
 7  if(
 8    $theme == "light",
 9    white,
10    $custom-color
11  )
12);
13
14body {
15  background-color: $background-color;
16}- ถ้า $themeเป็น"dark"จะคืนค่าสีดำ; ถ้าเป็น"light"จะคืนค่าสีขาว; กรณีอื่นจะคืนค่าเริ่มต้น ($custom-color)
CSS ที่ถูกสร้างขึ้น
1body {
2  background-color: blue;
3}- เนื่องจากตัวแปร $themeเป็นcustomสีพื้นหลังจึงเป็นสีน้ำเงิน
กรณีการใช้งานจริง
การสลับธีม
ด้านล่างคือตัวอย่างที่เปลี่ยนสไตล์ปุ่มตามธีม
1$theme: "dark";
2
3.button {
4  background-color: if($theme == "dark", #333, #fff);
5  color: if($theme == "dark", #fff, #333);
6  border: 1px solid if($theme == "dark", #444, #ccc);
7}- โค้ดนี้เป็นตัวอย่างเงื่อนไขของ SASS ที่สลับสีพื้นหลัง สีข้อความ และสีเส้นขอบของปุ่มตามค่าของตัวแปร $themeฟังก์ชันif()ถูกใช้เพื่อกำหนดสไตล์สำหรับธีมมืดและสว่างแบบไดนามิก
CSS ที่ถูกสร้างขึ้น
1.button {
2  background-color: #333;
3  color: #fff;
4  border: 1px solid #444;
5}- ด้วยการสลับธีม คุณสามารถปรับดีไซน์โดยรวมให้เปลี่ยนไปอย่างสม่ำเสมอ
ตัวอย่างขั้นสูง: การตั้งค่าความคอนทราสต์ของสีแบบไดนามิก
มาดูตัวอย่างที่ตั้งค่าสีข้อความโดยอัตโนมัติตามสีพื้นหลัง
โค้ดตัวอย่าง
 1@use "sass:color";
 2
 3$background-color: #000;
 4
 5$text-color: if(
 6  color.channel($background-color, "lightness", $space: hsl) > 50%,
 7  black,
 8  white
 9);
10
11body {
12  background-color: $background-color;
13  color: $text-color;
14}- ฟังก์ชัน color.channel()ใช้เพื่อดึงค่าความสว่างของสีพื้นหลัง (lightness) หากค่านั้นมากกว่า50%จะเลือกสีดำ; หากน้อยกว่า จะเลือกสีขาวเป็นสีข้อความ โดยปรับความคอนทราสต์กับพื้นหลังโดยอัตโนมัติ
CSS ที่ถูกสร้างขึ้น
1body {
2  background-color: #000;
3  color: white;
4}- ด้วยการใช้ฟังก์ชัน if()คุณสามารถสร้างสไตล์ที่ยืดหยุ่นซึ่งคำนึงถึงการเข้าถึงในการออกแบบ เช่น การปรับคอนทราสต์
การผสานกับ @function
    
การใช้ฟังก์ชัน if ภายใน @function ช่วยให้การออกแบบสไตล์ยืดหยุ่นยิ่งขึ้น
โค้ดตัวอย่าง
 1@function theme-color($theme, $type) {
 2  @return if(
 3    $theme == "dark",
 4    if(
 5      $type == "background",
 6      black,
 7      white
 8    ),
 9    if(
10      $type == "background",
11      white,
12      black
13    )
14  );
15}
16
17body {
18  background-color: theme-color("dark", "background");
19  color: theme-color("dark", "text");
20}- โค้ดนี้สาธิตการใช้ if()ภายใน@functionเพื่อคืนค่าสีที่เหมาะสมตามธีมและประเภทสี วิธีนี้ช่วยให้การออกแบบสไตล์ของแต่ละธีมมีความสอดคล้องและนำกลับมาใช้ซ้ำได้
CSS ที่ถูกสร้างขึ้น
1body {
2  background-color: black;
3  color: white;
4}- ด้วยการสร้างและใช้ฟังก์ชันตัวช่วยที่ใช้ประโยชน์จาก if()คุณสามารถปรับปรุงความสามารถในการบำรุงรักษาของทั้งโปรเจกต์ได้
หมายเหตุ
- 
ฟังก์ชัน ifไม่สามารถใช้กับค่าแบบไดนามิกได้ เนื่องจาก CSS เองเป็นภาษาคงที่ ฟังก์ชันifจึงกำหนดค่าในตอนที่คอมไพล์ SASS สำหรับลอจิกแบบมีเงื่อนไขที่ทำงานขณะรันไทม์ คุณจำเป็นต้องใช้ JavaScript
- 
ให้ความสำคัญกับความอ่านง่าย เนื่องจากฟังก์ชัน ifที่ซ้อนกันอาจซับซ้อนและทำให้การอ่านยากขึ้น คุณสามารถใช้ SASS@mixinและ@functionตามความจำเป็นเพื่อจัดระเบียบโค้ดของคุณ
สรุป
ฟังก์ชัน if ของ SASS เป็นเครื่องมือทรงพลังที่คืนค่าที่แตกต่างกันตามเงื่อนไข มีประโยชน์ไม่เพียงแค่เงื่อนไขแบบง่าย แต่ยังใช้ได้ในหลายกรณี เช่น การสลับธีมและการตั้งค่าสไตล์แบบไดนามิก อย่างไรก็ตาม เมื่อจัดการกับเงื่อนไขที่ซับซ้อน ควรใส่ใจเรื่องความอ่านง่าย และใช้ประโยชน์จาก @mixin และ @function เพื่อเพิ่มความสามารถในการดูแลรักษา
ด้วยการเชี่ยวชาญฟังก์ชัน if คุณจะสามารถออกแบบสไตล์ได้อย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย