Home > เริ่มต้นกับ CSS > ค้นหาพัฒนาการแห่ง Layout

ค้นหาพัฒนาการแห่ง Layout

CSS Layout คือการจัดรูปหน้าเวปโดยการจัดวาง div และส่วนประกอบต่างๆของหน้าเวบนั้นๆ ให้อยู่ในจุดที่ต้องการ

การจัดตำแหน่งสามารถทำได้โดยการกำหนด position หรือการใช้เทคนิคการ float-clear

นอกจากนั้นยังต้องคำนึงถึง CSS Box Model ด้วย

Layout หลักๆในหนึ่งหน้า xhtml ที่มีความหมาย semantic (การเขียนหน้าเว็บตามความหมายของ tag) ที่ถูกต้องแก่การใช้งานได้แก่

  • header
  • navigation
  • content
  • footer

ซึ่งจากพื้นฐานนี้เราจะสามารถกำหนดรายละเอียดเพิ่มเติม ให้หน้าเว็บของเราต่อไปได้ว่า เราเลือกที่จะให้หน้าเว็บมีเนื้อหากี่ส่วนกี่คอลัมน์ คอลัมน์ไหนเป็นคอลัมน์หลักหรือคอลัมน์รอง เลือกที่จะมี navigation กี่ส่วนแบบไหน แล้วก็ควรจะตั้งชื่อ div ให้ตรงตามความหมายกับเนื้อหาทุกอย่างที่ใส่ไปด้วย การเพิ่ม div เข้าไปเพื่อจุดประสงค์ของการจัดรูปหน้าเพียงอย่างเดียว โดยไม่ได้เกี่ยวข้องกับเนื้อหาเป็นการประนีประนอมยอม แลกความถูกต้องทาง semantic(ความหมาย) กับการจัดรูปแบบเสมอ

เราควรใช้ div ที่มีจุดประสงค์เพื่อการจัดรูปหน้าอย่างเดียวให้น้อยที่สุด เท่าที่จะทำได้เพื่อรักษาความถูกต้องทาง semantic(ความหมาย) ไว้ให้ได้มากที่สุดเพื่อผลประโยชน์ทาง SEO ไม่ได้หมายความว่าเราควรหลีกเลี่ยงการใช้ div โดยสิ้นเชิง แค่ควรหลีกเลี่ยงการใช้ div ที่ไม่มีความหมายทาง semantic เท่านั้น

ตัวอย่าง div ที่มีความหมายถูกต้องทาง semantic

ได้แก่ div ที่มีจุดประสงค์การใช้งานในการแบ่งกลุ่ม หรือจัดกลุ่มของเนื้อหาเข้าไว้ด้วยกัน เช่น ใช้ id=”primary_column” แทน id=”left_column” เพราะ left_column เป็นการตั้งชื่อตามการวางรูปหน้า ในขณะที่ primary_column เป็นการตั้งชื่อตามความหมาย

CSS Layout แบ่งได้เป็นสามประเภทหลักๆได้แก่

Fixed Layout

คือการใช้หน่วยที่ยืดหยุ่นไม่ได้เช่น pixel ในการกำหนดค่าต่างๆทั้งตำแหน่งและความกว้างยาวของ div

  • ข้อดี กำหนดได้ทุกอย่างได้ง่ายดังใจ
  • ข้อเสีย ไม่ได้ใช้พื้นที่ใช้สอยในหน้าจอให้ได้เต็มศักยภาพ
  • ตัวอย่างนี่เป็นตัวอย่างเว็บ msn เมื่อต้นปี 2005 ที่ความละเอียดขนาด 800 x 600





สังเกตุได้ว่าเมื่อปรับความละเอียดเป็น 1024 x 768 แล้วหน้าเว็บจะกว้างขึ้น มีพื้นที่ ที่ไม่ได้ใช้งานอยู่ทางด้านซ้ายของหน้าจอ เพราะรูปแบบหน้าตาของเว็บได้ถูกออกแบบไว้เพื่อหน้าจอขนาด 800 x 600 เป็นหลัก

ในขณะเดียวกัน ถ้าเว็บถูกสร้างเพื่อจอที่มีความละเอียดมากกว่าเป็นหลัก เมื่อเราเปิดหน้าเว็บบนจอที่มีความละเอียดน้อยกว่าจะเกิด horizontal scrollbar ขึ้น ซึ่งจะทำให้การเข้าถึงเนื้อหาในหน้าเว็บเป็นไปได้ยากขึ้น



ปัจจุบันเวปหลายๆเว็บที่ใช้ Fix Layout ได้แก้ปัญหานี้โดยการออกแบบให้พื้นหลังเป็นสีหรือรูปภาพ tile โดยมีเนื้อหาอยู่ตรงกึ่งกลางของหน้าจอ และให้ความกว้างของเนื้อหา มีขนาดไม่เกิน 800 pixel เพื่อที่จะรองรับหน้าจอที่มีความละเอียด 800×600 ให้เปิดมาเจอเนื้อหาในทันที

ในขณะที่ผู้ใช้หน้าจอความละเอียด 1024×768 หรือมากกว่า เปิดมาเจอเนื้อหาอยู่กึ่งกลางหน้าจอ แทนที่จะเอียงไปทางด้านขวาเหมือนเคยเว็บ msn ณ ปัจจุบัน ที่ความละเอียด 800 x 600



1024 x 768


Liquid Layout

คือการที่รูปหน้าของเว็บยืดหดไปตามขนาดของหน้าต่างของ browser ซึ่งเกิดขึ้นจากการที่เราไม่กำหนดค่า หรือกำหนดค่าเป็นเปอร์เซ็นท์เปรียบเทียบกับขนาดหน้าต่าง browser

  • ข้อดี ได้ใช้พื้นที่ใช้สอยในหน้าจอให้ได้เต็มศักยภาพ และทำให้มีโอกาสที่จะแสดงผลในสิ่งอื่นๆเช่นจอมือถือได้ดีกว่าด้วย
  • ข้อเสีย การจัดการความสัมพันธ์ระหว่างรูปหน้าเว็บ กับสิ่งที่มีค่าถาวรเช่นรูปภาพนั้นทำได้ยาก
  • ตัวอย่าง หน้าแรกของ csszengarden ใช้ Liquid Layout กับคอลัมน์กลางของหน้า โดยการไม่กำหนดความกว้างยืดได้





หดได้



ซึ่งจุดประสงค์ของการที่ csszengarden ได้กำหนดให้เฉพาะคอลัมน์กลางเป็น Liquid Layout แล้วให้ส่วนที่เหลือเป็น Fix Layout นั้น คาดว่าเพราะต้องการให้รูปหน้าเว็บ แสดงผลออกมาให้ได้คล้ายคลึงกัน บนหน้าจอที่มีความละเอียดต่างกัน

Elastic Layout

มีการใช้หน่วยที่ยืดหยุ่นได้เช่น em หรือ เปอร์เซ็นท์ ในการกำหนดค่าต่างๆ ทำให้รูปหน้าของเว็บยืดหดตามขนาดตัวหนังสือและขนาดหน้าต่างของ browser

  • ข้อดี ช่วยให้มีผู้เข้าถึงเนื้อหาของเว็บได้มากขึ้น ผู้ที่มีปัญหาทางสายตาสามารถขยายขนาดตัวหนังสือให้ใหญ่ขึ้นได้ ในขณะที่คงโครงหน้าของเวปไว้
  • ข้อเสีย สร้างได้ยาก และเสียเวลามากกว่าวิธีอื่นๆ
  • ตัวอย่าง http://www.htmldog.com/ ใช้ Elastic Layout โดยการใช้หน่วย em ในการกำหนดค่าต่างๆ htmldog ที่ความละเอียด 1024×768 Text Size=Medium





htmldog ที่ความละเอียด 1024×768 Text Size=Small



htmldog ที่ความละเอียด 1024×768 Text Size=Large



htmldog ที่ความกว้างยาวของหน้าต่าง browser = 852×556 Text Size=Small



htmldog ที่ความกว้างยาวของหน้าต่าง browser = 567×554 Text Size=Large



จะสังเกตุได้ว่าเราสามารถย่อปรับเปลี่ยนขนาดหน้าต่างของ browser ได้โดยยังคงรูปแบบหน้าตาของหน้าเว็บไว้ และในขณะเดียวกันก็สามารถย่อขยายขนาดตัวหนังสือได้ด้วย ค่า Text Size ซึ่งจะเป็นตัวกำหนดว่า เราจะสามารถย่อขนาดหน้าต่างของ browser ได้มากขนาดไหนก่อนที่รูปหน้าของเว็บจะเปลี่ยนไป จากตัวอย่างข้างต้นจะเห็นได้ว่า เราสามารถย่อขนาดหน้าต่างของ browser ได้มากกว่าถ้าเราเลือกค่า Text Size = Small

ตัวอย่างการวางกล่องต่างๆในแบบ Elastic Layout

สองคอลัมน์

การวางกล่องโดยใช้ position

HTML

<div id=”navigation1″> </div>
<div id=”content”> </div>

CSS

#navigation1{ position: absolute; left:0; width: 5em; }
#content{ margin-left: 5em; }

จากโค้ดข้างบนเราได้กำหนดขนาดของกล่องที่จะใส่เมนูให้มีความกว้าง 5 em แล้ววางไว้ชิดข้างซ้ายของหน้าจอ แล้ววางกล่องเนื้อหาไว้ข้างๆโดยการให้ marginซ้ายของกล่องเนื้อหามีขนาดความยาวเท่ากับกล่องเมนู ในกรณีนี้กล่องเนื้อหาจะมีขนาดเท่ากับส่วนที่เหลือของจอเพราะเราไม่ได้กำหนดความกว้างยาวไว้

การวางกล่องโดยใช้ float

HTML

<div id=”content”> </div>
<div id=”navigation1″> </div>

CSS

#content{ float:right; }
#navigation1{ left:0; width: 5em; }

จากโค้ดข้างบนเราได้กำหนดให้ขนาดของกล่องที่จะใส่เมนูอยู่ทางด้านซ้ายของหน้าจอโดยการกำหนด left:0; แล้วกำหนดให้กล่องเนื้อหา float ไปทางขวา

สามคอลัมน์

HTML

<div id=”content”> </div>
<div id=”navigation1″> </div>


เราจะกำหนดให้กล่องไปอยู่ในตำแหน่งด้านซ้ายและขวาได้โดยการ absolute positioning ซ้ายและขวาดังต่อไปนี้

CSS

#navigation1{ position: absolute; left:0; width: 5em; }
#navigation2{ position: absolute; right:0; width: 10em; }

จากนั้นเราก็กำหนดค่า margin ซ้ายขวา ของ content ให้มีขนาด ตามความยาวของกล่องทางด้านซ้าย และขวา เพื่อให้กล่องเนื้อหาของเรา แทรกไปอยู่ตำแหน่งกลาง โดยกินพื้นที่ตรงกลางทั้งหมด

#content{ margin-left:5em; margin-right:10em; }

จากหลักการตัวอย่างเบื้องต้นนี้เราสามารถสร้างรูปหน้าเวปได้หลายแบบโดยการโยกย้ายตำแหน่งของกล่องต่างๆ left right และการกำหนดค่า margin

การใส่ header

จากหลักการข้างต้นที่ว่าเราสามารถสร้างรูปหน้าเว็บได้หลายแบบโดยการโยกย้ายตำแหน่งของกล่องต่างๆ left right และการกำหนดค่า margin เราจะสามารถเพิ่ม header ได้ด้วยการกำหนดค่าตำแหน่ง top ให้มีความสูงเท่ากับความสูงของ header

HTML

<div id=”header”> </div>
<div id=”content”> </div>
<div id=”navigation1″> </div>

CSS

#navigation1{ position: abosolute; left:0; top:4em; width: 5em; }

การใส่ footer

HTML

<div id=”header”> </div>
<div id=”content”> </div>
<div id=”navigation1″> </div>
<div id=”footer”> </div>



จากการที่ footer เป็นส่วนล่างสุดของหน้า โดยอยู่ใต้คอลัมน์อื่นๆทั้งหมด เราจะไม่ใช้วิธีกำหนด position แต่ใช้หลักการ clear เพื่อหลีกเลี่ยงปัญหาว่าคอลัมน์ใดจะยาวกว่ากัน

CSS

#footer{ clear:both; }

ทั้งนี้ทั้งนั้นเราสามารถเลือกได้ว่าเราจะให้ footer อยู่ใต้คอลัมน์ใดบ้างตามแต่แบบที่เราออกไว้ไม่จำเป็นจะต้องใช้ clear:both โดยให้ footer อยู่ใต้ทุกคอลัมน์เสมอไป

Related Articles

  • Share/Bookmark
Categories: เริ่มต้นกับ CSS
Tags:

About the author

จบการศึกษาโดยตรงทางด้านไอทีจาก SIIT, TU และปริญญาโทที่มหาวิทยลัย Monash กรุงเมลเบรินประเทศออสเตรเลีย ปัจจุบันเป็นเจ้าของธุรกิจรับทำเว็บไซด์และเว็บแอ๊บพลิเคชั่น http://www.melbournebusinessonline.com.au ซึ่งเน้นการพัฒนาเว็บไซด์อย่างถูกต้องตามมาตรฐาน เพื่อธุรกิจ SME โดยใช้ระบบ CMS พร้อมด้วย organic SEO ความสามารถ: xhtml, css, eclips, opencms, redmine ปัจจุบันสนใจการสร้างโมเดลสามมิติ

Website : http://www.melbournebusinessonline.com.au

Facebook : http://www.facebook.com/pattarawan

Twiter :


  1. August 15th, 2007 at 23:08 | #1

    ต้องขอขอบคุณ คุณ ขวัญใจ มา ณ. โอกาสนี้ครับ ที่เขียนบทความดีๆ มาแบ่งปันให้เพื่อนๆได้อ่าน elastic layout น่าสนใจมากครับ แล้วว่างๆจะลองดูมั่งครับ :)

  2. August 16th, 2007 at 10:42 | #2

    ^-^ ต้องขอบคุณที่มีบทความดี ๆ ให้อ่านนะค่ะ :)>-

  3. sangsood7
    September 3rd, 2007 at 15:46 | #3

    ขอบคุณมากครับสำหรับเนื้อหาดี

  4. November 30th, 2007 at 22:50 | #4

    สวัสดีครับ ผมตามเข้ามาอ่านจากเว็บคุณเดย์ครับ หาอ่านมานานแล้วครับ Css ภาษาไทย อ่านอยู่ที่ sitepoint.com ตอลด ขอบคุณสำหรับบทความดีๆแบบนี้ครับ:d

  5. wat007
    May 17th, 2008 at 18:58 | #5

    เพิ่งเริ่มศึกษา รุ้สึกว่าได้ประโยชน์มมากครับ
    ขอบคุณจากใจ

  6. tom295
    June 24th, 2008 at 11:53 | #6

    มีตัวอย่างที่วาง div ของ navigation ไว้ก่อน content ป่าวครับ เพราะข้อมูลในส่วน content ผมมันเยอะมาก เมนูมันเลยไม่ขึ้น อยากให้ เมนูที่อยู่ใน navigation ขึ้นมาก่อนอะครับ ไครรู้ช่วยหน่อยครับ ขอบคุณล่วงหน้า

  7. BalLaList
    February 28th, 2009 at 22:38 | #7

    ขอบคุณมาก ๆ คร๊าบบบ พอดีกำลังศึกษาได้อะไรเยอะมากคร๊าบบบ

  8. April 27th, 2009 at 01:01 | #8

    เพิ่งเข้ามาเว้บนี้ครั้งแรก
    น่าสนใจมากๆเลยครับ
    php html css กำลังศึกษาอยู่ครับ

  9. June 20th, 2009 at 12:36 | #9

    ขอบคุณสำหรับบทความดี ๆ ครับ
    ขอศึกษาหน่อย:)>-:)>-

  10. December 6th, 2009 at 17:58 | #10

    Thank you for good information

  11. December 6th, 2009 at 17:59 | #11

    ความรู้แบบนี้ชอบจริงๆ

  12. สองจ๋า
    March 29th, 2010 at 01:07 | #12

    ขอบคุณสำหรับความรู้ แต่จะขอแนะนำบางอย่าง

    ผมเป็นคนนึงที่เพิ่งหัดเขียน css ไม่รู้หรอกน่ะ ทำอย่างไรถึงจะได้ผลลัทธ์ตามรูป
    แต่ผมเอา code ของคุณไม่รันแล้วมันไม่ออกตามรูป
    เลยอยากแนะนำไปว่า เวลาจะแบ่งความรู้ควรจะเอา code จริงๆ ที่คุณทำได้ผลลัทธ์ดังรูป

  1. No trackbacks yet.