การวนซ้ำใน SASS
บทความนี้อธิบายวิธีการจัดการการวนซ้ำใน SASS
เราจะอธิบายวิธีการวนซ้ำใน SASS ทีละขั้นตอน พร้อมตัวอย่างโค้ดจริง
YouTube Video
การวนซ้ำใน SASS
การวนซ้ำใน SASS ช่วยหลีกเลี่ยงการเขียนโค้ดซ้ำซ้อน และทำให้สามารถสร้างสไตล์ที่ยืดหยุ่นและนำกลับมาใช้ใหม่ได้
เหตุผลที่ควรใช้การวนซ้ำใน SASS
การใช้การวนซ้ำมีข้อดีหลายอย่าง เช่น
- การนำกลับมาใช้ใหม่ ของโค้ดดีขึ้น ทำให้ง่ายต่อการสร้างสไตล์รูปแบบคล้ายกัน
- ความง่ายในการดูแลรักษา สูงขึ้น สามารถแก้ไขสไตล์หลายอย่างพร้อมกันได้ง่าย
- ลดข้อผิดพลาด ได้ด้วย
เช่น สามารถสร้างสไตล์ของปุ่มที่มีหลายสีหรือคอมโพเนนต์ที่มีหลายขนาดได้พร้อมกันทั้งหมด
รูปแบบไวยากรณ์ที่ใช้สำหรับการวนซ้ำใน SASS
ไวยากรณ์หลักที่ใช้สำหรับการวนซ้ำใน SASS มีดังนี้:
- การใช้
@forสามารถวนซ้ำในช่วงตัวเลขที่กำหนดได้ - การใช้
@eachสามารถวนซ้ำในลิสต์หรือแผนที่ (map) - การใช้
@whileจะวนซ้ำจนกว่าจะเข้าเงื่อนไขที่กำหนด
การวนซ้ำด้วย @for
@for ทำการประมวลผลซ้ำตามช่วงตัวเลขที่กำหนด
ไวยากรณ์
1/*
2@for $i from <start> to <end> {
3 ...
4}
5
6@for $i from <start> through <end> {
7 ...
8}
9*/- กำหนดค่าต้นทางและปลายทางสำหรับ
<start>และ<end>การใช้toจะไม่รวมค่าปลายทาง ส่วนthroughจะรวมค่าปลายทางด้วย
ตัวอย่าง
โค้ดต่อไปนี้จะสร้างคลาสขอบ (border) ที่หนาขึ้นทีละ 1px โดยอัตโนมัติ
1@for $i from 1 through 5 {
2 .border-#{$i} {
3 border-width: #{$i}px;
4 }
5}- โค้ดนี้จะสร้างคลาสสำหรับความหนาขอบที่เพิ่มขึ้นทีละ 1px โดยอัตโนมัติ ที่นี่ใช้คำสั่ง
@forเพื่อวนซ้ำจาก 1 ถึง 5
CSS ที่ถูกสร้างขึ้น
1.border-1 {
2 border-width: 1px;
3}
4.border-2 {
5 border-width: 2px;
6}
7.border-3 {
8 border-width: 3px;
9}
10.border-4 {
11 border-width: 4px;
12}
13.border-5 {
14 border-width: 5px;
15}- คลาสตั้งแต่
.border-1ถึง.border-5จะถูกสร้างขึ้นต่อเนื่อง โดยแต่ละคลาสขอบจะหนาขึ้นทีละ 1px
การวนซ้ำด้วย @each
@each ใช้วนซ้ำกับลิสต์หรือแผนที่ (map) เหมาะสำหรับการสร้างคลาสซ้ำรูปแบบต่างๆ อย่างมีประสิทธิภาพ
ไวยากรณ์
1/*
2@each $item in <list> {
3 ...
4}
5*/ตัวอย่างที่ 1: การใช้ลิสต์
โค้ดตัวอย่างด้านล่างจะสร้างคลาสสำหรับเปลี่ยนสีข้อความหลายชุด
1@each $color in ("red", "blue", "green") {
2 .text-#{$color} {
3 color: #{$color};
4 }
5}- โค้ดนี้จะสร้างคลาสสีข้อความสำหรับแต่ละสีในลิสต์โดยอัตโนมัติ ใช้คำสั่ง
@eachเพื่อวนซ้ำค่าทุกตัวในลิสต์ตามลำดับ
CSS ที่ถูกสร้างขึ้น
1.text-red {
2 color: red;
3}
4.text-blue {
5 color: blue;
6}
7.text-green {
8 color: green;
9}- เมื่อไฟล์ SASS ถูกคอมไพล์เป็น CSS จะได้คลาส
.text-red,.text-blue,.text-greenสำหรับแต่ละสีในลิสต์
ตัวอย่างที่ 2: การใช้แผนที่ (map)
การใช้แผนที่ (map) จะทำให้จัดการกับคู่คีย์และค่าได้ ตัวอย่างต่อไปนี้กำหนดสีพื้นหลังของปุ่มด้วยแผนที่
1$colors: (
2 primary: #3498db,
3 success: #2ecc71,
4 danger: #e74c3c
5);
6
7@each $name, $hex in $colors {
8 .bg-#{$name} {
9 background-color: #{$hex};
10 }
11}CSS ที่ถูกสร้างขึ้น
1.bg-primary {
2 background-color: #3498db;
3}
4.bg-success {
5 background-color: #2ecc71;
6}
7.bg-danger {
8 background-color: #e74c3c;
9}- เมื่อไฟล์ SASS ถูกคอมไพล์ จะได้คลาสเช่น
.bg-primary,.bg-success,.bg-dangerสำหรับแต่ละคีย์ในแผนที่
การวนซ้ำด้วย @while
@while จะวนซ้ำต่อไปเรื่อย ๆ ตราบที่เงื่อนไขยังเป็นจริง
ไวยากรณ์
1/*
2@while <condition> {
3 ...
4}
5*/ตัวอย่าง
ตัวอย่างเช่น ถ้าต้องการปรับขนาดฟอนต์ทีละขั้น สามารถเขียนได้ดังนี้:
1$i: 1;
2
3@while $i <= 5 {
4 .font-#{$i} {
5 font-size: #{$i}rem;
6 }
7 $i: $i + 1;
8}- สามารถใช้คำสั่ง
@whileเพื่อวนซ้ำในการเพิ่มขนาดฟอนต์ทีละขั้น โดยใช้ตัวแปร $i จะสร้างคลาสอัตโนมัติสำหรับค่าตั้งแต่ 1 ถึง 5
CSS ที่ถูกสร้างขึ้น
1.font-1 {
2 font-size: 1rem;
3}
4.font-2 {
5 font-size: 2rem;
6}
7.font-3 {
8 font-size: 3rem;
9}
10.font-4 {
11 font-size: 4rem;
12}
13.font-5 {
14 font-size: 5rem;
15}- เมื่อไฟล์ SASS ถูกคอมไพล์ จะสร้างคลาสที่ขนาดฟอนต์เพิ่มขึ้นตั้งแต่ 1rem ถึง 5rem โดยอัตโนมัติ
ตัวอย่างขั้นสูง: ผสมผสานการวนซ้ำและการซ้อน (Nesting)
การรวมการวนซ้ำกับคุณสมบัติ nesting ของ SASS ช่วยให้สร้างสไตล์ที่ซับซ้อนได้มากขึ้น
ตัวอย่าง
ด้านล่างเป็นตัวอย่างที่กำหนดสีพื้นหลังและสีเมื่อโฮเวอร์ของปุ่มไว้ด้วยกัน
1@use "sass:color";
2
3$colors: (
4 primary: #3498db,
5 success: #2ecc71,
6 danger: #e74c3c
7);
8
9@each $name, $hex in $colors {
10 .btn-#{$name} {
11 background-color: $hex;
12 color: white;
13
14 &:hover {
15 background-color: color.scale($hex, $lightness: -10%);
16 }
17 }
18}- โดยการผสมผสานระหว่างการวนซ้ำและการซ้อนกันของ SASS คุณสามารถสร้างสีพื้นหลังของปุ่มและสีเมื่อโฮเวอร์ได้พร้อมกันในครั้งเดียว สำหรับแต่ละสีในแผนที่ จะมีการสร้างคลาส
.btn-และกำหนดรูปแบบ:hoverโดยใช้การซ้อนกัน
CSS ที่ถูกสร้างขึ้น
1.btn-primary {
2 background-color: #3498db;
3 color: white;
4}
5.btn-primary:hover {
6 background-color: #2980b9;
7}
8.btn-success {
9 background-color: #2ecc71;
10 color: white;
11}
12.btn-success:hover {
13 background-color: #27ae60;
14}
15.btn-danger {
16 background-color: #e74c3c;
17 color: white;
18}
19.btn-danger:hover {
20 background-color: #c0392b;
21}- เมื่อคุณแปลงไฟล์ SASS เป็น CSS สีพื้นหลังและสีเมื่อโฮเวอร์ของแต่ละปุ่มจะถูกสร้างขึ้นโดยอัตโนมัติ และรูปแบบ :hover จะถูกกำหนดรวมกันโดยใช้การซ้อนโค้ด
ข้อควรระวังเมื่อใช้การวนซ้ำ
ให้คำนึงถึงข้อเหล่านี้เมื่อใช้การวนซ้ำ เพื่อให้เขียนโค้ดได้อย่างมีประสิทธิภาพและอ่านง่าย
-
หลีกเลี่ยงการซ้อนกันหลายชั้นเกินไป การซ้อนกันหลายชั้นจะลดความอ่านง่ายของโค้ด ควรซ้อนเท่าที่จำเป็น
-
ควรพิจารณาผลกระทบต่อประสิทธิภาพ หากมีคลาสจำนวนมากที่ถูกสร้างจากการวนซ้ำ ไฟล์ CSS อาจมีขนาดใหญ่โดยไม่จำเป็น
-
ใช้ชื่อตัวแปรที่เหมาะสม สำหรับตัวแปรเช่น
$iหรือ$itemควรใช้ชื่อที่สื่อความหมาย เพื่อให้โค้ดเข้าใจง่ายขึ้น
สรุป
การใช้การวนซ้ำใน SASS ช่วยให้การออกแบบสไตล์เป็นไปอย่างมีประสิทธิภาพและดูแลรักษาง่าย โดยเฉพาะอย่างยิ่ง การเลือกใช้ระหว่าง @for, @each และ @while จะช่วยให้สามารถสร้าง CSS ที่ยืดหยุ่นและปรับเปลี่ยนได้ง่าย
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย