ปกติเวลาเราสร้างตาราง (table) สำหรับขึ้นมาสักอันหนึ่ง แล้วเราต้องการแยกสีสำหรับแต่ละแถว เราก็อาจจะเขียนโค๊ดในการวนลูปเพื่อให้แต่ละแถวมีสีไม่เหมือนกัน แต่ถ้าหากเราไม่สามารถให้สามารถวนลูปได้ คือ server รัน php หรือ asp ไม่ได้ เราจะมีวิธีแก้ปัญหายังไงดี
ง่ายๆ เลย ก็ใส่สีในแต่ละแถวไปเลยสิ (ง่ายไหม)
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<th scope="col" width="33%">ช่องที่</th>
<th scope="col" width="33%">ตัวหนังสือ</th>
<th scope="col">ภาษาไทย</th>
</tr>
<tr bgcolor="#999">
<td>1</td>
<td>A</td>
<td>ก</td>
</tr>
<tr>
<td>2</td>
<td>B</td>
<td>ข</td>
</tr>
<tr bgcolor="#999">
<td>3</td>
<td>C</td>
<td>ฃ</td>
</tr>
<tr>
<td>4</td>
<td>D</td>
<td>ค</td>
</tr>
<tr bgcolor="#999">
<td>5</td>
<td>E</td>
<td>ฅ</td>
</tr>
<tr>
<td>6</td>
<td>F</td>
<td>ฆ</td>
</tr>
<tr bgcolor="#999">
<td>7</td>
<td>G</td>
<td>ง</td>
</tr>
<tr>
<td>8</td>
<td>H</td>
<td>จ</td>
</tr>
<tr bgcolor="#999">
<td>9</td>
<td>I</td>
<td>ฉ</td>
</tr>
</table>
ได้แบบนี้เลย
หรือถ้าหากเราสามารถใช้ php ได้ เราก็สามารถใช้วิธีการวนลูปก็ได้เหมือนกัน แถมยังสะดวกสบายด้วยสิถ้าหากเขียนโค๊ดก็ได้ประมาณนี้
<?php
$a = array(array(1,'A','ก'), array(2,'B','ข'), array(3,'C','ฃ'), array(4,'D','ค'), array(5,'E','ฅ'), array(6,'F','ฆ'), array(7,'G','ง'), array(8,'H','จ'), array(9,'I','ฉ'));
?>
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<th scope="col" width="33%">ช่องที่</th>
<th scope="col" width="33%">ตัวหนังสือ</th>
<th scope="col">ภาษาไทย</th>
</tr>
<?php
$i = 0;
foreach($a as $val) {
?>
<tr <?php echo $i % 2 == 0 ? " bgcolor='#999' " : " bgcolor='#FFF' ";?>>
<td><?php echo $val[0];?></td>
<td><?php echo $val[1];?></td>
<td><?php echo $val[2];?></td>
</tr>
<?php
$i++;
}
?>
</table>
ซึ่งผลลัพธ์ที่ได้ก็จะเหมือนกับตารางข้างบน แต่ถ้าหากเราไม่สามารถเขียนโค๊ดเพื่อใช้งานลูปได้ เราก็ต้องใช้วิธีแรกเอง ซึ่งถ้าหากต้องการเปลี่ยนสีละ จากขาวกับเทาเป็นสีแดงกับน้ำเงิน ทีนี้สิ งานเข้าแล้ว เราก็ต้องมาไล่แก้ทั้งหมดเลย
คำตอบของเราคือ CSS
แล้วใช้ยังไงละ?
เราสามารถเพิ่ม nth-child เพิ่มเข้าไปเป็น attribute ของ css ที่เราต้องการได้ ลองมาดูตัวอย่างเลยล่ะกัน ถ้าต้องการแยกสีให้เหมือนกับตารางข้างบนเราก็สามารถเขียนโค๊ดในส่วนของ CSS ได้ดังนี้
<style type="text/css">
tr:nth-child(even) { background-color:#0F0; }
tr:nth-child(odd) { background-color:#F00; }
tr:first-child {background-color:#FFFFFF;}
</style>
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<th scope="col" width="33%">ช่องที่</th>
<th scope="col" width="33%">ตัวหนังสือ</th>
<th scope="col">ภาษาไทย</th>
</tr>
<tr>
<td>1</td>
<td>A</td>
<td>ก</td>
</tr>
<tr>
<td>2</td>
<td>B</td>
<td>ข</td>
</tr>
<tr>
<td>3</td>
<td>C</td>
<td>ฃ</td>
</tr>
<tr>
<td>4</td>
<td>D</td>
<td>ค</td>
</tr>
<tr>
<td>5</td>
<td>E</td>
<td>ฅ</td>
</tr>
<tr>
<td>6</td>
<td>F</td>
<td>ฆ</td>
</tr>
<tr>
<td>7</td>
<td>G</td>
<td>ง</td>
</tr>
<tr>
<td>8</td>
<td>H</td>
<td>จ</td>
</tr>
<tr>
<td>9</td>
<td>I</td>
<td>ฉ</td>
</tr>
</table>
เห็นไหม ได้ผลลัพธ์เหมือนกันเลยแต่ไม่ต้องพึ่งลูปเลยสักนิดเดียว ถ้าหากต้องการแก้สี ก็ทำได้ใน CSS ด้านบนที่เดียวเลยสบายเลยใช่ไหมละ 🙂
ส่วนสาเหตุที่ต้องใส่ first-child เข้าไปด้วย เพราะ tr มันจะนับตั้งแต่แถวแรกเลย
แล้วมันดียังไงเหรอ?
ลองคิดดูว่า ถ้าเราใช้คู่กับ jQuery แล้วถ้าต้องการลบข้อมูลทีละแถวโดยไม่ต้องทำการรีเฟรชหน้าจอ ถ้าหากเรากำหนดสีให้แต่ละแถวไปแล้วเมื่อเราทำการลบแถวนั้นๆ ออกไป สีมันจะเรียงไม่ถูกต้อง ไม่สวยงามแน่นอน ลองดูตัวอย่างข้างล่างละกันครับ
เห็นหรือยังครับว่าง่าย แล้วสะดวกสบายแค่ไหน 😀
ปล. ทดสอบบน IE9, Firefox10, Chrome และ Android Browser เท่านั้นนะครับ ส่วนตัวอื่นๆ ยังไม่ได้ทำการทดสอบ


0 Comments
1 Pingback