ฟังก์ชัน `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 ด้วย