Showing posts with label Navigasi. Show all posts
Showing posts with label Navigasi. Show all posts

Navigasi Halaman dengan Keyboard

Sisipkan kode ini di atas </head> atau di atas </body> pada editor templat Anda, lalu simpan perubahan:

<script>
//<![CDATA[
(function(win, doc) {

var pager;

// left = 37, right = 39
doc.onkeydown = function(e) {
switch (e.keyCode) {
case 37: pager = doc.getElementById('blog-pager-newer-link'); break;
case 39: pager = doc.getElementById('blog-pager-older-link'); break;
}
if (pager) {
win.location.href = pager.children[0].href;
return false;
}
};

})(window, document);
//]]>
</script>

Sekarang Anda akan bisa melakukan navigasi menggunakan tombol panah kanan atau kiri pada keyboard. Ini cuma berlaku untuk markup HTML navigasi halaman Blogger yang masih standar. Untuk navigasi halaman yang sudah mengalami perubahan mungkin akan memerlukan sedikit modifikasi, terutama pada bagian nilai variabel pager di dalam kondisional switch.

Menambahkan Efek Aktif (Seperti Tertekan)

Dengan cara menambahkan kelas active pada navigasi halaman ketika tombol panah kanan dan/atau kiri ditekan, maka kita bisa menciptakan efek aktif/tertekan palsu melalui kelas tersebut:

<script>
//<![CDATA[
(function(win, doc) {

var pager;

// left = 37, right = 39
doc.onkeydown = function(e) {
switch (e.keyCode) {
case 37: pager = doc.getElementById('blog-pager-newer-link'); break;
case 39: pager = doc.getElementById('blog-pager-older-link'); break;
}
if (pager) {
pager.className = pager.className += ' active';
win.location.href = pager.children[0].href;
return false;
}
};

doc.onkeyup = function(e) {
switch (e.keyCode) {
case 37: pager = doc.getElementById('blog-pager-newer-link'); break;
case 39: pager = doc.getElementById('blog-pager-older-link'); break;
}
if (pager) {
pager.className = pager.className.replace(/ active/g, "");
}
};

})(window, document);
//]]>
</script>
#blog-pager-older-link.active a,
#blog-pager-newer-link.active a,
#blog-pager-older-link a:active,
#blog-pager-newer-link a:active {
background-color:red;
color:white;
}

Demonstrasi bisa Anda lihat di sini. Pastikan Anda sudah berada dalam keadaan terfokus pada area ketika hendak menekan tombol panah kanan dan kiri:

Metode ini mungkin tidak cocok untuk diterapkan pada blog yang bersifat umum karena mungkin akan mengganggu fungsi tombol keyboard yang asli. Lebih baik terapkan pada blog-blog yang bersifat pribadi saja.

Cross Browser Scroll to Top Animation (JavaScript)

/*! http://stackoverflow.com/questions/8917921/cross-browser-javascript-not-jquery-scroll-to-top-animation */
function scrollTo(element, to, duration) {

// http://robertpenner.com/easing/
// t = current time, b = start value, c = change in value, d = duration
Math.easeInOutQuad = function(t, b, c, d) {
t /= d / 2;
if (t < 1) return c / 2 * t * t + b;
t--;
return -c / 2 * (t * (t - 2) - 1) + b;
};

var start = element.scrollTop,
change = to - start,
currentTime = 0,
increment = 20,
animateScroll = function() {
currentTime += increment;
var val = Math.easeInOutQuad(currentTime, start, change, duration);
element.scrollTop = val;
if (currentTime < duration) {
setTimeout(animateScroll, increment);
}
};

animateScroll();

}

Penggunaan

element digunakan untuk mewakili elemen yang ingin diberi efek animasi, to mewakili jarak arah gulungan ke atas, duration mewakili durasi animasi:

<button onclick="scrollTo(document.body, 0, 1000);">Scroll to Top</button>

Membuat Navigasi Halaman AJAX pada Blogger

Prinsipnya sederhana. Di sini Saya menggunakan navigasi Posting Lebih Lama sebagai navigasi AJAX dan menggunakan JQuery $.get() untuk memanggil URL pada navigasi tersebut:

// Menyingkirkan navigasi posting lebih baru (Navigasi ini tidak diperlukan)
$('#blog-pager').find('#blog-pager-newer-link').remove();

// Dasar AJAX navigasi
$('#blog-pager').on("click", "#blog-pager-older-link a", function() {
$.get(this.href, {}, function(data) {
// Proses...
}, "html");
return false;
});

Kita akan menggunakan elemen .blog-posts untuk memuat posting-posting baru dari halaman selanjutnya.

Menerapkan AJAX pada Navigasi Halaman

Pastikan JQuery sudah terpasang pada template. Masuk ke editor HTML template, kemudian salin kode ini dan letakkan di atas </body>:

<b:if cond='data:blog.pageType != &quot;item&quot;'>
<b:if cond='data:blog.pageType != &quot;static_page&quot;'>
<script type='text/javascript'>
//<![CDATA[
(function($) {
var $pager = $('#blog-pager'),
$posts = $('.blog-posts');
$pager.find('#blog-pager-newer-link').remove(); // Menyingkirkan navigasi posting lebih baru
$pager.on("click", "#blog-pager-older-link a", function() {
$.get(this.href, {}, function(data) {
var source = $(data).find('.post').length ? $(data) : $('<div></div>');
$posts.append(source.find('.blog-posts').html()); // Menyisipkan posting
$pager.html(source.find('#blog-pager-older-link').clone()); // Memperbaharui navigasi
}, "html");
$(this).replaceWith('<span>Memuat...</span>'); // Ubah navigasi posting menjadi indikator memuat saat sedang memuat
return false;
});
})(jQuery);
//]]>
</script>
</b:if>
</b:if>

Klik Simpan Template.

Sekarang coba buka halaman blog Anda kemudian klik navigasi Posting Lama atau Older Post. Jika navigasi tersebut berubah menjadi teks bertuliskan “memuat...” seperti ini, maka itu artinya AJAX sedang bekerja:

Ini adalah gambar navigasi halaman yang sedang memuat halaman baru dengan AJAX
Indikator sedang memuat

Tunggu sampai posting-posting baru muncul di bawah posting-posting yang sedang terlihat saat ini.

Infinite Scroll (?)

Untuk menciptakan infinite scroll pada sistem navigasi halaman, cukup nyatakan event .scroll() pada $(window) dan cek apakah jarak gulungan layar telah mencapai batas akhir atau belum. Jika ya, picu event .click() pada navigasi AJAX yang telah kita buat sebelumnya.

Dalam kasus ini, Saya menentukan batas akhir gulungan layar bukan berdasarkan tinggi halaman, melainkan berdasarkan posisi navigasi terhadap bagian teratas dari layar:

(function($) {

var $pager = $('#blog-pager'),
$posts = $('.blog-posts'),
loading = false;

// AJAX
$pager.find('#blog-pager-newer-link').remove(); // Menyingkirkan navigasi posting lebih baru
$pager.on("click", "#blog-pager-older-link a", function() {
$.get(this.href, {}, function(data) {
var source = $(data).find('.post').length ? $(data) : $('<div></div>');
$posts.append(source.find('.blog-posts').html());
$pager.html(source.find('#blog-pager-older-link').clone());
loading = false;
}, "html");
$(this).replaceWith('<span>Memuat...</span>'); // Ubah navigasi posting menjadi indikator memuat saat sedang memuat
return false;
});

// INFINITE SCROLL
$(window).on("scroll resize", function() {
// Jika AJAX sedang tidak memuat dan jika jarak gulungan layar + tinggi layar telah mencapai
// tinggi yang sama dengan/lebih besar dari offset navigasi halaman terhadap bagian teratas dari layar...
if (!loading && ($(this).scrollTop() + $(this).height()) >= $pager.offset().top) {
$pager.find('#blog-pager-older-link a').trigger("click"); // Picu event `.click()` pada navigasi AJAX posting
loading = true; // Mulai antre pemuatan
}
});

})(jQuery);

Catatan: JavaScript Auto Read-More akan tereksekusi saat halaman dimuat dengan cara biasa, sehingga jangan kaget jika posting-posting baru yang dimuat oleh AJAX tidak akan terpotong menjadi ringkasan posting. Saya sarankan Anda untuk menggunakan konsep ringkasan posting tanpa JavaScript yang pernah Saya tuliskan sebelumnya di sini.

Toggle Side Navigation

Image of toggle side navigation example. See the navicon symbol!

HTML

<div id="outer-wrapper">

<section id="nav">
<a href="#nav" id="toggle-nav-btn" title="Show Navigation">&equiv;</a>
<div class="inner">
<ul class="menu">
<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>
...
...
</div>
</section>

<section id="main">
Artikel di sini...
</section>

</div>

CSS

/* Outer wrapper */
#outer-wrapper {
background-color:black;
overflow:hidden;
}

/* Left sidebar */
#nav {
float:left;
width:2.8em;
color:#999;
position:relative;
}

#nav .inner {
padding:1em;
display:none;
}

.menu,
.menu li {
margin:0 0;
padding:0 0;
list-style:none;
}

.menu {margin:2em -1em 1em}

.menu a {
display:block;
font-weight:bold;
color:white;
text-decoration:none;
height:2.4em;
line-height:2.4em;
padding:0 1em;
}

.menu a:hover {background-color:#222}

/* Right sidebar */
#main {
background-color:white;
margin-left:2.8em; /* Same with the `#nav` width */
padding:1em 2em;
}

/* Toggle navigation button */
#toggle-nav-btn {
text-decoration:none;
font-size:200%;
line-height:100%;
color:#666;
display:block;
position:absolute;
top:.2em;
right:.4em;
}

#toggle-nav-btn:hover {color:#888}

/* When the `.menu-is-visible` class applied */
.menu-is-visible #nav {width:200px}
.menu-is-visible #nav .inner {display:block}
.menu-is-visible #main {margin-left:200px} /* Same with the `.menu-is-visible #nav` width */
.menu-is-visible #toggle-nav-btn {color:#aaa}

JavaScript

JavaScript ini digunakan untuk menambahkan dan melepaskan kelas .menu-is-visible pada elemen <body> secara bergantian:

(function() {

var page = document.body,
btn = document.getElementById('toggle-nav-btn');

btn.onclick = function() {

// Toggle the `.menu-is-visible` class to the <body> tag based on `#toggle-btn-nav` click event
page.className = (/(^| )menu-is-visible( |$)/.test(page.className)) ?
page.className.replace(/menu-is-visible/,"") :
page.className + " menu-is-visible";

// Toggle the toggle navigation title too...
this.title = (this.title == "Show Navigation") ?
"Hide Navigation" :
"Show Navigation";

return false;

};

})();

Alternatif Lain

Kita juga bisa menggunakan plugin JQuery Toggle Sidebar untuk menampilkan dan menyembunyikan sidebar, dimana menu navigasi berada di dalam sidebar tersebut. Tapi dalam kasus ini Saya tidak menyarankannya, mengingat menggunakan JavaScript mentah saja masih bisa:

$('#nav').toggleSidebar({
expand: "#main",
defaultHidden: true
});

Input Teks dengan Ikon Pembersih

Text Input with Clear Button

Pada peramban WebKit seperti Google Chrome dan Safari, sebuah elemen input bertipe search memiliki kemampuan untuk menampilkan ikon/tombol pembersih kecil di samping input teks jika kita telah mengetikkan sesuatu di dalamnya. Tapi tidak pada peramban yang lain. Terkadang kita merasa butuh dan menyukai fitur itu, dan berharap bisa bekerja pada semua peramban.

Kita bisa menggunakan markup ekstra dan sedikit JavaScript untuk menciptakan rekayasa seperti itu. Tapi untuk memastikan tampilannya polos, gunakan elemen input bertipe text, bukan search:

HTML

<form id="search-form" action="/search" method="get">
<span class="text-input-wrapper">
<input type="text" name="q" size="18"><span title="Clear">&times;</span>
</span>
<input type="submit" value="Submit">
</form>

CSS

.text-input-wrapper {
border:1px solid;
background-color:white;
padding:1px 6px 1px 1px;
display:inline-block;
}

.text-input-wrapper input {
border:none;
background:none;
outline:none;
padding:0 0;
margin:0 0;
font:inherit;
}

.text-input-wrapper span {
cursor:pointer;
color:blue;
font-weight:bold;
visibility:hidden;
}

JavaScript

(function() {
var searchForm = document.getElementById('search-form'),
textInput = searchForm.q,
clearBtn = textInput.nextSibling;
textInput.onkeyup = function() {
// Show the clear button if text input value is not empty
clearBtn.style.visibility = (this.value.length) ? "visible" : "hidden";
};
// Hide the clear button on click, and reset the input value
clearBtn.onclick = function() {
this.style.visibility = "hidden";
textInput.value = "";
};
})();

Demo

Mengubah List/Daftar Menjadi Diagram Pohon

HTML

<ul class="tree">
<li>List item 1</li>
<li>List item 2
<ul>
<li>List item 2.1</li>
<li>List item 2.2</li>
<li>List item 2.3</li>
...
...
</ul>
</li>
<li>List item 3</li>
<li>List item 4</li>
<li>List item 5</li>
...
...
</ul>

CSS

ul.tree,
ul.tree ul {
list-style:none;
margin:0;
padding:0;
}

ul.tree ul {
margin-left:10px;
background:transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAKAQMAAABPHKYJAAAAA1BMVEWIiIhYZW6zAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1ggGExMZBky19AAAAAtJREFUCNdjYMAEAAAUAAHlhrBKAAAAAElFTkSuQmCC') repeat-y 0 100%;
}

ul.tree li {
margin:0;
padding:0 12px;
font-size:14px;
line-height:20px;
color:#369;
font-weight:bold;
}

ul.tree ul li {
background:transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAUAQMAAACK1e4oAAAABlBMVEUAAwCIiIgd2JB2AAAAAXRSTlMAQObYZgAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YIBhQIJYVaFGwAAAARSURBVAjXY2hgQIf/GTDFGgDSkwqATqpCHAAAAABJRU5ErkJggg==') no-repeat 0 0;
}

ul.tree ul li.last,
ul.tree ul li:last-child {
background:white url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAUAQMAAACK1e4oAAAABlBMVEUAAwCIiIgd2JB2AAAAAXRSTlMAQObYZgAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YIBhQIIhs+gc8AAAAQSURBVAjXY2hgQIf/GbAAAKCTBYBUjWvCAAAAAElFTkSuQmCC') no-repeat 0 100%;
}

Demo

Murni CSS/Tanpa Gambar

Berikut ini adalah versi CSS yang Saya buat berdasarkan contoh di atas. Tanpa gambar, hanya menggunakan pseudo element:

CSS

ul.tree,
ul.tree ul {
list-style:none;
margin:0;
padding:0;
}

ul.tree ul {
margin-left:10px; /* indentation */
position:relative;
}

ul.tree ul:before {
content:"";
display:block;
width:0;
position:absolute;
top:0;
bottom:0;
left:0;
border-left:1px solid;
}

ul.tree li {
margin:0;
padding:0 12px; /* indentation + 2 */
font-size:14px;
line-height:20px; /* default list item `line-height` */
color:#369;
font-weight:bold;
position:relative;
}

ul.tree ul li:before {
content:"";
display:block;
width:10px; /* same with indentation */
height:0;
border-top:1px solid;
position:absolute;
top:10px;
left:0;
}

ul.tree ul li:last-child:before {
background:white; /* same with body background */
height:auto;
top:10px; /* (line-height/2) */
bottom:0;
}

Demo

XHTML Blogger - Navigasi Halaman/Blog Pager

<b:includable id='nextprev'>
<div class='blog-pager' id='blog-pager'>
<b:if cond='data:newerPageUrl'>
<span id='blog-pager-newer-link'>
<a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-newer-link&quot;' expr:title='data:newerPageTitle'><data:newerPageTitle/></a>
</span>
</b:if>

<b:if cond='data:olderPageUrl'>
<span id='blog-pager-older-link'>
<a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-older-link&quot;' expr:title='data:olderPageTitle'><data:olderPageTitle/></a>
</span>
</b:if>

<a class='home-link' expr:href='data:blog.homepageUrl'><data:homeMsg/></a>

<b:if cond='data:mobileLinkUrl'>
<div class='blog-mobile-link'>
<a expr:href='data:mobileLinkUrl'><data:mobileLinkMsg/></a>
</div>
</b:if>

</div>
<div class='clear'/>
</b:includable>
DataKeteranganTampilan/Contoh Tampilan
data:newerPageUrlIndikator untuk menyatakan bahwa terdapat posting yang lebih baru sebelum posting/daftar posting yang sedang aktif/terlihat di halaman. Pada intinya, kondisi ini digunakan untuk memunculkan navigasi Posting Lebih Baru saat diperlukan dan akan menyembunyikannya saat tidak diperlukan —misalnya, saat kita sedang berada di halaman muka, kita tidak akan melihat navigasi Posting Lebih Baru. Elemen/data ini juga berfungsi untuk menampilkan URL halaman (saat sedang berada di halaman indeks) atau URL posting (saat sedang berada di halaman item) yang lebih baru dari halaman yang sedang aktif.http://nama_blog.blogspot.com/search?updated-max=2012-12-21T16:36:00%2B07:00&amp;max-results=2
data:olderPageUrlIndikator untuk menyatakan bahwa terdapat posting yang lebih lama setelah posting/daftar posting yang sedang aktif/terlihat di halaman. Kondisi ini digunakan untuk memunculkan navigasi Posting Lama saat diperlukan dan akan menyembunyikannya saat tidak diperlukan —saat kita sedang berada di halaman terakhir, maka kita tidak akan melihat navigasi Posting Lama). Elemen/data ini juga berfungsi untuk menampilkan URL halaman (saat sedang berada di halaman indeks) atau URL posting (saat sedang berada di halaman item) yang lebih lama dari halaman yang sedang aktif.http://nama_blog.blogspot.com/search?updated-max=2012-12-21T16:36:00%2B07:00&amp;max-results=2&amp;reverse-paginate=true
data:newerPageTitleElemen ini akan menampilkan teks navigasi menuju halaman/posting yang lebih baruPosting Lebih Baru, Newer Post
data:olderPageTitleElemen ini akan menampilkan teks navigasi menuju halaman/posting yang lebih lamaPosting Lama, Older Post
data:widget.instanceId[?]Blog1
data:blog.homepageUrl[?]http://nama_blog.blogspot.com/
data:homeMsgElemen ini akan menampilkan teks navigasi ke halaman awal.Beranda
data:mobileLinkUrlKode ini akan menggenerasikan URL blog versi seluler berdasarkan URL yang sedang aktif (lebih tepatnya, kode ini akan menghasilkan nilai yang sama dengan data:blog.url dengan akhiran berupa ?m=1).http://nama_blog.blogspot.com/?m=1
data:desktopLinkUrlKode ini akan menggenerasikan URL blog versi desktop berdasarkan URL yang sedang aktif (lebih tepatnya, kode ini akan menghasilkan nilai yang sama dengan data:blog.url dengan akhiran berupa ?m=0).http://nama_blog.blogspot.com/?m=0
data:mobileLinkMsgElemen ini akan menampilkan teks navigasi menuju blog tampilan seluler.Lihat versi seluler
data:desktopLinkMsgElemen ini akan menampilkan teks navigasi menuju blog tampilan web/desktop.Lihat versi web

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

Markup HTML

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

Tag HTMLKeperluan
<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}

}

Kotak Penelusuran dalam Simbol

Kotak Penelusuran dalam Simbol

Menciptakan elemen kotak penelusuran tersembunyi dengan JQuery. Saat keadaan normal, kotak penelusuran akan tampak sebagai ikon kaca pembesar, dan saat ikon tersebut diklik, itu akan memicu kotak penelusuran di dalamnya untuk tampil:

HTML

<form class="search-form" action="/search" method="get">
<div class="input-wrapper">
<input type="text" name="q" placeholder="Search...">
<a title="Search" class="sc" href="/"></a>
</div>
</form>

CSS

.input-wrapper {
border:1px solid #B9E8FB;
width:26px;
height:26px;
background-color:white;
-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.2);
-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.2);
box-shadow:inset 0 1px 1px rgba(0,0,0,.2);
-webkit-border-radius:30px;
-moz-border-radius:30px;
border-radius:30px;
overflow:hidden;
position:relative;
}

.input-wrapper input,
.input-wrapper input:focus {
border:none;
background:none;
margin:0 0;
padding:0 16px;
display:block;
width:200px;
height:26px;
font:italic bold 12px/26px Arial,Sans-Serif;
color:#1C86AF;
outline:none;
}

.input-wrapper.focus {
background-color:#EAF7FC;
border-color:#3EBFF0;
}

.input-wrapper .sc {
display:block;
position:absolute;
top:0;
right:0;
bottom:0;
left:0;
background:white url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGOSURBVDhPrZJPSwJRFMXPokD6BkFQyzaRQUGrKII21a5Vu9oHLVq07hNUSFSYWqOmwjSGY0aRQqsCXUQJlaXSaEZamI2mTnV7WguNMUR6cHiX98793fv+AP8+9gvd2P9cYuKZdPDQYH01/NSMPcWCYyIcVMjL4r13AT7S/A1yFZzM+J3sUZYZbByisojDEuCD4C4GGKRJHbIjj+DoxyjI2iqTmGuHq/AIt0JwFgdqAF4dcOUJvDynanDK8xCLBCHjrQF48WE3S9h+61A18C/97DiEnXRaHWBPiuDTBHtqQtXgSE1BkAm2pF8dYHuYheOJYE3kVQ3WRACOVGl/uvZLmOMxWO4JW9IFzLExcNFWcNIouNgJrGzdHCup+oKraJzUBlM4DovE7iJB5YqlmbsjbEYfsBXJwp5k8U1v7S6MEQ2MoRnob5/L3RhvMzCEFrDmb4H+ugebkSI2Qp8w3HTV9zt/u0yhIQbMwRjOw3De1xhkNTiM9eAHTFHC2mVnYxDdqRb6KwUrZ5ONASqyvgCU5N7E8iBBBAAAAABJRU5ErkJggg==') no-repeat 50% 50%;
-webkit-border-radius:30px;
-moz-border-radius:30px;
border-radius:30px;
}

JQuery

$(function() {
$('.search-form .sc').on("click", function() {
$(this).hide()
.parent().addClass('focus')
.stop().animate({width:200}, 120, "swing")
.find('input').trigger("focus")
.on("focusout", function() {
$(this).next().show()
.parent().removeClass('focus')
.stop().animate({width:26}, 120, "swing");
});
return false;
});
});

Demo

Konsep Kotak Pencarian Tersembunyi di dalam Header

Auto Hide Search Form Inside Header

HTML

<header id='site-header'>
<div class='inner'>
<h1><a href='/'>Site Name</a></h1>
<p>Lorem ipsum dolor sit amet...</p>
</div>
<div class='inner hidden'>
<form action='/search' method='get'>
<input type='text' name='q' placeholder='Search...'>
</form>
</div>
</header>

CSS

#site-header {
background-color:#6A2E79;
overflow:hidden;
text-shadow:0 1px 0 rgba(0,0,0,.1);
margin:0 0 20px;
position:relative;
}

#site-header .inner {padding:20px 30px}

#site-header a {
text-decoration:none;
color:white;
}

#site-header a:hover {color:#E0FFED}

#site-header h1 {
font-size:30px;
text-transform:uppercase;
}

#site-header p {margin:10px 0 0}

#site-header form input {
border:1px solid #743983;
background-color:#3B2440;
font:normal normal 12px Verdana,Arial,Sans-Serif;
color:#95799B;
padding:5px 5px;
margin:0 auto;
display:block;
width:98%;
-webkit-box-shadow:inset 0 1px 3px black;
-moz-box-shadow:inset 0 1px 3px black;
box-shadow:inset 0 1px 3px black;
}

#site-header .toggle-button {
display:block;
font-weight:bold;
padding:10px 18px;
text-align:right;
border-top:1px solid #5D216C;
}

.hidden {display:none}

JQuery

$(function() {
var $header = $('#site-header'),
$panel = $header.find('.inner');
// Insert a toggle button
$header.append('<span class="toggle-button"><a href="/">Search</a></span>');
// Click the toggle button to slide the panel
$header.find('.toggle-button a').on("click", function() {
if ($(this).html() == 'Search') {
$(this).html('&times;');
} else {
$(this).html('Search');
}
$panel.slideToggle('slow');
return false;
});
});

Widget Translator Halaman - Versi 2

Widget Translator Halaman Ringan - Versi 2

Widget ini dibuat sebagai pengganti aplikasi Google Translate yang berat. Murni, dibuat dari kode HTML dan JavaScript, sehingga Anda bisa terbebas dari permintaan HTTP yang biasanya datang dari JavaScript bawaan widget Google Translate. Di sini JavaScript berfungsi untuk melakukan pemformatan URL translasi berdasarkan pola query string dari Google Translate yang berbentuk seperti ini agar kita bisa menuju ke halaman Google Translate tanpa harus terlibat dengannya pada saat awal kunjungan:

http://translate.google.com/translate?u=http://www.nama-situs.com&langpair=from|to&hl=en
  • from ⇒ Bahasa Asal
  • to ⇒ Bahasa Tujuan

Kode Widget

<style type="text/css">
#translator-wrapper {
display:block;
width:200px;
border:1px solid #0A340A;
background-color:white;
overflow:hidden;
position:relative;
}
#translator-wrapper select {
border:none;
background:transparent;
font:normal normal 11px Tahoma,Verdana,Arial,Sans-Serif;
width:100%;
color:black;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
-webkit-appearance:none;
cursor:text;
padding:5px 10px;
}
#translator-wrapper a,
#translator-wrapper a:hover {
display:block;
background-color:#0A340A;
border:none;
color:white;
margin:0 0;
text-decoration:none;
position:absolute;
top:0;
right:0;
bottom:0;
cursor:pointer;
width:30px;
}
#translator-wrapper a:before {
content:"";
display:block;
width:0;
height:0;
border:5px solid transparent;
border-left-color:white;
position:absolute;
top:50%;
left:13px;
margin-top:-5px;
}
#translator-wrapper a:hover {background-color:#0A2C0A}
#translator-wrapper a:active {background-color:#082408}
#translator-wrapper select:focus,
#translator-wrapper a:focus,
#translator-wrapper select:active,
#translator-wrapper a:active {
border:none;
outline:none;
cursor:pointer;
}
</style>
<h3>Translate this page to:</h3>
<div id="translator-wrapper">
<select id="translate-language">
<option value="en" selected="selected">English</option>
<option value="id">Indonesian</option>
<option value="af">Afrikaans</option>
<option value="sq">Albanian</option>
<option value="ar">Arabic</option>
<option value="hy">Armenian</option>
<option value="az">Azerbaijani</option>
<option value="eu">Basque</option>
<option value="be">Belarusian</option>
<option value="bn">Bengali</option>
<option value="bg">Bulgarian</option>
<option value="ca">Catalan</option>
<option value="zh-CN">Chinese</option>
<option value="hr">Croatian</option>
<option value="cs">Czech</option>
<option value="da">Danish</option>
<option value="nl">Dutch</option>
<option value="en">English</option>
<option value="eo">Esperanto</option>
<option value="et">Estonian</option>
<option value="tl">Filipino</option>
<option value="fi">Finnish</option>
<option value="fr">French</option>
<option value="gl">Galician</option>
<option value="ka">Georgian</option>
<option value="de">German</option>
<option value="el">Greek</option>
<option value="gu">Gujarati</option>
<option value="ht">Haitian Creole</option>
<option value="iw">Hebrew</option>
<option value="hi">Hindi</option>
<option value="hu">Hungarian</option>
<option value="is">Icelandic</option>
<option value="id">Indonesian</option>
<option value="ga">Irish</option>
<option value="it">Italian</option>
<option value="ja">Japanese</option>
<option value="kn">Kannada</option>
<option value="ko">Korean</option>
<option value="la">Latin</option>
<option value="lv">Latvian</option>
<option value="lt">Lithuanian</option>
<option value="mk">Macedonian</option>
<option value="ms">Malay</option>
<option value="mt">Maltese</option>
<option value="no">Norwegian</option>
<option value="fa">Persian</option>
<option value="pl">Polish</option>
<option value="pt">Portuguese</option>
<option value="ro">Romanian</option>
<option value="ru">Russian</option>
<option value="sr">Serbian</option>
<option value="sk">Slovak</option>
<option value="sl">Slovenian</option>
<option value="es">Spanish</option>
<option value="sw">Swahili</option>
<option value="sv">Swedish</option>
<option value="ta">Tamil</option>
<option value="te">Telugu</option>
<option value="th">Thai</option>
<option value="tr">Turkish</option>
<option value="uk">Ukrainian</option>
<option value="ur">Urdu</option>
<option value="vi">Vietnamese</option>
<option value="cy">Welsh</option>
<option value="yi">Yiddish</option>
</select><a id="translate-me" href="#" title="Translate!"></a>
</div>
<script type="text/javascript">
(function() {
var mylang = "id", // Your website language
anchor = document.getElementById('translate-me');
anchor.onclick = function() {
window.open('http://translate.google.com/translate?u=' + encodeURIComponent(location.href) + '&langpair=' + mylang + '%7C' + document.getElementById('translate-language').value + '&hl=en');
return false;
};
})();
</script>

Salin saja kode di atas lalu letakkan di dalam sebuah widget HTML/JavaScript. Klik Simpan dan lihat hasilnya:

Memberi Tanda Pada Menu Berdasarkan Halaman yang Sedang Aktif

Memberi Tanda Pada Menu Berdasarkan Halaman yang Sedang Aktif
Menu berubah warna pada halaman About.

Dulu Saya pernah menuliskan potongan kode untuk menandai menu berdasarkan URL pada address bar dengan JQuery atau JavaScript di sini, kali ini Saya akan menggunakan tag kodisional untuk menandai menu berdasarkan persamaan URL halaman atau katakan saja pada halaman yang sedang aktif. Dengan begitu, saat Anda sedang berada pada halaman Tentang, maka menu navigasi Tentang akan berubah warna sesuai dengan pengaturan tampilan menu aktif yang Anda buat. Sebagai contoh.

Anggaplah Anda sudah memiliki menu navigasi di dalam template dengan kerangka seperti ini:

<nav id='nav'>
<ul>
<li><a href='http://test.blogspot.com'>Beranda</a></li>
<li><a href='http://test.blogspot.com/p/about.html'>Tentang</a></li>
<li><a href='http://test.blogspot.com/p/archive.html'>Arsip</a></li>
<li><a href='http://test.blogspot.com/p/contact.html'>Kontak</a></li>
</ul>
</nav>

Tambahkan masing-masing item menu dengan ID yang spesifik, misalnya home, about, archive dan sebagainya, sehingga hasilnya akan menjadi seperti ini:

<nav id='nav'>
<ul>
<li id='home'><a href='http://test.blogspot.com'>Beranda</a></li>
<li id='about'><a href='http://test.blogspot.com/p/about.html'>Tentang</a></li>
<li id='archive'><a href='http://test.blogspot.com/p/archive.html'>Arsip</a></li>
<li id='contact'><a href='http://test.blogspot.com/p/contact.html'>Kontak</a></li>
</ul>
</nav>

Setelah itu temukan kode </head> dan tambahkan kode-kode CSS yang berisi semua ID menu di atas. Isi selektor-selektor tersebut dengan deklarasi yang sama. Sebagai contoh, di sini Saya menuliskan warna latar hijau dan warna teks putih untuk menu yang sedang aktif:

<style type='text/css'>
#home a {background-color:#0A7936;color:white;}
#about a {background-color:#0A7936;color:white;}
#archive a {background-color:#0A7936;color:white;}
#contact a {background-color:#0A7936;color:white;}
</style>

Letakkan kode di atas tepat di atas tag </head>

Mengatur Warna Menu dengan Tag Kondisional

Pada intinya kita hanya akan memecah semua selektor di atas menjadi kode CSS tunggal yang akan tampil hanya jika halaman yang sedang aktif merupakan halaman yang memiliki URL sama dengan URL pada menu. Jadi kita bisa menggunakan tag kodisional halaman khusus untuk kasus ini:

<b:if cond='data:blog.url == &quot;URL HALAMAN&quot;'>

Pisahkan semua selektor item menu di atas menjadi seperti ini:

<style type='text/css'>
<b:if cond='data:blog.url == &quot;URL HALAMAN&quot;'>
#home a {background-color:#0A7936;color:white;}
</b:if>
<b:if cond='data:blog.url == &quot;URL HALAMAN&quot;'>
#about a {background-color:#0A7936;color:white;}
</b:if>
<b:if cond='data:blog.url == &quot;URL HALAMAN&quot;'>
#archive a {background-color:#0A7936;color:white;}
</b:if>
<b:if cond='data:blog.url == &quot;URL HALAMAN&quot;'>
#contact a {background-color:#0A7936;color:white;}
</b:if>
</style>

Ganti kode URL HALAMAN dengan URL halaman pada menu yang terkait dengan ID menu dalam selektor CSS. Dalam contoh menu yang Saya ilustrasikan di atas, seharusnya kodenya akan menjadi seperti ini:

<style type='text/css'>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
#home a {background-color:#0A7936;color:white;}
</b:if>
<b:if cond='data:blog.url == &quot;http://test.blogspot.com/p/about.html&quot;'>
#about a {background-color:#0A7936;color:white;}
</b:if>
<b:if cond='data:blog.url == &quot;http://test.blogspot.com/p/archive.html&quot;'>
#archive a {background-color:#0A7936;color:white;}
</b:if>
<b:if cond='data:blog.url == &quot;http://test.blogspot.com/p/contact.html&quot;'>
#contact a {background-color:#0A7936;color:white;}
</b:if>
</style>

Catatan: data:blog.homepageUrl setara dengan &quot;http://test.blogspot.com/&quot; menurut sampel alamat blog di atas, dan juga setara dengan window.location.hostname dalam JavaScript.

Klik Simpan Template.

Alternatif Lain

Tanpa Tag Kondisional

Kita bisa membuat manipulasi ini tanpa tag kondisional, diantaranya adalah dengan cara menerapkan manipulasi JavaScript atau JQuery (baca di sini) yang lebih praktis. Tapi metode ini memiliki satu kekurangan yaitu efek tidak akan bekerja jika JavaScript dimatikan.
Atau kita juga bisa menggunakan metode yang jauh lebih sederhana lagi, yaitu dengan cara menyisipkan kode CSS secara langsung ke dalam posting, sama seperti saat kita membuat posting Blogazine.

Hal yang paling penting dalam pembuatan manipulasi efek aktif pada menu sebenarnya hanya ada pada modifikasi ID atau kelas item menu agar mereka menjadi lebih spesifik/berbeda satu sama lain.

Dengan Widget Daftar Halaman (Page List)

Blogger memiliki widget bernama Daftar Laman. Dulu sebenarnya widget tersebut digunakan untuk menampilkan semua daftar tautan khusus untuk halaman statis, tapi saat ini widget tersebut sudah berkembang dan bisa ditambahi dengan tautan-tautan non-halaman statis. Dalam widget tersebut sudah terdapat peraturan kondisi tersendiri yaitu <b:if cond='data:link.isCurrentPage'> yang memiliki kemampuan untuk menambahkan kelas atau keadaan yang berbeda pada item menu jika halaman yang sedang aktif adalah halaman yang memiliki URL sama dengan URL pada menu tersebut:

<b:widget id='PageList1' locked='false' title='Laman' type='PageList'>
<b:includable id='main'>
<b:if cond='data:title'><h2><data:title/></h2></b:if>
<div class='widget-content'>
<b:if cond='data:mobile'>
<select expr:id='data:widget.instanceId + &quot;_select&quot;'>
<b:loop values='data:links' var='link'>
<b:if cond='data:link.isCurrentPage'>
<option expr:value='data:link.href' selected='selected'><data:link.title/></option>
<b:else/>
<option expr:value='data:link.href'><data:link.title/></option>
</b:if>
</b:loop>
</select>
<span class='pagelist-arrow'>&amp;#9660;</span>

<b:else/>
<ul>
<b:loop values='data:links' var='link'>
<b:if cond='data:link.isCurrentPage'>
<li class='selected'><a expr:href='data:link.href'><data:link.title/></a></li>
<b:else/>
<li><a expr:href='data:link.href'><data:link.title/></a></li>
</b:if>
</b:loop>
</ul>
</b:if>
<b:include name='quickedit'/>
</div>
</b:includable>
</b:widget>

Untuk menerapkan efek aktif pada menu, cukup gunakan CSS ini:

/* Versi daftar menu */
.PageList li.selected a {
background-color:#0A7936;
color:white;
}

/* Versi selectbox */
.PageList option[selected] {
font-weight:bold;
}
Widget Halaman Statis

Kekurangan manipulasi tampilan menu aktif pada widget Daftar Laman adalah kita tidak memiliki kemampuan untuk menambahkan sub-sub menu baru sebagai anak menu utama.

Simple Tab JQuery Plugin

Simple Tab is a JQuery plugin to transform a group of elements into a tab widget.

Simple Tab JQuery Plugin

Simple Tab adalah plugin JQuery untuk mengubah sekelompok elemen menjadi sebuah widget tabulasi:

Dasar Penggunaan

Berbeda dengan plugin tabulasi yang lainnya, plugin ini relatif lebih mudah dalam hal implementasi karena Anda tidak akan lagi direpotkan dengan pembuatan markup tabulasi yang rumit. Biarkan JQuery yang melakukan semuanya, sementara yang perlu Anda lakukan hanyalah menciptakan beberapa elemen <div> di dalam sebuah kontainer saja seperti ini:

<div id="tab">
<div data-tab="Tab-1">Content 1</div>
<div data-tab="Tab-2">Content 2</div>
<div data-tab="Tab-3">Content 3</div>
<div data-tab="Tab-4">Content 4</div>
</div>

Setiap nilai atribut data-tab nantinya akan berubah menjadi elemen tab di atas tubuh tab.

Selanjutnya adalah kode CSS dasar:

.simpleTab {
width:400px;
margin:50px auto;
color:black;
text-align:left;
}

.simpleTab ul.tab-wrapper {
margin:0;
padding:0;
height:30px;
}

.simpleTab ul.tab-wrapper li {
margin:0;
padding:0;
float:left;
list-style:none;
display:inline;
}

.simpleTab ul.tab-wrapper li a {
margin:0 2px 0 0;
display:block;
font:normal bold 12px/30px Arial,Sans-Serif;
padding:0 15px;
background-color:black;
color:white;
text-decoration:none;
border:1px solid black;
border-bottom:none;
position:relative;
z-index:1;
outline:none;
}

.simpleTab .tab-content {
clear:both;
padding:10px;
background-color:yellow;
border:1px solid black;
position:relative;
z-index:2;
top:-1px;
height:170px;
}

.simpleTab ul.tab-wrapper li a.activeTab {
background-color:yellow;
color:black;
z-index:3;
}

Setelah kerangka tercipta, seleksi grup elemen yang Anda buat dan terapkan plugin SimpleTab seperti ini:

<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/simpletab.js"></script>
<script>
$(function() {
$('#tab').simpleTab();
});
</script>

Pengaturan Lanjutan

Ada beberapa opsi tambahan di dalamnya yang bisa Anda atur sesuai dengan kebutuhan:

$('#tab').simpleTab({
active: 1,
fx: null,
showSpeed: 400,
hideSpeed: 400,
showEasing: null,
hideEasing: null
});
OpsiKeterangan
activeDigunakan untuk menentukan tab ke berapa yang akan ditampilkan saat pertama kali
fxDigunakan untuk menentukan tipe efek animasi saat pergantian tab terjadi. Ada tiga macam efek lanjutan, yaitu "fade", "slide" dan "fancyslide". Jika tipe efek tidak ditentukan, pergantian tabulasi akan berjalan tanpa efek animasi
showSpeedDigunakan untuk menentukan kecepatan pembukaan konten tab
hideSpeedDigunakan untuk menentukan kecepatan penutupan konten tab
showEasingDigunakan untuk menentukan tipe easing saat pembukaan konten tab
hideEasingDigunakan untuk menentukan tipe easing saat penutupan konten tab.

Navigasi CSS3 Sohtanaka


Navigasi CSS3 Sohtanaka
Navigasi Sohtanaka, versi CSS3


Eksperimen sederhana untuk menciptakan navigasi dengan efek hover menggulung dari Sohtanaka yang dulu pernah Saya tuliskan di artikel ini. Kali ini Saya hanya akan menggunakan CSS3 Transisi untuk menganimasikan efek menggulung tiap item menu:

HTML

<nav id='rolling-nav'>
<ul>
<li><a href='#' data-clone='Home'>Home</a></li>
<li><a href='#' data-clone='About'>About</a></li>
<li><a href='#' data-clone='Portfolio'>Portfolio</a></li>
<li><a href='#' data-clone='Comments'>Comments</a></li>
<li><a href='#' data-clone='Contact'>Contact</a></li>
</ul>
</nav>

CSS

#rolling-nav {
font:normal 12px 'Trebuchet MS',Arial,Sans-Serif;
color:white;
text-transform:uppercase;
}

#rolling-nav ul {
height:50px;
margin:0px 0px;
padding:0px 0px;
overflow:hidden;
}

#rolling-nav li {
float:left;
display:inline;
list-style:none;
margin:0px 0px;
padding:0px 0px;
}

#rolling-nav a,
#rolling-nav a:before {
display:block;
margin:0px 0px;
padding:0px 30px;
line-height:50px;
color:white;
text-decoration:none;
background-color:#900;
background-image:-webkit-linear-gradient(top, #900 0%, #6A0808 50%, #620303 50%, #6A0808 100%);
background-image:-moz-linear-gradient(top, #900 0%, #6A0808 50%, #620303 50%, #6A0808 100%);
background-image:-ms-linear-gradient(top, #900 0%, #6A0808 50%, #620303 50%, #6A0808 100%);
background-image:-o-linear-gradient(top, #900 0%, #6A0808 50%, #620303 50%, #6A0808 100%);
background-image:linear-gradient(top, #900 0%, #6A0808 50%, #620303 50%, #6A0808 100%);
-webkit-box-shadow:inset 0px 1px 0px rgba(255,255,255,0.1);
-moz-box-shadow:inset 0px 1px 0px rgba(255,255,255,0.1);
box-shadow:inset 0px 1px 0px rgba(255,255,255,0.1);
position:relative;
/* CSS Transisi */
-webkit-transition:all 0.3s ease-in-out;
-moz-transition:all 0.3s ease-in-out;
-ms-transition:all 0.3s ease-in-out;
-o-transition:all 0.3s ease-in-out;
transition:all 0.3s ease-in-out;
}

#rolling-nav a:before {
content:attr(data-clone); /* Memuat data atribut */
position:absolute;
top:100%;
left:0px;
display:block;
background-color:white;
background-image:-webkit-linear-gradient(top, #ddd, white);
background-image:-moz-linear-gradient(top, #ddd, white);
background-image:-ms-linear-gradient(top, #ddd, white);
background-image:-o-linear-gradient(top, #ddd, white);
background-image:linear-gradient(top, #ddd, white);
border-top:2px solid rgba(0,0,0,0.2);
color:#333;
}

#rolling-nav a:hover {
margin-top:-50px;
margin-bottom:1px;
}


Atribut data-clone digunakan untuk menyimpan nilai kloning yang dituliskan secara manual menggantikan fungsi .clone() dalam JQuery. Efek animasi dibuat dengan cara menganimasikan properti margin dengan CSS transisi.

Squirrel & Peanut - CSS Pagination

Squirrel & Peanut - CSS pagination

Desain elemen halaman berupa navigasi angka yang terispirasi dari tokoh kartun Flying Squirrel. Bentuk setiap item navigasi menggambarkan bahwa mereka adalah kacang-kacang pohon yang sangat disukai oleh tupai terbang ini. Memang tidak mirip, tapi cukup mewakili:

HTML

<div id="blog-pager">
<a class="prev" href="#">«</a>
<a class="num" href="#">1</a>
<a class="num active" href="#">2</a>
<a class="num" href="#">3</a>
<a class="num" href="#">4</a>
<a class="next" href="#">»</a>
</div>

CSS

#blog-pager {
text-align:center;
line-height:36px;
}

#blog-pager a {
font:bold 16px Georgia,Serif;
color:#711F05;
text-decoration:none;
margin:0px auto 10px;
background-color:white;
padding:10px 15px;
-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.2);
-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.2);
box-shadow:0px 1px 2px rgba(0,0,0,0.2);
-webkit-border-radius:40% 0% 40% 40%;
-moz-border-radius:40% 0% 40% 40%;
border-radius:40% 0% 40% 40%;
position:relative;
-webkit-transition:all 0.26s ease-in-out;
-moz-transition:all 0.26s ease-in-out;
-ms-transition:all 0.26s ease-in-out;
-o-transition:all 0.26s ease-in-out;
transition:all 0.26s ease-in-out;
}

#blog-pager a:before,
#blog-pager a.active:after {
content:"";
width:0px;
height:0px;
border:10px solid transparent;
border-color:#B62B00 #B62B00 transparent transparent;
position:absolute;
top:0px;
right:0px;
}

#blog-pager a.active:before,
#blog-pager a.active:after {
border-width:6px;
top:4px;
right:4px;
}

#blog-pager a.active:after {
top:auto;
right:auto;
bottom:4px;
left:4px;
border-color:transparent transparent #B62B00 #B62B00;
}

#blog-pager a:hover,
#blog-pager a.active {
color:white;
background-color:#711F05;
}

#blog-pager a.active {
-webkit-border-radius:40% 0% 40% 0%;
-moz-border-radius:40% 0% 40% 0%;
border-radius:40% 0% 40% 0%;
}

#blog-pager a:active {
background-color:#333;
}

Memperpendek Drop-Down Menu yang Terlalu Panjang

Cara Pertama

Set tinggi maksimal submenu dan nyatakan CSS overflow:

<ul style='max-height:300px;overflow-y:auto;'>
<li><a href='#'>2012</a></li>
<li><a href='#'>2011</a></li>
<li><a href='#'>2010</a></li>
</ul>

Sebenarnya akan lebih baik jika dituliskan secara terpisah dalam selektor CSS eksternal seperti ini:

#nav li ul {
max-height:300px;
overflow-y:auto;
}

Tapi untuk langkah awal (jika Anda masih belum mengerti mengenai penargetan selektor CSS dengan baik) lebih baik mulai dengan cara yang Saya tuliskan pertama kali.

Metode ke Dua: Kalkulasi Tinggi Submenu dengan JavaScript

Caranya adalah dengan menghitung tinggi layar dan menguranginya dengan jarak menu dengan bagian tepi atas layar dan tinggi menu. Hasilnya akan kita jadikan sebagai tinggi submenu:

Kalkulasi Tinggi Submenu
Kalkulasi Tinggi Submenu dengan JQuery
// Teknik CSS Fallback Menu
// Selengkapnya: /2012/03/penanganan-javascript-pada-peramban.html
$('#nav ul.dropdown').removeClass('dropdown');

var nav = $('#nav'),
navLi = $('li', nav),
winHeight = $(window).height();

// Saat pointer mouse berada di atas item menu...
navLi.hover(function() {
var ulHeight = $(this).children('ul').height(); // Dapatkan tinggi submenu
// Tampilkan submenu dengan efek .fadeIn()
$(this).children('ul').stop(true, true).fadeIn('fast');
// Batasi manipulasi tinggi submenu hanya untuk submenu dengan ukuran tinggi lebih dari tinggi layar
if(ulHeight > winHeight) {
$(this).children('ul').css({
// Set tinggi submenu setinggi layar dikurangi tinggi menu + offset menu sebelah atas
'height': winHeight - (nav.height() + nav.offset().top),
'overflow-y': 'auto'
});
}
}, function() {
// Saat pointer mouse keluar dari atas item menu...
// Sembunyikan submenu
$(this).children('ul').hide();
});

Metode ke Tiga

Memadukan kalkulasi pada metode ke dua dengan konsep dasar efek paralaks. Memanfaatkan koordinat pointer mouse untuk mempengaruhi posisi elemen. Di sini kita hanya akan menggunakan koordinat sumbu-Y (selengkapnya):

// Teknik CSS Fallback Menu
// Selengkapnya: /2012/03/penanganan-javascript-pada-peramban.html
$('#nav ul.dropdown').removeClass('dropdown');

var nav = $('#nav'),
navLi = $('li', nav),
winHeight = $(window).height();

// Saat pointer mouse berada di atas item menu...
navLi.hover(function() {
var ulHeight = $(this).children('ul').height(); // Dapatkan tinggi submenu
// Tampilkan submenu dengan efek .fadeIn()
$(this).children('ul').stop(true, true).fadeIn('fast');
// Batasi efek scroll hanya untuk submenu yang memiliki tinggi lebih besar dari tinggi layar
if(ulHeight > winHeight) {
// Set tinggi submenu setinggi layar dikurangi tinggi menu + offset menu sebelah atas
$(this).children('ul').css({
'height': winHeight - (nav.height() + nav.offset().top),
'overflow': 'hidden'
})
// Saat pointer bergerak di atas submenu...
.mousemove(function(e) {
// Set margin-top elemen <li> pertama dengan nilai sebesar jarak koordinat pointer terhadap sumbu-Y
// dikurangi tinggi dan offset sebelah atas menu, kemudian nilainya dikalikan 'negatif' dua untuk mempercepat gerakan
// (e.pageY-$('#nav').height()-$('nav').offset().top)*-2
// [Negatif = Saat pointer bergerak ke bawah, menu akan bergerak ke atas]
$(this).children('li:first').css('margin-top', (e.pageY - nav.height() - nav.offset().top)*-2);
});
}
}, function() {
// Saat pointer mouse keluar dari atas item menu...
// Sembunyikan submenu dengan efek .slideUp() dan kembalikan nilai margin dari elemen <li> yaitu = 0
$(this).children('ul').slideUp('fast').children('li:first').animate({'margin-top':0}, 400);
});

Alternatif lain: Konsep yang sama namun dengan metode yang berbeda » Solution for Very Long Drop-Down Menus

Menjaga Keadaan Hover pada Menu Induk

Masalah yang tampak kecil tapi kita harap bisa diperbaiki adalah mengenai efek hover menu induk pada navigasi bertingkat yang akan menghilang setelah pointer memasuki submenu:

Menu Navigasi Sebelum Diperbaiki
Efek hover pada menu induk menghilang saat pointer memasuki submenu



Itu terjadi karena pada umumnya kita menargetkan efek hover pada elemen tautan saja seperti ini:

nav li a:hover {
background-color:blue;
}

Padahal yang seharusnya kita targetkan adalah elemen list/daftar yang menjadi induk dari submenu, karena submenu berada di dalam elemen <li>, bukan di dalam elemen <a>:

List Item
Susunan Submenu


Sayangnya menargetkan elemen <li> secara sepihak untuk mempertahankan warna menu induk tidak bisa kita lakukan karena efek hover berada pada elemen <a>, sehingga saat pointer keluar dari <a> maka efek hover akan menghilang. Tapi berbeda jika kita menargetkan elemen <li> kemudian memanfaatkan sikap hover pada elemen tersebut untuk mengeset warna direct children tautan di dalamnya:

nav li a:hover,
nav li:hover > a {
background-color:blue;
}

Dengan cara di atas maka warna pada menu induk akan tetap terjaga meskipun pointer sudah meninggalkannya. Karena meskipun sudah keluar, tapi pada dasarnya pointer masih berada di dalam elemen <li> induk:

Menu Navigasi Sesudah Diperbaiki
Warna hover pada menu induk tetap terjaga




Artikel Terkait:
Mari Berbicara Soal Menu Navigasi

Recent Post dan Recent Comment pada Drop Down Menu??

Recent Post dan Recent Comment pada Drop Down Menu??
Widget Blogger pada Menu Navigasi

Seringkali Saya melihat beberapa orang mencoba menuliskan semua kategori posting pada drop down menu. Mereka melakukannya secara manual. Saya pikir, seandainya Saya bisa menggunakan JSON untuk ini, maka mereka tidak perlu lagi repot-repot memperbaharui menu setiap kali label baru ditambahkan.

Tapi setelah Saya coba ternyata hasilnya proses muat halaman menjadi sangat lambat. Jadi Saya mencoba menggunakan alternatif menarik lainnya, yaitu widget recent post dan recent comment yang Saya letakkan pada menu-menu sekunder. Kita tahu bahwa kebanyakan widget semacam ini dibangun oleh elemen-elemen daftar, oleh karena itulah kita bisa menaruhnya dengan sangat pas ke dalam menu (yang juga dibangun oleh elemen-elemen daftar).

Masih sama. Halaman menjadi sedikit lebih lambat. Ya, itu terjadi karena widget-widget ini harus memanggil feed posting untuk menampilkan isi widget tersebut. Terlebih lagi, menu navigasi secara umum diletakan di bagian atas, sehingga jika proses pemuatan menu navigasi lebih lambat dari biasanya, maka peramban akan terlambat pula saat membaca elemen-elemen di bawahnya, karena peramban membaca seperti manusia, dari kiri atas menuju ke kanan bawah (Kesimpulan: Proses muat halaman menjadi lambat).

Solusi Saya adalah dengan cara meletakkan menu navigasi ini pada bagian paling bawah, tepatnya di atas </body> sehingga kita harap widget ini akan memulai proses pemuatan posting saat elemen-elemen di atasnya sudah cukup siap. Dan untuk mengangkat menu navigasi yang berada di bawah menuju ke atas, Saya menggunakan posisi absolute dengan nilai top sebesar 0:

Masuklah ke menu Template kemudian klik Edit HTML dan klik Lanjutkan:

Edit HTML Blogger
Mengedit HTML

Temukan kode ini:

</head>

Salin kode ini dan letakkan di atasnya:

<style>
#autonav {
position:absolute;
top:0;
right:0;
left:0;
z-index:9999;
margin:0;
padding:0;
font:normal normal 11px/normal Helmet,Freesans,Sans-Serif;
color:white;
border-bottom:2px solid #333;
-webkit-box-shadow:0 1px 7px rgba(0,0,0,.4);
-moz-box-shadow:0 1px 7px rgba(0,0,0,.4);
box-shadow:0 1px 7px rgba(0,0,0,.4);
}

#autonav ul {
margin:0;
padding:0;
height:30px;
background-color:#0F5079;
}

#autonav ul li {
list-style:none;
display:inline;
float:left;
margin:0;
padding:0;
position:relative;
}

#autonav ul li a {
display:block;
line-height:30px;
height:30px;
overflow:hidden;
margin:0;
padding:0 15px;
border-left:1px solid #155F90;
border-right:1px solid #082E46;
text-decoration:none;
text-shadow:0 -1px 0 rgba(0,0,0,.4);
color:white;
font-weight:bold;
}

#autonav ul li a:hover,
#autonav ul li:hover > a {
background-color:#0F486C;
border-right-color:#082434;
}

#autonav ul ul {
position:absolute;
width:220px;
height:auto;
top:100%;
left:0;
z-index:9999;
background-color:#111;
-webkit-box-shadow:0 1px 3px rgba(0,0,0,.7);
-moz-box-shadow:0 1px 3px rgba(0,0,0,.7);
box-shadow:0 1px 3px rgba(0,0,0,.7);
overflow:visible !important;
display:none;
}

#autonav ul ul:before {
content:"";
width:0;
height:0;
border:7px solid transparent;
border-bottom-color:#111;
position:absolute;
top:-14px;
left:24px;
}

#autonav ul ul li {
display:block;
float:none;
}

#autonav ul ul li a {
border:none;
color:#999;
}

#autonav ul ul ul {
top:0;
left:100%;
}

#autonav li:hover > ul {display:block}

/* Khusus JSON */
#autonav ul.json-dropdown {overflow:hidden}

#autonav ul.json-dropdown li {
cursor:pointer;
display:block;
padding:7px 10px;
margin:0;
overflow:hidden;
}

#autonav ul.json-dropdown li a {
line-height:14px;
height:auto !important;
padding:0;
}

#autonav ul.json-dropdown li a:hover {
text-decoration:underline;
background:transparent;
}

#autonav li ul li a:hover,
#autonav li ul.json-dropdown li:hover {background-color:#000}

#autonav ul.json-dropdown img.rp-thumb {
padding:0;
outline:none;
border:2px solid #333;
background-color:#02406C;
display:block;
float:left;
margin:0 10px 0 0;
width:40px;
height:40px;
}

#autonav .subposts span,
#autonav .subcomments span {
font-family:Verdana,Tahoma,Helmet,Freesans,Sans-Serif;
color:#666;
font-size:9px;
}

/* Drop down menu untuk ukuran yang cukup lebar */
#autonav .wide {width:400px}
</style>
<script>
//<![CDATA[
var numpost = 7,
numcomment = 7,
cmtext = "Komentar",
cmsumm = 100,
pBlank = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAA3NCSVQICAjb4U/gAAAADElEQVQImWOor68HAAL+AX7vOF2TAAAAAElFTkSuQmCC";
//]]>
</script>
<script src='http://dte-project.googlecode.com/svn/trunk/json-dropdown.js'></script>

Setelah itu temukan kode ini:

</body>

Salin kerangka menu ini dan letakkan di atasnya:

<nav id='autonav'>
<ul>
<li><a href='/'>Beranda</a></li>
<li><a href='#'>Profil</a></li>
<li><a href='#'>Terbaru</a>
<ul class='json-dropdown subposts wide'>
<script src='http://nama_blog.blogspot.com/feeds/posts/summary?alt=json-in-script&amp;callback=dropdownposts'></script>
</ul>
</li>
<li><a href='#'>Komentar Terakhir</a>
<ul class='json-dropdown subcomments'>
<script src='http://nama_blog.blogspot.com/feeds/comments/summary?alt=json-in-script&amp;callback=dropdowncomments'></script>
</ul>
</li>
<li><a href='#'>Kontak</a>
<ul>
<li><a href='#'>Lorem Ipsum</a></li>
<li><a href='#'>Dolor Sit Amet</a></li>
</ul>
</li>
</ul>
</nav>
  • Tentukan jumlah posting menu recent post pada variabel numpost
  • Tentukan jumlah posting recent comment pada variabel numcomment
  • Tentukan label komentar pada variabel cmtext (misal: 17 Komentar)
  • pBlank digunakan untuk menampilkan gambar cadangan pada recent post yang tidak memiliki gambar mini
  • Tentukan jumah ringkasan komentar pada variabel cmsumm
  • Ganti URL yang Saya beri tanda dengan URL blogmu.

JQuery - Menu Lavalamp

JQuery - Menu Lavalamp

Ini adalah perbaikan dari salah satu artikel yang sudah pernah Saya tuliskan sebelumnya. Hanya saja, karena versi yang lama tampak tidak begitu stabil jadi Saya memperbaikinya sekarang. Dengan beberapa drop-down menu tambahan yang sayangnya (menurut Saya) tidak begitu stabil. Seharusnya di sini kita memerlukan plugin hoverintent, tapi sudahlah. Artikel yang lama sudah Saya hapus T_T

Saya masih menggunakan kode dasar yang sama dari Quenees. Sedangkan inspirasi warna Saya ambil dari situs WebcamMax:


Langkah Pertama: JQuery dan Plugin Easing

Pertama-tama Anda harus memanggil JQuery dan plugin easing. Ambil kodenya di sini.

Jika sudah, segera temukan kode ini:

]]></b:skin>

Salin kode di bawah ini dan letakkan di atasnya:

#lava {
background-color:#274D5A;
background-image:-webkit-linear-gradient(top,#274D5A,#1E3B45);
background-image:-moz-linear-gradient(top,#274D5A,#1E3B45);
background-image:-ms-linear-gradient(top,#274D5A,#1E3B45);
background-image:-o-linear-gradient(top,#274D5A,#1E3B45);
background-image:linear-gradient(top,#274D5A,#1E3B45);
-webkit-box-shadow:
inset 0px 1px 0px rgba(255,255,255,0.2),
0px 1px 2px rgba(0,0,0,0.4);
-moz-box-shadow:
inset 0px 1px 0px rgba(255,255,255,0.2),
0px 1px 2px rgba(0,0,0,0.4);
box-shadow:
inset 0px 1px 0px rgba(255,255,255,0.2),
0px 1px 2px rgba(0,0,0,0.4);
-webkit-border-radius:3px;
-moz-border-radius:3px;
border-radius:3px;
position:relative;
text-align:center;
height:30px;
}

#lava ul {
margin:0px 0px;
padding:0px 0px;
list-style:none;
position:absolute;
left:0px;
top:0px;
z-index:100;
}

#lava ul li {
position:relative;
float:left;
}

#lava ul li a {
display:block;
padding:0px 15px;
font:bold 11px/30px Tahoma,Verdana,Arial,Sans-Serif;
text-decoration:none;
color:#70A4B2;
text-shadow:0px -1px 0px rgba(0,0,0,0.4);
}

#lava #box {
position:absolute;
left:0px;
top:0px;
z-index:50;
background-color:#1E3B45;
background-image:-webkit-linear-gradient(bottom,#274D5A,#1E3B45);
background-image:-moz-linear-gradient(bottom,#274D5A,#1E3B45);
background-image:-ms-linear-gradient(bottom,#274D5A,#1E3B45);
background-image:-o-linear-gradient(bottom,#274D5A,#1E3B45);
background-image:linear-gradient(bottom,#274D5A,#1E3B45);
}

#lava #box .head {
height:30px;
border-left:2px solid #AD1717;
}

#lava li ul {
width:170px;
height:auto;
background-color:#274D5A;
position:absolute;
top:100%;
left:0px;
z-index:77;
border-left:2px solid #AD1717;
-webkit-box-shadow:0px 1px 3px rgba(0,0,0,0.4);
-moz-box-shadow:0px 1px 3px rgba(0,0,0,0.4);
box-shadow:0px 1px 3px rgba(0,0,0,0.4);
display:none;
}

/* CSS Fallback */
#lava li:hover ul.fallback {display:block;}

#lava li li {
float:none;
display:block;
text-align:left;
}

#lava li li a {padding:0px 15px;}
#lava li li a:hover {background-color:#1E3B45;}

Setelah itu temukan kode ini:

</head>

salin script di bawah ini dan letakkan di atasnya:

<script type="text/javascript">
//<![CDATA[
// Original: http://www.queness.com/post/530/simple-lava-lamp-menu-tutorial-with-jquery
// Modified by Taufik Nurrohman: http://hompimpaalaihumgambreng.blogspot.com
$(function() {
// Append the floating bar
$('#lava').append('<div id="box"><div class="head"></div></div>')
// remove the fallback class if JavaScript enabled
.find('ul.fallback').removeClass('fallback');
// Retrieve the selected item position and width
var default_left = Math.round($('#lava li.selected').offset().left - $('#lava').offset().left),
default_width = $('#lava li.selected').width();

// Set the floating bar position and width
$('#box').css({left: default_left});
$('#box .head').css({width: default_width});

// if mouseover the menu item
$('#lava > ul > li').mouseenter(function() {

// Get the position and width of the menu item
left = Math.round($(this).offset().left - $('#lava').offset().left);
width = $(this).width();

// Set the floating bar position, width and transition
$('#box').stop(false, true).animate({left:left},{duration:1000, easing:'easeOutElastic'});
$('#box .head').stop(false, true).animate({width:width},{duration:1000, easing:'easeOutElastic'});
$('ul', this).filter(':not(:animated)').slideDown(600, 'easeInOutExpo');
// if user click on the menu
}).click(function() {
// reset the selected item
$('#lava li').removeClass('selected');
// select the current item
$(this).addClass('selected');
});

// If the mouse leave the menu item,
// hide the dropdown menu and reset the floating bar to the selected item
$('#lava li').mouseleave(function() {
$('ul', this).slideUp(600, 'easeOutQuart');
}).parents('#lava').mouseleave(function() {
// Retrieve the selected item position and width
default_left = Math.round($('#lava li.selected').offset().left - $('#lava').offset().left);
default_width = $('#lava li.selected').width();
// Set the floating bar position, width and transition
$('#box').stop(false, true).animate({left:default_left},{duration:1500, easing:'easeOutElastic'});
$('#box .head').stop(false, true).animate({width:default_width},{duration:1500, easing:'easeOutElastic'});
});
});
//]]>
</script>

Terakhir, letakkan kerangka menu ini di tempat yang Anda inginkan (pelajari beberapa alternatif peletakkan menu navigasi horizontal di sini):

<nav id='lava'>
<ul>
<li><a href='#'>Beranda</a></li>
<li><a href='#'>Profil</a></li>
<li><a href='#'>Jurnal</a>
<ul class='fallback'>
<li><a href='#'>2007</a></li>
<li><a href='#'>2008</a></li>
<li><a href='#'>2009</a></li>
<li><a href='#'>2010</a></li>
<li><a href='#'>2011</a></li>
<li><a href='#'>2012</a></li>
</ul>
</li>
<li class='selected'><a href='#'>Komentar</a></li>
<li><a href='#'>Kontak</a></li>
<li><a href='#'>Cari</a>
<ul class='fallback'>
<li><a href='#'>CSS</a></li>
<li><a href='#'>JQuery</a></li>
<li><a href='#'>HTML</a></li>
<li><a href='#'>JavaScript</a></li>
</ul>
</li>
</ul>
</nav>

Kode yang Saya beri tanda digunakan untuk menentukan dimana lava akan berhenti. Di sini Saya meletakkannya di menu Komentar, itulah sebabnya mengapa lava selalu berhenti pada menu Komentar.

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. Homtimpa - All Rights Reserved
Template Modify by Creating Website
Proudly powered by Blogger