Skip to main content

Tableless design


Tableless design เป็นการออกแบบ layout ของ HTML โดยไม่ใช้ table มาช่วยเลย โดยการที่ไม่ใช้ table ไม่ได้หมายความว่าจะตัด table ออกจาก html ไปเลย เพียงแต่ไม่ใช้ table ในการ design layout ส่วน table ก็ไปทำหน้าที่ในตอนแสดงข้อมูลออกมาในตารางเท่านั้น

ถ้าไม่ใช้ตารางจะใช้อะไรแทนหละ คำตอบตือใช้ <div> และ <span> ช่วยในการวาง Layout แทน โดย <div> ใช้ในออกแบบเกี่ยวกับ layout ในส่วนที่ไม่มีตัวอักษร เช่นการแบ่งโครงสร้างต่างๆของ web เช่นส่วนของเมนู ส่วนของ Banner ส่วนของ content ส่วนของ footer เป็นต้น ส่วน <span> จะเอามาใช้ในการจัดโครงสร้างของข้อความต่างๆ ไปดูเหตุผลพวกนี้ที่
http://www.divland.com/blog/2007/03/23/div-or-span/
แล้วเราจะออกแบบยังไง เราก็ออกแบบโดยมองว่า 1 <div> แทนโครงสร้างในส่วนหนึ่ง อย่างเช่น
<div id="banner">Banner</div>
อาจจะยังไม่เห็นภาพรวมของมันเราลองดูกันเต็มๆว่าถ้าใช้
<div>เต็มๆแล้วจะเป็นยังไง

<body>
<div id="page">
<div id="banner">Banner</div>
<div id="nav">Navigator</div>
<div id="content">
<div id="col1">Column1</div>
<div id="col2">Column2</div>
</div>
<div id="footer">Footer</div>
</div>
</body>
โครงสร้างที่เราคาดหวังว่าจะได้ มันจะเป็นเหมือนรูปด้านล่าง





แต่รูปด้านบนคือสิ่งที่เราคาดหวังแต่พอ run จริงๆจะได้ผลแบบนี้

ซึ่งไม่ใช่อย่างที่หวังอยากจะเป็นเลย เพราะอย่างที่เราบอกตอนแรกว่า <div> ใช้แค่วาง Layout เท่านั้น แต่การจัดการแสดงผลเราต้องใช้ css ช่วยในการให้มันแสดงผลออกมาให้เป็นไปตามสิ่งที่เราหวัง โดยลองใส่ css ลงไปดังนี้
<style type="text/css"> body{ background-color: #4D87C7; }

#page{
background-color: white;
margin: 0 auto;
width: 1000px;
padding:10px;
}

#banner{
padding: 35px 0px 0px 30px; background-repeat: repeat;
color: #999999;
height: 65px; font: bold 20px/20px Verdana, Geneva, Arial, Helvetica, sans-serif;
}

#nav{
padding: 10px;
background-color:#FFAA55;
}
#content{}

#col1{
position: absolute;
float: left;
width: 225px;
padding: 10px;
background-color: #E1EFF7;
}

#col2{
margin-left: 245px;
width: 735px;
padding: 10px;
background-color: #AAAAFF;
}

#footer{
color: white;
padding: 10px;
text-align: center;
background-color: #464A4B;
}  </style>
เราก็จะได้สิ่งที่เราต้องการอย่างสุขสมอุราดังรูปด้านล่าง


สิ่งสำคัญการออกแบบ layout แบบ tableless นี้ก็คือ css นั่นเอง ในตอนแรกถึงแม้ว่ามันจะดูยุ่งยากวุ่นวาย
แต่จะสังเกตุว่าค่าการตั้งค่าต่างๆของการแสดง layout นั้นอยู่ใน css หมดเลยทำให้มันดีตรงที่ในหน้า html เรา code จะไม่รกเลย ทำให้เราจัดการกับข้อมูลในการนำเสนอออกมาเท่านั้น แต่วันไหนถ้าหากจะเปลี่ยน
font เปลี่ยน layout เราก็ไม่ต้องไปยุ่งกับ HTML เลยเพราะเรา config ลงใน css หมด นอกจากจะทำให้เราจัดการกับ HTML ได้ง่ายขึ้นแล้วยังทำให้ HTML โหลดเร็วขึ้นกว่าเดิมด้วย

อาจจะดูยุ่งยากไปหน่อยในตอนเริ่มศึกษาแต่ถ้าเราเข้าใจหลักการหรือโครงสร้างทุกอย่างแล้วเราก็ไม่จำเป็นที่ต้องมาออกใหม่ทุกครั้งอย่างนี้ก็ได้เพราะว่ามันมี template ให้เรามาใช้ได้เลยไม่ต้องออกแบบใหม่ เพียงแต่เอามาแก้ไขในส่วนของ css เท่านั้นเพื่อให้มันเป็นไปตามลักษณะ รูปแบบที่เราต้องการ ซึ่ง css
template พวกนี้เราจะเรียกว่า css framework ซึ่งมีที่ดังๆอยู่ที่ผมรู้จักนะ (อาจจะเยอะกว่านั้น) สองดัวคือ
blueprintcss และ elasticss สนใจตัวไหนลองไปศึกษาดูครับ เอาละไม่มีอะไรจะโม้แล้วขอจบลงเพียงแต่เท่านี้ ซึ่งสิ่งที่ผมได้อธิบายมานั้นเป็นการสรุปคร่าวๆ ลองไปศึกษาเพิ่มเติมที่ http://www.divland.com/blog/category/begining-css เลยครับ

Comments

  1. ดีมากค่ะบทความนี้
    จริงๆ การเขียน code แบบ Tableless design จะทำให้จัดการกับการแสดงผลของหน้าเว็บได้ง่ายกว่าการใช้ Table มาก และดูดี มีสกุล ไม่ซับซ้อน

    ต่างประเทศ เค้าไม่มีใครมาเขียน table กับแล้ว มีแต่ประเทศไทยเนี่ยแหละ ไม่เข้าใจจริ๊ง จริง

    table 10 กว่าอัน ซ้อนกันเข้าไป... ฮ่าๆ

    ReplyDelete

Post a Comment

Popular posts from this blog

ลองเล่น SonarQube คลื่นโซนาร์ช่วยตรวจสอบคุณภาพของ code

SonarQube  คือเครื่องมือช่วยตรวจสอบคุณภาพของ source code ช่วยหาข้อบกพร่องใน source code ไม่ว่าจะเป็น Bug ที่น่าจะเกิดขึ้น ช่องโหว่ทางด้านความปลอดภัยหรือกลิ่นไม่ดีใน source code ของเรา (Code Smell) และ ช่วยตรวจสอบเราเขียน code ทดสอบครอบคลุมหรือดีแล้วยังยัง (code coverage) Code Smell ไม่ได้ใช้วัดว่า source code นี้สามารถทำงานได้ถูกต้อง มี bug หรือช่องโหว่หรือไม่ แต่ Code Smell ใช้วัดถึงคุณภาพของการออกแบบ เพื่อตรวจสอบว่า source code ที่เป็นอยู่ในปัจจุบันจะสามารถต่อเติม แก้ไขหรือทดสอบได้ง่ายหรือไม่ โดยหลักเกณฑ์ที่นำมาใช้วัดในส่วนของ Code Smell คือ ความซ้ำซ้อนของ code มี code แบบเดียวกันไปซ้ำกันในไฟล์ไหนบ้าง ตรวจสอบเงื่อนไขใน if ให้ ว่าเงื่อนไขตรงนี้มันมีโอกาสเป็นไปได้ไหม เพราะบางทีเงื่อนไขที่เราเขียนขึ้นมาเพื่อดักไว้ในบางครั้งมันแทบจะไม่มีโอกาสที่เวลามันทำงานแล้วเข้าเงื่อนไขในส่วนนั้น เป็นต้น สามารถไปอ่านรายละเอียดเพิ่มเติมได้ที่นี่ http://www.somkiat.cc/code-smell-internal-class/ นอกจาก SonarQube จะสามารถบอกถึงคุณภาพของ source code เราได้แล้ว ยังสามารถใช้ในการแจกแจงง...

ลองเล่นและเรียนรู้พื้นฐานขั้นต้นของ Spring Framework

** สำหรับใครที่ไม่เคยเรียนรู้ในด้านของ Java EE หรือ J2EE อาจจะมึนงงกับศัพท์หน่อยครับ ทำไมต้อง Spring Spring เป็น framework ที่นิยมมากในการนำไปสร้างระบบในระดับ enterprise ในเริ่มแรกที่ Spring เกิดมา มีจุดมุ่งหมายเพื่อที่จะมาแทนที่มาตรฐานของ Java อย่าง J2EE (Java 2 Enterprise Edition) ที่มันทั้งหน่วงทั้งอืดและยุ่งยาก โดยเฉพาะในส่วนของ EJB (Enterprise Java Bean) ที่ถือว่าเป็นฝันร้ายของนักพัฒนา ทำให้กูรูสาย Java ในช่วงนั้นถึงกับแนะนำว่า ถ้าจำเป็นที่ต้องพัฒนาระบบด้วย J2EE จงอย่าใช้ EJB ถึงขั้นถึงกับมีหนังสือแนะแนวทางการพัฒนาระบบ J2EE โดยไม่ใช้ EJB อย่างไรก็ตามทาง Sun ผู้เป็นเจ้าของ Java ในสมัยนั้น ถึงกับต้องมาล้างระบบ J2EE ใหม่ในปี 2006 จัดการใน EJB ให้ใช้ง่ายขึ้น มีประสิทธิภาพมากขึ้น และมีการเปลี่ยนชื่อจาก J2EE เป็น Java EE (Java Enterprise Edition) เพื่อลบภาพอันเลวร้ายของเดิมให้หมด และได้มีการนำฟีเจอร์เด็ดๆ ของ open source framework หลายๆ ตัว อย่างเช่นแกนหลักของ Spring อย่าง IoC (Inversion of Control) หรือ OR Mapping (Object Relational Mapping) ที่เป็นที่นิยมอย่าง Hibernate แต่ก็ไ...

Inversion of Control และ Dependency Injection

Inversion of Control (IoC) คืออะไร IoC เป็นทฤษฏีที่ว่าด้วย การลดความผูกมัด (dependency) กันในระหว่าง module เพื่อให้ application ของเราแก้ไข (maintain) ต่อเติม (extensible) หรือทดสอบ (test) ได้ง่ายขึ้น ซึ่งเอาจริงๆ IoC เป็นอะไรที่ทำให้เราสับสนและงุนงงมากๆ ว่ามันคืออะไร หลายๆ คนจึงยกให้ว่า IoC คือ Dependency Injection (DI) ซึ่งจริงๆ มันก็ไม่ถูกซะทีเดียว  Dependency คืออะไร Dependency คือการผูกมัดที่เกิดขึ้นในระบบ เมื่อ module นึงมีการเรียกใช้อีก module นึงด้วยการอ้างอิง (reference) ตรงๆ แล้วอะไรที่เรียกว่าการ อ้างอิง (Reference) แบบตรงๆ   อย่างภาพ diagram ด้านบน class LogEngine มีการเรียกใช้ ConsoleLog โดยตรง ซึ่งมองผ่าน diagram อาจจะไม่เห็นภาพลองดู code กัน public class ConsoleLog { public void openLog(){ //do something to open log } public void log(String message){ //do something to log } public void closeLog(){ //do something to close log } } public class LogEngine { private ConsoleLog log; public LogEng...