Ang Simple, Responsive na Mobile First Navigation
Tagalog (Wikang Tagalog) translation by Anna Nelson (you can also view the original English article)
Gagawa tayo ng simple, responsive na web site navigation. Ang ating solusyon ay makakatulong para mabigyan ng diin ang content ng iyong pahina, na maaaring pangunahing prayoridad sa pagdidisenyo para sa mobile. Walang JavaScript na kasama, at tatalakayin natin ito mula sa Mobile First na paraan.
Pag Navigate ng Mobile
Kung nabasa mo ang Luke Wroblewski’s Mobile First magiging pamilyar ka sa sinabi niya na:
Bilang pangkahalahatang panuntunan, ang content ay mas importante kaysa sa pag navigate sa mobile.
Ang ibig niyang sabihin dito ay ang mobile users ay madalas naghahanap ng mabilis na sagot; gusto nila yung content ng hinahanap nila, hindi ang iba pang pagpipilian sa navigation.
Maraming sites, mga responsive, ay naniniwala sa dati ng kaalaman na ang navigation ay dapat nasa itaas ng kahit na anong pahina. Ang paraan na ito ay maaaring maging sanhi ng problema sa gamit nito sa mobile devices dahil ang mobile users ay madalas kulang sa dalawang bagay: espasyo sa screen at time. Kapag ang pangunahing navigation ay nilagay sa itaas ng pahina, may magandang posibilidad na palabuin nito ang buong mobile screen. Ang isyung ito ay mas pinapalala ng malaking touch-friendly menu links, kung kaya napipilitan ang users na tumingin pa higit sa navigation para makakuha ng mahalagang content.
Tingnan ang halimbawang ito mula sa London & Partners:

Perpekto at desenteng responsive na disenyo, subalit sa normal na mobile viewport na sukat (320px x 480px) lahat ng makikita mo ay navigation menu. Sigurado, pagdating palang sa homepage, gusto kong makakita ng iba pa maliban diyan? Hindi lamang ang London & Partners ang nagpakita nito- ito ay nakasanayan na na makikita sa maraming responsive na disenyo sa lahat ng web.
Kung Kaya Ano Ang Mga Solusyon?
Nakita na natin ang ilang paraan para masimulang gawin ito, madalas nakadepende sa jQuery para ayusin ito para sa atin. Kumuha ng paliwanag kay Chris Coyier sa Five Simple Steps responsive dropdown menu.



Malaking screen, maliit na screen.
Gamit ang jQuery, nangyayari ang
pagkakapareho ng menu sa form ng a <select>
dropdown, na sa una ay nakatago gamit ang
CSS. Kapag ang media queries ay may nakitang
maliit na screen, ipapakita nila ang dropdown at ang orihinal na navigation. Ito ay tamang-tama para sa mobile
devices dahil ang dropdowns ay tumatanggap ng maliit lamang na real estate at ginagamit
ang particular na UI ng device (katulad ng pang-scroll ng iPhone).
Bilang kahalili, maaari mong ring itago ang iyong navigation, subalit ilipat ito sa vien kapag pinindot ang ‘menu’ button. Makikita mo itong gumagana sa bagong Bootstrap ng Twitter.



Ang maliit na screen ay tinatago ang navigation links at ipinapakita ang ‘list’ icon (na mabilis na na tinatanggap na ibig sabihin ‘menu’) kung saan ipinapakita ang navigation kapag pinindot. Muli, ang mobile visitors ay hinahainanng hanggat maaari ng maraming content, subalit may pagpipilian sa navigation kungsakaling gusto nila ito.



Buong CSS Solution
Gagamit tayo ng pamamaraan na tinalakay ni Luke, kung saan gumagamit ng CSS at Mobile First na paraan. Anong ibig sabihin natin ng Mobile First na paraan? Simple lang, gagawa tayo ng disenyo ng straight-forward na mobile layout, pagkatapos ay unti-unting pagagandahin ang disenyo para sa malaking screens. Gagamit tayo ng media queries na nakikita ang tuluy-tuloy na paglaki ng sukat ng screen, na nakakadagdag sa istilo at features habang nagpapatuloy tayo.
Ibig sabihin taglay lang nito ang maliit na CSS at resources na ilo-load kapag ang ating disenyo ay tiningnan sa mobile device. Ibig sabihin din nito na ang lumang bersyon ng IE (kung saan hindi kinikilala ang media queries) ay ipapakita gamit ang mobile site. Tingnan ang Leaving Old Internet Explorer Behind ni Joni Korpi para sa karagdagang impormasyon tungkol dito.
1. Markup
Ipapaliwanag ko ang mga ideya sa likod ng solusyon na ito habang umuusad tayo, pero sa ngayon sama-sama nating isantabi ang ilang markup, bilang simula sa malinis na HTML5 na dokumento.
1 |
<html lang="en"> |
2 |
<head>
|
3 |
|
4 |
<meta charset="utf-8"> |
5 |
<title>Mobile First Responsive Navigation</title> |
6 |
<meta name="description" content="CSS only mobile first navigation"> |
7 |
<meta name="author" content="Ian Yates"> |
8 |
|
9 |
<!--Mobile specific meta goodness :)-->
|
10 |
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> |
11 |
|
12 |
<!--css-->
|
13 |
<link rel="stylesheet" href="styles.css"> |
14 |
|
15 |
<!--[if lt IE 9]>
|
16 |
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
17 |
<![endif]-->
|
18 |
|
19 |
<!-- Favicons-->
|
20 |
<link rel="shortcut icon" href="img/favicon.ico"> |
21 |
|
22 |
</head>
|
23 |
<body id="home"> |
24 |
|
25 |
|
26 |
</body>
|
27 |
</html>
|
Paalala: Huwag Kalimutan Ang Viewport Meta Tag!
Pagkatapos magawa ito, magdadagdag tayo ng ilang balangkas sa pahina. Walang paliguy-ligoy na bagay at iba pa para sa layunin ng pagpapaliwanag. Gumamit ako ng filler text mula sa Monty Python's Holy Grail (salamat Chris Valleskey) na isang magandang paraan para mapasaya ka habang nagtatrabaho :)
1 |
<body id="home"> |
2 |
|
3 |
<div class="wrapper"> |
4 |
|
5 |
<header>
|
6 |
|
7 |
<h1 class="logo"><a href="">Nav</a></h1> |
8 |
|
9 |
</header>
|
10 |
|
11 |
<article>
|
12 |
|
13 |
<h2>Blue. No, yel…</h2> |
14 |
|
15 |
<p>Shut up! Will you shut up?! But you are dressed as one… Camelot! You don't vote for kings.</p> |
16 |
|
17 |
</article>
|
18 |
|
19 |
<article>
|
20 |
|
21 |
<h2>We want a shrubbery!!</h2> |
22 |
|
23 |
<p>Look, my liege! Shut up! But you are dressed as one…</p> |
24 |
|
25 |
<ul>
|
26 |
<li>The nose?</li> |
27 |
<li>Shh! Knights, I bid you welcome to your new home. Let us ride to Camelot!</li> |
28 |
<li>Look, my liege!</li> |
29 |
</ul>
|
30 |
|
31 |
</article>
|
32 |
|
33 |
<article>
|
34 |
|
35 |
<h2>Help, help, I'm being repressed!</h2> |
36 |
|
37 |
<p>Why? Listen. Strange women lying in ponds distributing swords is no basis for a system of government. Supreme executive power derives from a mandate from the masses, not from some farcical aquatic ceremony. Be quiet! A newt?</p> |
38 |
|
39 |
</article>
|
40 |
|
41 |
<footer>
|
42 |
|
43 |
<p>Copyright ©2012 Ian Yates <a href="http://webdesign.tutsplus.com">Webdesigntuts+</a></p> |
44 |
|
45 |
</footer>
|
46 |
|
47 |
</div><!--end wrapper--> |
48 |
|
49 |
</body>
|
2. Navigation Markup
Gumawa kami ng pangunahing pahina ng html, ngayon ay oras na para sa pinakamahalagang paksa; ang pangunahing navigation.
1 |
|
2 |
<nav id="primary_nav"> |
3 |
|
4 |
<ul>
|
5 |
|
6 |
<li><a href="">Portfolio</a></li> |
7 |
|
8 |
<li><a href="">About Me</a></li> |
9 |
|
10 |
<li><a href="">Nonsense</a></li> |
11 |
|
12 |
<li><a href="">Services</a></li> |
13 |
|
14 |
<li><a href="">Contact</a></li> |
15 |
|
16 |
<li><a href="#home">Top</a></li> |
17 |
|
18 |
</ul>
|
19 |
|
20 |
</nav><!--end primary_nav--> |
Oo, nakita mo ito ng tama, dinagdag natin ito sa linya ng 68, pagkatapos ng huling artikulo. Huwag kalimutan na nagdi-disenyo tayo ngayon para sa mobile, tatalakayin natin ang desktop mamaya. Inilagay natin ang navigation sa ibaba ng ating pahina para tapos na ito. Ilalagay na natin ngayon ang link sa itaas ng ating pahina para makita ng users ang navigation kung gusto nila.
1 |
|
2 |
<header>
|
3 |
|
4 |
<h1 class="logo"><a href="">Nav</a></h1> |
5 |
|
6 |
<a class="to_nav" href="#primary_nav">Menu</a> |
7 |
|
8 |
</header>
|
3. CSS Reset
Depende sa kung paano mo karaniwang sinisimulan ang proyekto sa web, ang hakbang na ito ay maaaring iba sa iyong dating workflow. Palagi kong naiisip ang Eric Meyer's reset na matibay na basehan sa unang gagawin, lalo na at inayos niya ito kamakailan. Idadagdag natin ang panuntunan sa reset sa style sheet para masimulan natin ang css:
1 |
/* http://meyerweb.com/eric/tools/css/reset/
|
2 |
v2.0b1 | 201101
|
3 |
NOTE: WORK IN PROGRESS
|
4 |
USE WITH CAUTION AND TEST WITH ABANDON */
|
5 |
|
6 |
html, body, div, span, applet, object, iframe, |
7 |
h1, h2, h3, h4, h5, h6, p, blockquote, pre, |
8 |
a, abbr, acronym, address, big, cite, code, |
9 |
del, dfn, em, img, ins, kbd, q, s, samp, |
10 |
small, strike, strong, sub, sup, tt, var, |
11 |
b, u, i, center, |
12 |
dl, dt, dd, ol, ul, li, |
13 |
fieldset, form, label, legend, |
14 |
table, caption, tbody, tfoot, thead, tr, th, td, |
15 |
article, aside, canvas, details, figcaption, figure, |
16 |
footer, header, hgroup, menu, nav, section, summary, |
17 |
time, mark, audio, video { |
18 |
margin: 0; |
19 |
padding: 0; |
20 |
border: 0; |
21 |
outline: 0; |
22 |
font-size: 100%; |
23 |
font: inherit; |
24 |
vertical-align: baseline; |
25 |
}
|
26 |
/* HTML5 display-role reset for older browsers */
|
27 |
article, aside, details, figcaption, figure, |
28 |
footer, header, hgroup, menu, nav, section { |
29 |
display: block; |
30 |
}
|
31 |
body { |
32 |
line-height: 1; |
33 |
}
|
34 |
ol, ul { |
35 |
list-style: none; |
36 |
}
|
37 |
blockquote, q { |
38 |
quotes: none; |
39 |
}
|
40 |
blockquote:before, blockquote:after, |
41 |
q:before, q:after { |
42 |
content: ''; |
43 |
content: none; |
44 |
}
|
45 |
|
46 |
/* remember to highlight inserts somehow! */
|
47 |
ins { |
48 |
text-decoration: none; |
49 |
}
|
50 |
del { |
51 |
text-decoration: line-through; |
52 |
}
|
53 |
|
54 |
table { |
55 |
border-collapse: collapse; |
56 |
border-spacing: 0; |
57 |
}
|
4. Pangunahing Istilo
Sa ngayon ang ating pahina ay mukhang walang buhay..



..kung kaya pagandahin natin ito sa pamamagitan ng paglagay ng ilang simpleng istilo.
1 |
/*begin our styles*/
|
2 |
|
3 |
body { |
4 |
font: 16px/1.4em 'PT Sans', sans-serif;; |
5 |
color: #1c1c1c; |
6 |
}
|
7 |
|
8 |
p, |
9 |
ul { |
10 |
margin: 0 0 1.5em; |
11 |
}
|
12 |
|
13 |
ul { |
14 |
list-style: disc; |
15 |
padding: 0 0 0 20px; |
16 |
}
|
17 |
|
18 |
a { |
19 |
color: #1D745A; |
20 |
}
|
21 |
|
22 |
h1 { |
23 |
|
24 |
}
|
25 |
|
26 |
h2 { |
27 |
font-family: 'PT Serif', serif; |
28 |
font-size: 32px; |
29 |
line-height: 1.4em; |
30 |
margin: 0 0 .4em; |
31 |
font-weight: bold; |
32 |
}
|
33 |
|
34 |
/*layout*/
|
35 |
|
36 |
.wrapper { |
37 |
}
|
38 |
|
39 |
article { |
40 |
border-bottom: 1px solid #d8d8d8; |
41 |
padding: 10px 20px 0 20px; |
42 |
margin: 10px 0; |
43 |
}
|
44 |
|
45 |
/*header*/
|
46 |
|
47 |
header { |
48 |
background: #1c1c1c; |
49 |
padding: 15px 20px; |
50 |
}
|
51 |
|
52 |
/*shorter clearfix http://nicolasgallagher.com/micro-clearfix-hack/*/
|
53 |
header:before, |
54 |
header:after { |
55 |
content:""; |
56 |
display:table; |
57 |
}
|
58 |
|
59 |
header:after { |
60 |
clear:both; |
61 |
}
|
62 |
|
63 |
/* For IE 6/7 (trigger hasLayout) */
|
64 |
header { |
65 |
zoom:1; |
66 |
}
|
67 |
|
68 |
h1.logo a { |
69 |
color: #d8d8d8; |
70 |
text-decoration: none; |
71 |
font-weight: bold; |
72 |
text-transform: uppercase; |
73 |
font-size: 20px; |
74 |
line-height: 22px; |
75 |
float: left; |
76 |
letter-spacing: 0.2em; |
77 |
}
|
78 |
|
79 |
a.to_nav { |
80 |
float: right; |
81 |
color: #fff; |
82 |
background: #4e4e4e; |
83 |
text-decoration: none; |
84 |
padding: 0 10px; |
85 |
font-size: 12px; |
86 |
font-weight: bold; |
87 |
line-height: 22px; |
88 |
height: 22px; |
89 |
text-transform: uppercase; |
90 |
letter-spacing: 0.1em; |
91 |
-webkit-border-radius: 2px; |
92 |
-moz-border-radius: 2px; |
93 |
border-radius: 2px; |
94 |
}
|
95 |
|
96 |
a.to_nav:hover, |
97 |
a.to_nav:focus { |
98 |
color: #1c1c1c; |
99 |
background: #ccc; |
100 |
}
|
Ang mga ito ay pangunahing bagay (fonts,
line-heights, kulay at iba pa.), ang mahalaga sa ngayon ay nilagyan ko ng
istilo ang ‘menu’ button para lumutang sa kanan sa loob ng <header>
, kung
saan inaasahan mong doon makikita ang navigation.



Kapag iho-hover mo ito, makikita mo ang
hover state- hindi naman siyempre ibig sabihin para sa touch screen devices,
subalit ang karanasang ito ay ipapadala rin sa hindi nakikipagtulungan na
bersyon ng Internet Explorer. Ang natukoy nating pakinabang ng mobile users
ay :focus
state Katulad din ito ng :hover
state, subalit
mag aalok ng mahalagang feedback sa touch-screen devices. Ang mga users ay malalaman na naging matagumpay
sila sa pag galaw ng menu button.
Gayunpaman, pindutin ito at mapupunta ka sa navigation, sobra.



Ngayon lagyan natin ng kaunting istilo ang menu.
5. Istilo ng Navigation
Sa totoo lang lalagyan natin ng istilo ang pangunahing navigation katulad ng halimbawa ng London & Partners na ipinakita kanina, maliban lang sa ngayon ay malinaw na ito ay nasa ibaba ng pahina.
1 |
/*navigation*/
|
2 |
|
3 |
#primary_nav ul { |
4 |
list-style: none; |
5 |
background: #1c1c1c; |
6 |
padding: 5px 0; |
7 |
}
|
8 |
|
9 |
#primary_nav li a { |
10 |
display: block; |
11 |
padding: 0 20px; |
12 |
color: #fff; |
13 |
text-decoration: none; |
14 |
font-weight: bold; |
15 |
text-transform: uppercase; |
16 |
letter-spacing: 0.1em; |
17 |
letter-spacing: 0.1em; |
18 |
line-height: 2em; |
19 |
height: 2em; |
20 |
border-bottom: 1px solid #383838; |
21 |
}
|
22 |
|
23 |
#primary_nav li:last-child a { |
24 |
border-bottom: none; |
25 |
}
|
26 |
|
27 |
#primary_nav li a:hover, |
28 |
#primary_nav li a:focus { |
29 |
color: #1c1c1c; |
30 |
background: #ccc; |
31 |
}
|
32 |
|
33 |
/*footer*/
|
34 |
|
35 |
footer { |
36 |
font-family: 'PT Serif', serif; |
37 |
font-style: italic; |
38 |
text-align: center; |
39 |
font-size: 14px; |
40 |
}
|
Mas
maganda. Ginawa nating maganda ang menu links at
malaki ( basahin pa ng maigi ang tungkol sa Touch Target Sizes sa sariling blog
ni Luke Wroblewski) at muli natukoy na :focus
state para sa feedback ng user.



Naging malinaw din na isinama natin ang ‘top’ link kung saan dadalhin ang users pabalik sa itaas ng pahina kung kinakailangan.
6. Lumalaki
OK, nagawa na natin ang simpleng mobile layout, ngayon naman ang oras para sa ilang progressive enhancement. Gagamit tayo ng media queries para matukoy kung hindi na angkop ang ating mobile layout.
Subalit saang punto hindi na ito angkop? Maraming paraan para gawin ang media queries, subalit gagawin natin mula sa batayan na ang mobile viewport ay 320px x 480px. Ito ay may lawak na 320px kapag tiningnan sa portrait, may lawak na 480px kapag tiningnan sa landscape, kung kaya makatarungan nating maisi-set ang ating unang media query para makita ang anumang screen na mas malaki sa 480px.
Gayunpaman, ang susunod na hakbang ay maaaring ang tablet. Ang iPad ay may resolution na 980px x 768px, kung kaya maaari nating ipalagay na anumang mas maliit sa 768px ay hindi naaangkop sa ating mobile layout. Maaaring kaya ng ala-desktop na navigation layouts ang anumang mas malaki sa 768px.
Kung kaya maaari na nating simulang lagyan ng panuntunan, kaya mag set-up tayo ng media query:
1 |
/*media queries*/
|
2 |
|
3 |
@media only screen and (min-width: 768px) { |
4 |
|
5 |
}
|
Ang media query ay papaganahin lahat ng istilo na nakapaloob dito kapag ang viewport ay hindi bababa sa lawak ng 768px. Tandaan na kasama ang natatanging keyword, kung saan sinisigurado nito na ang Internet Explorer 8 ay hindi malilito at subukang gawin ang query. Tingnan ang nauna kong paliwanag para sa detalye.
Magsimula tayo sa pamamagitan ng pagtanggal ng ‘menu’ button:
1 |
|
2 |
@media only screen and (min-width: 768px) { |
3 |
|
4 |
a.to_nav { |
5 |
display: none; |
6 |
}
|
7 |
|
8 |
}
|



Dahil sa browser na bahagyang malawak, ang menu button ay hindi na makikita.
7. Paglipat ng Navigation
Ngayon kailangan nating dalhin ang pangunahing navigation sa taas ng pahina. Gagawin natin ito sa pamamagitan ng pagtanggal nito mula sa document flow, at siguradong ilagay ito sa itaas.
1 |
|
2 |
@media only screen and (min-width: 768px) { |
3 |
|
4 |
a.to_nav { |
5 |
display: none; |
6 |
}
|
7 |
|
8 |
.wrapper { |
9 |
position: relative; |
10 |
width: 768px; |
11 |
margin: auto; |
12 |
}
|
13 |
|
14 |
#primary_nav { |
15 |
position: absolute; |
16 |
top: 5px; |
17 |
right: 10px; |
18 |
background: none; |
19 |
}
|
20 |
|
21 |
#primary_nav li { |
22 |
display: inline; |
23 |
}
|
24 |
|
25 |
#primary_nav li a { |
26 |
float: left; |
27 |
border: none; |
28 |
padding: 0 10px; |
29 |
-webkit-border-radius: 2px; |
30 |
-moz-border-radius: 2px; |
31 |
border-radius: 2px; |
32 |
}
|
33 |
|
34 |
}
|
Para magawa ito gawin muna natin ang
parent (.wrapper
) na sadyang nakaposisyon. Maari natin itong gawin dito sa media
query, o tukuyin ito sa simula ng ating stylesheet.
Kapag ang menu ay saktong naiposisyon, kailangan nating tanggalin ang ilang achor styling. Wala ng marami pang gagawin, subalit kailangan natin ang list items para ipakita ng inline, at kailangan nating tanggalin ang borders at sobrang padding mula sa anchors. Ang hover states na sinabi natin kanina ay ayos lang, kung kaya hindi nating kailangang baguhin iyon.



8. Isa Pang Panghuling Bagay
Kung tinandaan mo mapapansin mo na mayroon pa ring ‘top’ link sa navigation - hindi na natin ito kailangan?
Maaari nating tanggalin ito sa maraming paraan, subalit para sigurado tayo sa nangyayari maglagay tayo ng class sa list item:
1 |
|
2 |
<li class="top"><a href="#home">Top</a></li> |
At pagkatapos maaari na natin itong alisin sa media query:
1 |
|
2 |
#primary_nav li.top { |
3 |
display: none; |
4 |
}
|



Konklusyon
Ganoon lang! Maraming paraan para mabuo ang ideyang ito (ang pagpapatupad ng list icon ay isa lamang dito) at, siyempre, maaari mong ituloy ang paglagay ng media queries para matugunan ang lumalaking screens. Sana ay may pundasyon ka na para gawin ito. Nakagawa tayo ng simple, responsive, touch-friendly na navigation, mula sa mobile first na paraan habang binibigyang diin ang content at usability. Sino pa ang may hihingiin ng higit pa?!
Karagdagang Resources
Ang ibang kapaki-pakinabang na links na nabanggit sa pagtuturo, ay lahat nakalagay sa isang maayos na listahan:
- Luke Wroblewski's Mobile First
- Ang batay sa jQuery na responsive dropdown menu ni Chris Coyier
- Five Simple Steps
- Twitter Bootstrap
- Joni Korpi's Leaving Old Internet Explorer Behind
- Huwag Kalimutan Ang Viewport Meta Tag!
- Ang Monty Python ni Chris Valleskey (bukod sa iba pang mga bagay) filler text
- Ang reset revisited ni Eric Meyer
- Ang Touch Target Sizes ni Luke Wroblewski
- Ang aking paliwanag sa media query ‘only’ keyword
- Ang responsive navigation patterns ni Brad Frost
- Ang ginawa ni Aaron Gustafson na smart mobile navigation na walang hacks sa .net Magazine
Pagpipilian sa Premium
Maraming unang mobile design templates na makikita sa Envato Market para sa mabilis na gamit sa iyong proyekto.
Halimbawa, una ay ang mobile first web app/ admin dashboard theme na may flat UI batay sa Bootstrap 3. Hindi ito ganoon ka-importante subalit maraming components na angkop sa iyong kailangan. Ito ay sadyang responsive, at ang widgets at components ay mobile first.


