Menyediakan informasi seputar perkembangan mesin Blogger dan internet secara umum.

Konsep Navigasi Mobile dengan Media Queries

Navigasi/Menu pada perangkat mobile

Saya hanya akan menjelaskan konsep ini secara cepat dan nyaris nonverbal, jadi perhatikan dan jangan lupa untuk membaca komentar-komentar di dalam kode CSS dan HTML yang Saya tuliskan. Pada dasarnya kita hanya akan membuat menu biasa, yang kemudian kita lengkapi dengan ikon sebagai tombol penampil menu. Secara normal, ikon tersebut akan disembunyikan dan menu navigasi akan ditampilkan pada perangkat desktop/device berukuran besar, sampai ketika kita berada pada perangkat yang lebih kecil, maka CSS akan melakukan hal sebaliknya, yaitu akan menyembunyikan menu dan menampilkan ikon/navicon.

Demo

Lihat Demo Salinan di CSS Deck

Markup HTML

Kita membutuhkan enam buah elemen HTML yaitu <nav>, <ul>, <li>, <input type="checkbox">, <label> dan <a>

Tag HTML Keperluan
<nav>, <ul>, <li> Semantik. Semua navigasi standar dibangun dengan elemen ini
<a> Setiap navigasi juga memiliki tautan-tautan yang berfungsi untuk mengarahkan pengunjung menuju sebuah tempat tertentu saat tautan-tautan tersebut diklik
<input type="checkbox"> Elemen ini digunakan untuk menampilkan dan menyembunyikan menu pada tampilan mobile. Dengan CSS3 :checked, kita bisa membuat efek toggle menggunakan elemen checkbox (baca di sini)
<label> Elemen ini digunakan untuk keperluan visual saja. Lebih tepatnya, elemen ini akan menjadi ikon yang akan tampak sebagai tombol, padahal tombol menu yang sebenarnya adalah elemen checkbox yang disembunyikan dengan opacity:0.
<!-- Markup yang dibutuhkan: <nav>, <ul>, <li>, <input type=checkbox>, <label>, <a> -->

<nav>
    <input type="checkbox">
    <label>&equiv;</label>
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Archive</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</nav>

CSS

Pertama-tama kita set dasar dimensi menu dengan mengatur tampilan elemen <nav> meliputi tipe font, warna latar dan huruf:

/* navigasi: tentukan font, warna huruf dan latar */
nav {
  font:normal bold 11px Arial,Sans-Serif;
  color:gray;
  background-color:black;
  height:30px;
}

Kemudian set layout daftar menu menjadi horizontal. Hapus margin, padding dan bullet bawaan dari User Agent Style Sheet:

/* daftar menu: hilangkan margin, padding dan bullet */
nav ul,
nav li {
  margin:0 0;
  padding:0 0;
  list-style:none;
}

/* set tinggi menu */
nav ul {height:30px}

/* set layout menu menjadi berjajar/horizontal */
nav li {
  float:left;
  display:inline;
}

Ubah semua tautan di dalam navigasi menjadi elemen blok agar lebih mudah dalam pengaturan tinggi, padding dan hal-hal lain yang kebanyakan bisa dilakukan oleh elemen blok:

/* tautan */
nav a {
  display:block;
  line-height:30px;
  padding:0 14px;
  text-decoration:none;
  color:white;
}

Ganti juga warna item menu jika pointer mouse berada di atasnya:

/* sikap hover item menu */
nav a:hover {background-color:#39f}

Ikon Menu (Navicon)

Bentuknya seperti ini: ``. Simbol disamping Saya buat dengan entitas HTML &equiv;. Kita akan meletakkan simbol itu di dalam elemen <label> seperti ini:

<label>&equiv;</label>

Sebenarnya ada beberapa bentuk lain yang biasa dijadikan sebagai simbol untuk menyatakan menu (baca di sini), tapi bentuk yang paling mudah dibuat dan yang paling umum digunakan adalah bentuk yang Saya tuliskan di atas.

Kali ini kita akan mengerjakan CSS elemen checkbox dan label. Secara normal tampilannya akan disembunyikan:

nav input {display:none}
nav label {display:none}

Kemudian set beberapa pengaturan. Sembunyikan wujud elemen checkbox dengan mendeklarasikan opacity:0, dan atur dimensinya dengan tinggi dan lebar yang (disarankan) sama dengan tinggi menu:

/* checkbox: sebagai tombol menu pada tampian mobile */
nav input {
  display:none;
  margin:0 0;
  padding:0 0;
  width:30px;
  height:30px;
  opacity:0; /* sembunyikan wujud */
  cursor:pointer;
}

/* elemen label: sebagai ikon */
nav label {
  display:none;
  font-size:200%;
  width:30px;
  height:30px;
  /* teks berada di tengah secara vertikal dan horizontal */
  line-height:30px;
  text-align:center;
}

Media Queries

Hanya membutuhkan satu media query untuk menyatakan bahwa kita sedang berada pada perangkat mobile. Misalnya berada pada ukuran layar maksimal 767px

@media (max-width:767px) {
  ...
}

Saat kita berada pada ukuran layar maksimal 767 piksel, set tampilan menu sebagai menu vertikal. Tampilkan ikon dan sembunyikan semua menu:

@media (max-width:767px) {
  nav {
    /* kita akan mengeset posisi menu dan ikon sebagai elemen absolut terhadap navigasi, jadi kita memerlukan deklarasi ini */
    position:relative;
  }
  nav ul {
    background-color:#200;
    position:absolute;
    top:100%;
    right:0;
    left:0;
    height:auto;
    display:none; /* sembunyikan menu */
  }
  /* set tampilan menu agar bersusun secara vertikal */
  nav li {
    display:block;
    float:none;
    width:auto;
  }
  nav input,
  nav label {
    position:absolute;
    top:0;
    right:0;
    display:block; /* tampilkan elemen checkbox dan label */
  }  
  nav input {z-index:4} /* selalu pastikan bahwa checkbox berada di atas label */
}

Kemudian buat efek toggle dengan CSS :checked. Ubah warna ikon saat tombol menu diklik, dan tampilkan menu yang tersembunyi:

@media (max-width:767px) {
  ...
  ...
  /* ubah warna ikon saat tombol menu diklik, dan tampilkan menu yang tersembunyi saat checkbox dicek */
  nav input:checked + label {color:white}
  nav input:checked ~ ul {display:block}
}

Kode Lengkap

HTML

<nav>
    <input type="checkbox">
    <label>&equiv;</label>
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Archive</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</nav>

CSS

/* horizontal navigation: define the navigation font and basic background */
nav {
  background-color:black;
  font:normal bold 11px Arial,Sans-Serif;
  color:gray;
  height:30px;
}

/* lists: remove the nested list margin, padding & bullets */
nav ul,
nav li {
  margin:0 0;
  padding:0 0;
  list-style:none;
}

/* navigation height */
nav ul {height:30px}

/* inline layout menu */
nav li {
  float:left;
  display:inline;
}

/* the anchor */
nav a {
  display:block;
  line-height:30px;
  padding:0 14px;
  text-decoration:none;
  color:white;
}

/* hover state menu */
nav a:hover {background-color:#39f}

/* checkbox element: for mobile navigation button */
nav input {
  display:none;
  margin:0 0;
  padding:0 0;
  width:30px;
  height:30px;
  opacity:0;
  cursor:pointer;
}

/* for visual purpose */
nav label {
  display:none;
  font-size:200%;
  width:30px;
  height:30px;
  /* center vertically and horizontally */
  line-height:30px;
  text-align:center;
}


/* MOBILE NAVIGATION */

@media (max-width:767px) {

  nav {
    /* we want to absolute positioning the menu, checkbox and label element to its parent, so this is needed */
    position:relative;
  }

  nav ul {
    background-color:#200;
    position:absolute;
    top:100%;
    right:0;
    left:0;
    height:auto;
    display:none; /* hide the menu */
  }

  /* set the menu as a block list item */
  nav li {
    display:block;
    float:none;
    width:auto;
  }

  /* now show the checkbox and label element in mobile device */
  nav input,
  nav label {
    position:absolute;
    top:0;
    right:0;
    display:block; /* show the menu icon */
  }
  
  nav input {z-index:4} /* always place the checkbox above the label element */

  /* highlight the label element and show the menu if the checkbox is checked */
  nav input:checked + label {color:white}
  nav input:checked ~ ul {display:block}

}

  

Berlangganan

Berlangganan: Dapatkan berbagai materi dan informasi seputar dunia pemrograman yang tidak akan pernah bisa kalian dapatkan di buku dan di bangku kuliah.

 23 Komentar

Memuat…

Tautan (link) hidup dalam komentar akan terhapus secara otomatis.
Untuk menyisipkan tautan dengan aman, gunakan kode [url=http://example.com]Teks Tautan[/url]
Untuk menyisipkan kode, gunakan tag <i rel="code">KODE ANDA</i>
Untuk menyisipkan gambar, gunakan kode [img]URL GAMBAR[/img]
Untuk menyisipkan judul, gunakan tag <b rel="h4">JUDUL ANDA DI SINI…</b>
Untuk menciptakan efek tebal gunakan tag <strong>TEKS ANDA DI SINI…</strong>
Untuk menciptakan efek huruf miring gunakan tag <em>TEKS ANDA DI SINI…</em>

Khusus untuk membalas komentar disarankan menggunakan tombol balas di samping komentar terkait dibandingkan menggunakan formulir komentar di bawah agar komunikasi lebih terstruktur. Karena mungkin, apa yang Anda tanyakan/katakan saat ini akan sangat bermanfaat bagi pembaca lain.

:) :( ^_^ :D ;) :bd :'( :\ ;p B) :Q :Ozzz 7:( \o/ **p :* 0:) :a 7:O *fuck* x& x@ ~x( *yaya* =p*

Nama Saya Taufik Nurrohman. Sebenarnya Saya tidak bisa disebut sebagai seorang yang profesional dalam bidang ini, karena Saya tidak menguasai bidang ini melalui pendidikan formal. Saya hanyalah seorang antusias. Dibandingkan sebagai seorang desainer atau pengembang, Saya lebih suka jika disebut sebagai seorang hobiis saja yang tertarik dengan dunia web.

Daftar Tautan

Saya tidak bisa hidup tanpa JavaScript! Aktifkan JavaScript?
Ke atas!