GCSS CSS frame work.

Top Menu & Side Menu

GCSS สนับสนุนทั้งเมนูหลัก (Top Menu) และเมนูข้าง (Side Menu) ในแบบ Responsive และยังสนับสนุนเมนูที่มีเมนูย่อย (Sub Menu) ถึงสองชั้นด้วย ตามเมนูตัวอย่างในหน้าเว็บนี้

ในเบื้องต้น GCSS สนับสนุนรูปแบบเมนูเฉพาะเมนูระดับบนสุดเท่านั้นนะครับ โดยมีรูปแบบเริ่มต้นตามตัวอย่างนี้ ซึ่งหากมีการใช้งานเมนูย่อยคุณจำเป็นต้องกำหนดรูปแบบเพิ่มเติมครับ

<nav class="topmenu [responsive] [fullwidth|left|center|right]"> <label class=toggle-menu for=toggle-menu><span></span><span></span><span></span></label> <input type=checkbox id=toggle-menu class=toggle-menu> <ul> <li><a href=index.html><span>Home</span></a></li> <li><a class=menu-arrow href=layout.html><span>Layout</span></a> <ul> <li><a href=onecolumn.html><span>One Column</span></a></li> <li><a class=menu-arrow><span>Two Columns</span></a> <ul> <li><a href=leftsidebar.html><span>Left Sidebar</span></a></li> ..... </ul> </li> <li><a class=menu-arrow><span>Three Columns</span></a> <ul> <li><a href=3columns.html><span>แบบที่ 1</span></a></li> ..... <li class=select><a href=menus.html><span>Menus</span></a></li> ..... </ul> </li> <li><a href=rtl.html><span>Rtl Support</span></a></li> </ul> </li> ..... </ul> </nav>

ด้านบนคือโค้ดสำหรับเมนูหลัก ส่วนด้านล่างคือโค้ดสำหรับเมนูข้าง ซึ่งตัวอย่างแบบเต็มๆของทั้งสองอันนี้สามารถ View Source หน้านี้ดูได้ครับ

<nav class="sidemenu [responsive] [left|right]"> <ul> <li><a href=https://demo.gcms.in.th><span>เว็บตัวอย่างที่ใช้ GCSS</span></a></li> <li><a class=menu-arrow><span>ผู้สนับสนุน</span></a> <ul> <li><a href=https://www.goragod.com><span>Goragod.com</span></a></li> <li><a href=https://gcms.in.th><span>GCMS Ajax CMS</span></a></li> </ul> </li> </ul> </nav>

ทั้งเมนูหลักและเมนูข้างมีรูปแบบเหมือนกันทุกประการครับ มีแตกต่างกันแค่ ถ้าเป็นเมนูหลัก เราจะใส่คลาส topmenu ให้ nav แต่ถ้าเป็นเมนูข้างเราจะใส่คลาส sidemenu ให้ nav แทน

  • .responsive ใช้ระบุร่วมกันใน nav เพื่อกำหนดให้เมนูนี้เป็นแบบ Responsive
  • .left .center และ .right ใช้ระบุร่วมกันใน nav เพื่อจัดตำแน่งเมนูสำหรับเมนูหลัก และใช้กำหนดตำแหน่งข้อความใน เมนูข้างและเมนูย่อย
  • .fullwidth ใช้ระบุร่วมกันใน nav เพื่อกำหนดให้เมนูหลักแสดงผลแบบเต็มความกว้างของกรอบ
  • .menu-arrow ใช้ระบุร่วมกันกับ tag a เพื่อบอกว่าเมนูลำดับนี้มีเมนูย่อย ซึ่งจะทำให้เมนูแสดงลูกศร
  • สำหรับโค้ดในส่วนของตัวอักษรตัวเอียงสีเขียว เป็นส่วนเพิ่มเติมของเมนูหลักที่ต้องใส่หากกำหนดให้เมนูเป็นแบบ Responsive เนื่องจากมันเป็นส่วนของปุ่มกดสำหรับ Responsive Menu (ไม่ต้องใส่โค้ดส่วนนี้ หากใช้งานร่วมกับ GDDMenu)
  • จุดเปลี่ยนเมนูสำหรับเมนูหลัก (แสดงบนอุปกรณ์ mobile) คือที่ขนาดหน้าจอ 960 พิกเซล และสำหรับเมนูข้างคือที่ขนาดหน้าจอ 768 พิกเซล
/* เมนูหลัก */ .topmenu { display: inline-block; vertical-align: middle; line-height: 2em; } .topmenu > ul ul { /* สีพื้นและเงาของ เมนูย่อย */ box-shadow: 0 0 3px rgba(0,0,0,0.1); background-color: #FFF; } .topmenu > ul > li > a { /* สีตัวอักษรของเมนูหลักระดับบนสุด */ color: #FFF; } @media only screen and (max-width: 960px) { /* เมื่อเมนูหลักถูกแสดงบนอุปกรณ์ mobile */ .topmenu > ul, .topmenu > ul ul { /* สีพื้นและสีตัวอักษร เมื่อเมนูถูกแสดงบนอุปกรณ์ mobile */ background-color: rgba(0,0,0,0.7); color: #FFF; } } /* เมนูข้าง */ .sidemenu { /* สีพื้นของเมนูข้าง */ background-color: #F9F9F9 } .sidemenu li { /* เส้นคั่นเมนูข้าง */ border-bottom: 1px solid #EEE; border-top: 1px solid #FFF; } .sidemenu h1 { padding: 5px 10px 0; } .sidemenu > ul ul { /* สีพื้นและเงาของ เมนูย่อย */ box-shadow: 0 0 3px rgba(0,0,0,0.1); background-color: #FFF; } @media only screen and (max-width: 768px) { /* เมื่อเมนูข้างถูกแสดงบนอุปกรณ์ mobile */ .sidemenu > ul ul > li:last-child { /* ลบเส้นคั่นด้านล่างสำหรับเมนูย่อยรายการล่างสุด */ border-bottom: none; } }

โค้ดด้านบนเป็นตัวอย่างการกำหนด CSS เบื้องต้นให้กับเมนูตามที่ผมใช้งานในหน้านี้ครับ

สำหรับการแสดงเมนูหลักแบบ .center ควรกำหนดความกว้างของเมนู (ที่คลาส .topmenu) ด้วยเนื่องจากบน IE ตั้งแต่ 8 ลงมาจะไม่แสดงคำสั่งนี้หากไม่มีการกำหนดขนาดของเมนู