Navigasi yang Mobile First, Responsif, dan Sederhana
Indonesian (Bahasa Indonesia) translation by Hasannudin Amin (you can also view the original English article)
Kita akan membangun navigasi situs web yang sederhana dan responsif. Solusi kami akan membantu kita menekankan konten halaman kita, bisa dibilang prioritas utama saat merancang untuk mobile. Tidak akan ada keterlibatan JavaScript, dan kita akan menyelesaikannya dari pendekatan Mobile First
Navigasi Mobile
Jika Anda sudah membaca Luke Wroblewski terkait Mobile First, Anda akan terbiasa dengan pernyataannya:
Sebagai aturan umum, konten lebih diutamakan daripada navigasi di seluler.
Yang dia maksud dengan hal ini adalah bahwa pengguna ponsel sering mencari jawaban langsung; Mereka menginginkan konten yang mereka cari, bukan lagi pilihan navigasi.
Banyak situs, bahkan yang responsif, berpegang pada konvensi bahwa navigasi berada di bagian atas halaman tertentu. Pendekatan ini dapat menyebabkan masalah kegunaan pada perangkat mobile karena pengguna ponsel seringkali kekurangan dua hal: ruang layar dan waktu. Jika navigasi utama diletakkan di bagian atas halaman, ada kemungkinan besar akan mengaburkan seluruh layar ponsel. Masalah ini diperburuk lebih lanjut oleh tautan menu berukuran besar, yang memaksa pengguna untuk menggulir melampaui navigasi untuk mendapatkan konten yang di inginkan.
Kita ambil contoh ini dari London & Partners:

Desain responsif yang sangat baik, namun pada dimensi viewport seluler standar (320px x 480px) yang benar-benar Anda lihat adalah menu navigasi. Tentunya, setelah baru saja tiba di beranda, saya ingin melihat sesuatu selain itu? Bukan hanya London & Partners yang mendemonstrasikan ini - ini adalah praktik yang terlihat pada banyak desain responsif di seluruh web.
Jadi Apa Solusinya?
Kami telah melihat beberapa cara untuk menyelesaikan ini, kerap kali bersandar pada jQuery untuk menyelesaikan masalah ini. Ambil penjelasan Chris Coyier dari Five Simple Steps tentang menu dropdown responsif.



Layar besar, layar kecil.
Menggunakan jQuery, duplikat menu dibuat dalam bentuk dropdown <select>
, yang awalnya tersembunyi dari pandangan menggunakan CSS. Saat media query mendeteksi layar yang lebih kecil, mereka membuat dropdown terlihat dan navigasi asli tidak terlihat. Ini sangat cocok untuk perangkat seluler karena dropdown menghabiskan
sedikit ruang dan memanfaatkan UI khusus pada perangkat (seperti scroller iPhone).
Atau, Anda mungkin menyembunyikan navigasi Anda, namun akan beralih ke tampilan menu terbuka saat tombol 'menu' diklik. Anda bisa melihat efek ini beraksi dengan Bootstrap terbaru dari Twitter.



Layar yang lebih kecil menyembunyikan link navigasi dan menampilkan ikon 'daftar' (dengan cepat diterima sebagai makna 'menu') yang mengungkapkan navigasi saat diklik. Sekali lagi, pengunjung seluler disajikan dengan konten sebanyak mungkin, namun memiliki pilihan navigasi yang tersedia jika mereka menginginkannya.



Solusi Murni CSS
Kita akan menggunakan teknik yang dibahas oleh Luke, yang menggunakan pendekatan CSS dan Mobile First. Apa yang kita maksud dengan pendekatan Mobile First? Sederhananya, kita akan merancang tata letak yang straight-forward mobile, kemudian semakin meningkatkan desain untuk layar yang lebih besar. Kita akan menggunakan media query yang mendeteksi ukuran layar yang terus meningkat, menambahkan gaya dan fitur saat kondisi tertentu.
Ini berarti hanya memakan CSS secara minimum dan sumber daya yang akan dimuat saat desain kita dilihat dengan perangkat seluler. Ini juga berarti bahwa versi IE yang lebih tua (yang tidak mengenali media query) akan disajikan dengan situs seluler. Silahkan lihat artikel Meninggalkan Internet Explorer Lama Dibelakang oleh Joni Korpi untuk informasi mengenai ini.
1. Markup
Saya akan menjelaskan ide-ide di balik solusi ini nanti, jadi untuk saat ini mari saling melempar beberapa markup, memulai dengan dokumen awal HTML5.
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>
|
Catatan: Jangan Lupakan Meta Tag Viewport!
Setelah melakukan itu, kita akan menambahkan beberapa struktur halaman. Tambahan langsung dan semuanya hanya untuk tujuan demonstrasi kita. Saya telah menggunakan teks pengisi dari Monty Python's Holy Grail (terima kasih Chris Valleskey) yang merupakan cara yang bagus untuk memberi senyum di wajah Anda saat Anda bekerja :)
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. Markup Navigasi
Kita telah mengumpulkan halaman html dasar, jadi sekarang saatnya untuk daya tarik utama; Navigasi utama kita.
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--> |
Ya, Anda telah melihatnya dengan benar, kita telah menambahkannya di baris 68, setelah artikel terakhir. Jangan lupa bahwa kita sedang merancang untuk mobile sekarang, kita akan mengurus desktop nanti. Kita telah menempatkan navigasi di bagian bawah halaman kita, sehingga ini benar-benar menyimpang. Kita sekarang akan menempatkan link di bagian atas halaman kita sehingga pengguna dapat menemukan navigasi jika mereka mau.
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. Reset CSS
Bergantung pada bagaimana Anda biasanya memulai proyek web, langkah ini berbeda dengan alur kerja Anda yang biasa. Saya selalu mendapati penyetelan Eric Meyer menjadi dasar yang kuat untuk dikerjakan, terutama saat dia men-tweaknya baru-baru ini. Kita akan menambahkan aturan reset ke stylesheet untuk menendang css kita:
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. Gaya Dasar
Pada saat ini halaman kita terlihat sangat membosankan..



..jadi mari kita memperbaikinya dengan menambahkan beberapa gaya sederhana.
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 |
}
|
Ini semua adalah hal dasar (font, tinggi garis, warna, dll.), Yang
penting sejauh ini adalah saya telah menata tombol 'menu' untuk melayang di kanan, di bagian dalam <header>
, di mana Anda sering mengharapkan navigasi Bisa ditemukan



Jika Anda mengarahkan kursor ke atasnya, Anda akan melihat status hover -
tidak diperlukan untuk perangkat layar sentuh memang, namun
pengalaman ini juga akan dikirimkan ke versi Internet Explorer yang
tidak kooperatif. Apa yang telah kita definisikan untuk kepentingan pengguna ponsel adalah keadaan :focus
. Ini sama dengan keadaan :hover
, namun akan menawarkan umpan balik penting untuk perangkat layar sentuh. Pengguna kita akan tahu bahwa mereka telah berhasil menyentuh tombol menu.
Bagaimanapun, klik dan Anda akan dibawa ke navigasi, super.



Sekarang mari kita beri sedikit gaya pada menu.
5. Gaya Navigasi
Kita benar-benar akan memilih navigasi utama kita seperti contoh London & Partners yang ditunjukkan sebelumnya, kecuali saat ini jelas di bagian bawah halaman..
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 |
}
|
Jauh lebih baik. Kita telah membuat tautan menu yang bagus dan besar (baca lebih lanjut tentang Ukuran Sasaran Sentuhan pada blog Luke Wroblewski) dan sekali lagi menentukan status :focus
untuk umpan balik pengguna.



Ini juga menjadi jelas bahwa kita menyertakan tautan 'top' yang akan membawa pengguna kembali ke bagian atas halaman jika diperlukan.
6. Menjadi Lebih Besar
Oke, kita telah menangani tata letak seluler sederhana kita, jadi sekarang saatnya untuk beberapa peningkatan progresif. Kita akan menggunakan media query untuk menentukan kapan tata letak seluler kita tidak sesuai lagi.
Tapi pada titik manakah itu menjadi tidak sesuai? Ada banyak cara untuk mendekati permintaan media, tapi kita akan bekerja dari basis bahwa area pandang seluler berukuran 320 piksel x 480 piksel. Luasnya 320px jika dilihat dalam bentuk potrait, lebar 480px jika dilihat dalam bentuk landscape, jadi kita dapat dengan tepat menetapkan media query pertama kita untuk mendeteksi layar yang lebih besar dari 480px.
Namun, langkah selanjutnya bisa dibilang tablet. IPad memiliki resolusi 980px x 768px, jadi kita bisa berasumsi bahwa sesuatu yang lebih kecil dari 768px sesuai untuk tata letak ponsel kita. Apa pun yang lebih besar dari 768px dapat menangani tata letak navigasi desktop lainnya.
Oleh karena itu, kita dapat mulai menambahkan aturan, jadi mari menyiapkan media query:
1 |
/*media queries*/
|
2 |
|
3 |
@media only screen and (min-width: 768px) { |
4 |
|
5 |
}
|
Permintaan media ini akan menjalankan semua gaya yang ada di dalamnya saat viewport minimal selebar 768px. Perhatikan masuknya satu-satunya kata kunci, yang menjamin Internet Explorer 8 tidak bingung seluruhnya dan mencoba memproses query. Lihat penjelasan saya sebelumnya untuk rinciannya.
Ayo lepaskan semuanya dengan membuat tombol 'menu' kita hilang:
1 |
|
2 |
@media only screen and (min-width: 768px) { |
3 |
|
4 |
a.to_nav { |
5 |
display: none; |
6 |
}
|
7 |
|
8 |
}
|



Dengan peramban yang dibuat sedikit lebih lebar, tombol menu tidak lagi ditampilkan.
7. Pergeseran Navigasi
Sekarang kita perlu membawa navigasi utama kita ke bagian atas halaman. Kita akan melakukannya dengan menghapusnya dari arus dokumen, memposisikannya benar-benar di atas.
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 |
}
|
Agar hal itu menjadi mungkin kita terlebih dahulu harus membuat induknya (.wrapper
) diposisikan relatif. Kita bisa melakukannya di sini dalam media query, atau menentukannya di awal stylesheet kita.
Begitu menu diposisikan secara mutlak, kita perlu menghapus beberapa gaya jangkar (anchor). Tidak banyak yang bisa dilakukan, tapi kita memerlukan daftar item untuk ditampilkan secara garis besar, dan kita perlu menghapus batas dan bantalan berlapis dari jangkar. Status hover yang kita didiktekan sebelumnya tentu saja baik, jadi kita tidak perlu mengubahnya.



8. Satu Hal Terakhir
Jika Anda telah memperhatikan, Anda akan menyadari bahwa kita masih memiliki tautan 'top' di navigasi - kita tidak benar-benar membutuhkannya lagi?
Kita bisa menghapus ini dengan beberapa cara, tapi apabila kita yakin akan apa yang terjadi mari kita tambahkan.
1 |
|
2 |
<li class="top"><a href="#home">Top</a></li> |
Dan kemudian kita bisa menyingkirkannya dalam media query kita:
1 |
|
2 |
#primary_nav li.top { |
3 |
display: none; |
4 |
}
|



Kesimpuan
Itu dia! Ada banyak cara untuk membangun gagasan ini (menerapkan daftar ikon hanya satu) dan, tentu saja, Anda dapat terus menambahkan media query untuk memenuhi layar yang berkembang. Mudah-mudahan Anda sekarang memiliki fondasi untuk melakukannya. Kita telah membuat navigasi yang sederhana, responsif, dan ramah sentuhan, dari pendekatan mobile first sambil memberi penekanan pada konten dan kegunaan. Siapa yang ingin bertanya lebih lanjut?!
Sumber Daya Lebih Lanjut
Beberapa link berguna yang disebutkan dalam tutorial, semuanya disusun menjadi satu daftar praktis:
- Mobile First oleh Luke Wroblewski
- Menu dropdown responsif berbasis jQuery oleh Chris Coyier
- Five Simple Steps
- Twitter Bootstrap
- Meninggalkan Internet Explorer Lama Dibelakang oleh Joni Korpi
- Jangan Lupakan Meta Tag Viewport!
- Chris Valleskey's Monty Python (antara lain) teks pengisi
- reset tinjau ulang oleh Eric Meyer
- Ukuran Target Sentuhan oleh Luke Wroblewski
- Penjelasan saya tentang media query kata kunci 'only'
- Pola navigasi responsif oleh Brad Frost
- Membangun navigasi mobile cerdas tanpa hack oleh Aaron Gustafson di .net Magazine
Opsi Premium
Ada banyak template desain mobile first yang tersedia di Envato Market untuk segera digunakan dalam proyek Anda.
Misalnya, first adalah dashboard mobile web app / admin dashboard theme dengan flat UI berdasarkan Bootstrap 3. Ini ringan tapi dengan banyak komponen sesuai dengan kebutuhan anda. Ini juga sepenuhnya responsif, dan widget dan komponennya mobile first.


