Wednesday, November 30, 2011

Pure CSS3 Windows7 Start Menus - A CSS3 Experiment by Taufik Nurrohman

Pure CSS3 Windows7 Start Menus - A CSS3 Experiment by Taufik Nurrohman

Guess it! Is the picture above original Windows Operating System or just an imitation made ​​using CSS3?
The answer is CSS3. For some reason, maybe this is the funniest of the first things I did in my life. Because, for what I create Windows with CSS? It was a waste of time!

Well, maybe that's the way of art. No one knows until you feel the satisfaction. And I always like the moment:


About Opera

Notes that Opera doesn't yet support the CSS radial gradient:


Pure CSS3 Windows7 Start Menus
Opera doesn't yet support CSS3 Radial Gradient


How About IE?

Please don't force me to reveal about IE. Very tragic! T_T

Labels: ,

Monday, November 28, 2011

CSS3 Radial Gradient

Pembaharuan: 23 Januari 2012

CSS3 Radial Gradient

BAB 1: Perkenalan

Penulisan gradien radial secara umum untuk masing-masing peramban dapat dituliskan seperti ini:

div {
  /* Chrome & Safari 4+ */
  background-image:-webkit-radial-gradient(posisi, ukuran dan sifat, color stop/baris warna);

 /* Firefox 3.6+ */
  background-image:-moz-radial-gradient(posisi, ukuran dan sifat, color stop/baris warna);

 /* Internet Explorer 10+ (Setahu Saya Masih Draft) */
  background-image:-ms-radial-gradient(posisi, ukuran dan sifat, color stop/baris warna);

 /* Opera 12 (Setahu Saya Masih Draft) */
  background-image:-o-radial-gradient(posisi, ukuran dan sifat, color stop/baris warna);

 /* W3C */
  background-image:radial-gradient(posisi, ukuran dan sifat, color stop/baris warna);
}

BAB 2: Perkenalan Nilai Pembangun

1. Posisi

Posisi adalah tentang di sebelah mana gradien akan ditampilkan. Berhubung radial gradient adalah gradien berbentuk lingkaran, maka posisi juga wajib untuk ditentukan. Menentukan posisi umumnya dapat dituliskan menggunakan satuan persen atau piksel dengan mengambil sudut pandang sumbu-x dan sumbu-y:

Default / Menerapkan Baris Warna tanpa Mendeklarasikan Posisi

div {
  background:-webkit-radial-gradient(blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(blue 30px, whitesmoke 100%);
  background:radial-gradient(blue 30px, whitesmoke 100%);
}

Menerapkan Baris Warna dan Mendeklarasikan Posisi 50% 50%

div {
  background:-webkit-radial-gradient(50% 50%, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(50% 50%, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(50% 50%, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(50% 50%, blue 30px, whitesmoke 100%);
  background:radial-gradient(50% 50%, blue 30px, whitesmoke 100%);
}

Mendeklarasikan Posisi Offset

Di sini Saya tambahkan juga sifat radial gradien. Karena jika tidak, efek offset tidak akan terlalu jelas terlihat dan dikhawatirkan ini akan membingungkan Anda pada bagian ini. Yang penting jangan pedulikan deklarasi sifat gradien untuk saat ini. Fokus saja pada offsetnya dan bangun logikamu sendiri. Sifat gradien akan dibahas lebih detail setelah ini:

div {
  background:-webkit-radial-gradient(30% 100%, circle closest-corner, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(30% 100%, circle closest-corner, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(30% 100%, circle closest-corner, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(30% 100%, circle closest-corner, blue 30px, whitesmoke 100%);
  background:radial-gradient(30% 100%, circle closest-corner, blue 30px, whitesmoke 100%);
}
Koordinat Posisi
Koordinat Posisi

2. Sifat-Sifat dan Penentuan Bentuk

Mulai dari sini penjelasannya akan semakin rumit. Bersiaplah!!! WARRRGGHH!!!!

closest-side / contain

Mendeklarasikan closest-side akan membuat dimensi gradien menyesuaikan diri berdasarkan batas area (sisi-sisi area). Saat gradien menyebar dari pusat, maka akhirnya akan berhenti pada sisi area terdekat. Nilai closest-side memiliki arti yang sama dengan contain.

div {
  background:-webkit-radial-gradient(50% 50%, closest-side, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(50% 50%, closest-side, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(50% 50%, closest-side, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(50% 50%, closest-side, blue 30px, whitesmoke 100%);
  background:radial-gradient(50% 50%, closest-side, blue 30px, whitesmoke 100%);
}

closest-corner

Mendeklarasikan closest-corner akan membuat dimensi gradien menyesuaikan diri berdasarkan sudut terdekat area. Saat gradien menyebar dari pusat, maka gradien akan terus menembus melewati sisi-sisi area hingga salah satu sisi diagonal radialnya menyentuh ujung area terdekat, pada saat itu penyebaran akan berhenti.

div {
  background:-webkit-radial-gradient(50% 50%, closest-corner, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(50% 50%, closest-corner, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(50% 50%, closest-corner, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(50% 50%, closest-corner, blue 30px, whitesmoke 100%);
  background:radial-gradient(50% 50%, closest-corner, blue 30px, whitesmoke 100%);
}

Sifat closest-side dan closest-corner

closest-side dan closest-corner

farthest-side

Mendeklarasikan farthest-side akan membuat dimensi gradien menyesuaikan diri berdasarkan sisi terjauh area. Saat gradien menyebar dari pusat, maka akhirnya akan berhenti pada sisi area terjauh. Sisi area terdekat diabaikan dan akan terus dilewati. Akan sangat mudah mengetahui sifatnya jika kita terapkan gradien menyudut dengan bentuk elips (elips di sini maksudnya adalah bentuk radial menyesuaikan diri berdasarkan ukuran area dengan lebar dan tinggi yang tidak sama:

div {
  background:-webkit-radial-gradient(10% 50% ,farthest-side, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(10% 50%, farthest-side, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(10% 50%, farthest-side, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(10% 50%, farthest-side, blue 30px, whitesmoke 100%);
  background:radial-gradient(10% 50%, farthest-side, blue 30px, whitesmoke 100%);
}

farthest-corner / cover

Mendeklarasikan farthest-corner akan membuat dimensi gradien menyesuaikan diri berdasarkan sudut terjauh area. Saat gradien menyebar dari pusat, maka gradien akan terus menembus melewati sisi-sisi dan ujung-ujung area terdekat hingga salah satu sisi diagonal radialnya menyentuh ujung area terjauh, pada saat itu penyebaran akan berhenti. farthest-corner bersinonim dengan cover:

div {
  background:-webkit-radial-gradient(10% 50%, farthest-corner, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(10% 50%, farthest-corner, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(10% 50%, farthest-corner, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(10% 50%, farthest-corner, blue 30px, whitesmoke 100%);
  background:radial-gradient(10% 50%, farthest-corner, blue 30px, whitesmoke 100%);
}

Sifat farthest-side dan farthest-corner

CSS3 radial Farthest Side dan Farthest Corner
farthest-side dan farthest-corner
KonstanDeskripsi
closest-side / containAkhir gradien akan berhenti pada batas area paling dekat dengan pusat (untuk circle) atau memenuhi kedua sisi vertikal dan horizontal terdekat dari pusat gradien (untuk elips).
farthest-sideBerlawanan dengan closest-side. Akhir gradien akan berhenti pada sudut terjauh dari pusat gradien (akan terlihat jelas perbedaannya jika letak gradien tidak berada tepat di tengah).
closest-cornerAkhir gradien akan berhenti tepat pada sudut terdekat area dari pusat gradien.
farthest-corner / coverAkhir gradien akan bernenti pada sudut terjauh dari pusat gradien.

3. Baris Warna & Color Stop

Baris warna dan pengertian color-stop bisa Anda pelajari pada artikel sebelumya.

BAB 3: Duplikasi Gradien

Seperti halnya CSS3 Linear Gradient, duplikasi gradien dapat dibuat dengan cara menambahkan imbuhan/affiks repeating pada deklarasi gradien radial:

div {
  background:-webkit-repeating-radial-gradient(center, closest-side, indigo, gray 5%, darkgreen 10%, darkred 15%, darkblue 20%);
  background:-moz-repeating-radial-gradient(center, closest-side, indigo, gray 5%, darkgreen 10%, darkred 15%, darkblue 20%);
  background:-ms-repeating-radial-gradient(center, closest-side, indigo, gray 5%, darkgreen 10%, darkred 15%, darkblue 20%);
  background:-o-repeating-radial-gradient(center, closest-side, indigo, gray 5%, darkgreen 10%, darkred 15%, darkblue 20%);
  background:repeating-radial-gradient(center, closest-side, indigo, gray 5%, darkgreen 10%, darkred 15%, darkblue 20%);
}

BAB 4: Tambahan

Selain menggunakan persentase dan piksel, nilai posisi gradien juga bisa dituliskan dengan direksi seperti biasa (top, right, bottom, left, top left, top right, bottom left, bottom right, center):

div {
  background:-webkit-radial-gradient(top left, farthest-corner, blue 30px, whitesmoke 100%);
  background:-moz-radial-gradient(top left, farthest-corner, blue 30px, whitesmoke 100%);
  background:-ms-radial-gradient(top left, farthest-corner, blue 30px, whitesmoke 100%);
  background:-o-radial-gradient(top left, farthest-corner, blue 30px, whitesmoke 100%);
  background:radial-gradient(top left, farthest-corner, blue 30px, whitesmoke 100%);
}

circle dan ellipse bisa ditambahkan sebelum menuliskan sifat untuk sekedar mempertegas bentuk radial dari gradien. Apakah akan tetap mempertahankan bentuknya yang bulat sempurna meski area tidak sama tinggi dan lebar, ataukah memilih untuk membentuk elips, atau membiarkan mereka menyesuaikan diri dengan lingkungannya (ellipse sebenarnya tidak begitu penting):

div {
  background:-webkit-radial-gradient(30% 30%, circle closest-corner, white, black);
  background:-moz-radial-gradient(30% 30%, circle closest-corner, white, black);
  background:-ms-radial-gradient(30% 30%, circle closest-corner, white, black);
  background:-o-radial-gradient(30% 30%, circle closest-corner, white, black);
  background:radial-gradient(30% 30%, circle closest-corner, white, black);
}

div {
  background:-webkit-radial-gradient(30% 30%, ellipse closest-corner, white, black);
  background:-moz-radial-gradient(30% 30%, ellipse closest-corner, white, black);
  background:-ms-radial-gradient(30% 30%, ellipse closest-corner, white, black);
  background:-o-radial-gradient(30% 30%, ellipse closest-corner, white, black);
  background:radial-gradient(30% 30%, ellipse closest-corner, white, black);
}

Referensi:

Labels: ,

CSS3 Fly Out Menu

Terinspirasi dari konsep Beautiful Slide Out Navigation dengan efek slidingnya yang sangat menarik, kali ini Saya akan membuat efek tersebut hanya dengan CSS3. Kabar baik bagi Anda yang tidak suka atau belum mengerti tentang JQuery. Instalasi menu ini sangat mudah dilakukan:


CSS3 Menu



Pertama-tama masuklah ke halaman editor HTML templatemu. Salin kode CSS ini, kemudian letakkan di atas kode ]]></b:skin> atau </style>:

ul#navigation {
  position:fixed;
  margin:0px;
  padding:0px;
  top:0px;
  right:10px;
  list-style:none;
  z-index:999999;
  width:735px;
  font:normal 11px Arial,Sans-Serif;
  -webkit-animation:2s fxhompinav ease-in-out;
  -moz-animation:2s fxhompinav ease-in-out;
  -ms-animation:2s fxhompinav ease-in-out;
  animation:2s fxhompinav ease-in-out;
}

ul#navigation li {
  width:103px;
  display:inline;
  float:left;
  margin:0 0 0 2px;
}

ul#navigation li a {
  display:block;
  float:left;
  margin-top:-78px;
  width:100px;
  height:22px;
  background-color:#111;
  background-repeat:no-repeat;
  background-position:50% 150px;
  border:2px solid #e6e6e6;
  -webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.5);
  -moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.5);
  box-shadow:0 1px 2px rgba(0, 0, 0, 0.5);
  -moz-border-radius:0px 0px 10px 10px;
  -webkit-border-bottom-right-radius:10px;
  -webkit-border-bottom-left-radius:10px;
  -khtml-border-bottom-right-radius:10px;
  -khtml-border-bottom-left-radius:10px;
  border-radius:0px 0px 10px 10px;
  color:#ccc;
  text-decoration:none;
  text-align:center;
  text-shadow:0 1px 1px #000;
  padding-top:85px;
  -webkit-transition:margin-top 0.3s ease-in-out,background-position 0.4s ease-out;
  -moz-transition:margin-top 0.3s ease-in-out,background-position 0.4s ease-out;
  -o-transition:margin-top 0.3s ease-in-out,background-position 0.4s ease-out;
  transition:margin-top 0.3s ease-in-out,background-position 0.4s ease-out;
}

ul#navigation li a:hover {
  margin-top:-3px;
  background-position:50% 10px;
  color:#fff;
  position:relative;
}

ul#navigation li a:hover:after {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  top:100%;
  left:45%;
  margin-top:-10px;
  border-width:5px;
  border-style:solid;
  border-color:transparent transparent #e6e6e6 transparent;
}

ul#navigation li:nth-child(1) a {
  background-image:url(http://4.bp.blogspot.com/-Yofmy0GpcY0/TtLyWnIr0jI/AAAAAAAABYQ/di5O82hzbrA/s1600/home.png);
}
ul#navigation li:nth-child(2) a {
  background-image:url(http://2.bp.blogspot.com/-2OSziw4y00Y/TtLybmgNpbI/AAAAAAAABZA/CfXysrknh5k/s1600/user.png);
}
ul#navigation li:nth-child(3) a {
  background-image:url(http://4.bp.blogspot.com/-PafE8z-wPaE/TtLya7QCLRI/AAAAAAAABY0/2ggfAcDdL4c/s1600/search.png);
}
ul#navigation li:nth-child(4) a {
  background-image:url(http://4.bp.blogspot.com/-70Y4BlTmU2k/TtLyY5xd4wI/AAAAAAAABYo/3f2DFCIXHSY/s1600/photo_camera.png);
}
ul#navigation li:nth-child(5) a {
  background-image:url(http://3.bp.blogspot.com/-5gyngAu_azs/TtLyaHMRCpI/AAAAAAAABYs/njvXEAaM4AM/s1600/rss_feed.png);
}
ul#navigation li:nth-child(6) a {
  background-image:url(http://1.bp.blogspot.com/-B6GMO8E3wCQ/TtLyXVvr9lI/AAAAAAAABYY/s5EbibQXFGE/s1600/ipod.png);
}
ul#navigation li:nth-child(7) a {
  background-image:url(http://3.bp.blogspot.com/-m9LeNCW7A4s/TtLyYIsDygI/AAAAAAAABYc/TBmNRPoQZ3s/s1600/mail.png);
}

@-webkit-keyframes fxhompinav {
  from{margin-right:-1000px;}
  to  {margin-right:0px;}
}

@-moz-keyframes fxhompinav {
  from{margin-right:-1000px;}
  to  {margin-right:0px;}
}

@-ms-keyframes fxhompinav {
  from{margin-right:-1000px;}
  to  {margin-right:0px;}
}

@keyframes fxhompinav {
  from{margin-right:-1000px;}
  to  {margin-right:0px;}
}

Berikutnya temukan kode ini:

</body>

Salin kode di bawah ini, kemudian letakkan tepat di atasnya:

<ul id='navigation'>
     <li><a href='#'>Home</a></li>
     <li><a href='#'>About</a></li>
     <li><a href='#'>Search</a></li>
     <li><a href='#'>Photos</a></li>
     <li><a href='#'>Rss Feed</a></li>
     <li><a href='#'>Podcasts</a></li>
     <li><a href='#'>Contact</a></li>
</ul>

Klik Simpan Template. Ganti kode # dengan alamat URL. Jika perlu ubah juga nama-nama menu sesuai dengan keinginan.

Labels: ,

Saturday, November 26, 2011

CSS3 Linear Gradient

CSS3 Linear Gradient


BAB 1: Perkenalan Sintaks

Chrome & Safari 4+

background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#000));
Pertama kali, sintaks gradien Webkit dimulai dengan awalan -webkit-gradient. Tipe gradien masih dipisahkan. left top dan left bottom adalah start point. Atau Saya lebih suka menyebutnya sebagai kedatangan/awal pertama kali gradien diproduksi. Apakah dari kiri atas, kiri bawah atau yang lainnya.

Chrome 10+ & Safari 5.1+

background: -webkit-linear-gradient(top, #fff, #000);
Sintaks Webkit berikutnya mengalami perubahan dengan menuliskan tipe gradien di depan prefiks itu sendiri. top adalah direksi bahwa gradien akan tumbuh mulai dari atas menuju ke bawah.

Firefox 3.6+

background: -moz-linear-gradient(top,  #fff,  #000);
Aturannya sama dengan -webkit-linear-gradient.

Opera 10+

background: -o-linear-gradient(top, #fff, #000);
Aturannya sama dengan -webkit-linear-gradient.

W3C

background: linear-gradient(top, #fff, #000);
Aturannya sama dengan -webkit-linear-gradient. Atau lebih tepatnya: Webkit, Firefox, IE 10+ dan Opera mengikuti peraturan W3C ini.

Internet Explorer 6 - 9

filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#000000');
GradientType ada dua: 0 dan 1.
0 akan memberikan direksi gradien dari atas ke bawah, 1 akan memberikan direksi gradien dari kiri ke kanan.

Internet Explorer 10+

background: -ms-linear-gradient(top, #fff, #000);
Aturannya sama dengan -webkit-linear-gradient.


BAB 2: Direksi dan Sudut

A. Direksi

Contoh Sintaks Lengkap

div {
  background:-webkit-linear-gradient(left top, red, blue);
  background:-moz-linear-gradient(left top, red, blue);
  background:-ms-linear-gradient(left top, red, blue);
  background:-o-linear-gradient(left top, red, blue);
  background:linear-gradient(left top, red, blue);
}

START POINT: RED
END POINT: BLUE
DireksiTampilan
top
right
bottom
left
left top
left bottom
right top
right bottom

B. Sudut

  • 0deg sama dengan left.
  • 90deg sama dengan bottom.
  • 180deg sama dengan right.
  • 270deg sama dengan top.
  • 360deg sama dengan left.

Contoh Sintaks Lengkap

div {
  background:-webkit-linear-gradient(90deg, red, blue);
  background:-moz-linear-gradient(90deg, red, blue);
  background:-ms-linear-gradient(90deg, red, blue);
  background:-o-linear-gradient(90deg, red, blue);
  background:linear-gradient(90deg, red, blue);
}

START POINT: RED
END POINT: BLUE
SudutTampilan
0deg
45deg
77deg
90deg


BAB 3: Warna Berganda

Kemampuan CSS Gradient tidak hanya sebatas menerjemahkan dua warna saja sebagai warna dasar gradien, tetapi juga bisa lebih dari itu. Aturannya sangat sederhana: Warna awal dimulai dari kiri begitu seterusnya menuju ke kanan:

div {
  background:-webkit-linear-gradient(left, red, orange, yellow, green, blue, indigo, purple);
  background:-moz-linear-gradient(left, red, orange, yellow, green, blue, indigo, purple);
  background:-ms-linear-gradient(left, red, orange, yellow, green, blue, indigo, purple);
  background:-o-linear-gradient(left, red, orange, yellow, green, blue, indigo, purple);
  background:linear-gradient(left, red, orange, yellow, green, blue, indigo, purple);
}


BAB 4: Color Stop

Color Stop digunakan untuk mengubah keseimbangan pembagian ruang pada masing-masing warna. Secara normal, jika terdapat dua warna dalam satu area, maka warna pertama akan mendapatkan bagian sebesar 0% dari ruangan sedangkan warna yang ke dua akan mendapatkan 100%. (?)
Dengan color stop, Anda bisa mengatur pembagian ruangan baik dengan persentase maupun piksel:

div {
  background:-webkit-linear-gradient(left, red 0%, green 75%, blue 100%);
  background:-moz-linear-gradient(left, red 0%, green 75%, blue 100%);
  background:-ms-linear-gradient(left, red 0%, green 75%, blue 100%);
  background:-o-linear-gradient(left, red 0%, green 75%, blue 100%);
  background:linear-gradient(left, red 0%, green 75%, blue 100%);
}

div {
  background:-webkit-linear-gradient(left, red 50px, green 90px, blue);
  background:-moz-linear-gradient(left, red 50px, green 90px, blue);
  background:-ms-linear-gradient(left, red 50px, green 90px, blue);
  background:-o-linear-gradient(left, red 50px, green 90px, blue);
  background:linear-gradient(left, red 50px, green 90px, blue);
}


BAB 5: Kelebihan Satuan Pengukuran Persentase dan Satuan Mutlak

Coba Anda ubah ukuran <textarea> di bawah ini dan temukan perbedaannya:

Menggunakan Persentase: Gradien Lebih Fleksibel



Menggunakan Piksel/Satuan Mutlak: Gradien Tidak Fleksibel namun Terukur




BAB 6: Duplikasi Gradien

Gradien juga bisa diduplikasi dengan cara menerapkan sintaks duplikasi gradien. Duplikasi gradien idealnya menggunakan satuan piksel, meskipun beberapa ada juga yang menggunakan persentase. Sekedar untuk memastikan bahwa satu baris gradien yang terbentuk tidak akan memenuhi ruangan, melainkan akan diduplikasikan:

div {
  background:-webkit-repeating-linear-gradient(-45deg, black, orangered 10px, forestgreen 10px, antiquewhite 20px);
  background:-moz-repeating-linear-gradient(-45deg, black, orangered 10px, forestgreen 10px, antiquewhite 20px);
  background:-ms-repeating-linear-gradient(-45deg, black, orangered 10px, forestgreen 10px, antiquewhite 20px);
  background:-o-repeating-linear-gradient(-45deg, black, orangered 10px, forestgreen 10px, antiquewhite 20px);
  background:repeating-linear-gradient(-45deg, black, orangered 10px, forestgreen 10px, antiquewhite 20px);
}
/* Khusus sintaks IE, Saya masih belum yakin karena Saya masih belum menemukan referensi yang tepat */


Referensi:

Labels: ,

Friday, November 25, 2011

Efek Pita Tiga Dimensi dengan CSS

Pita Tiga Dimensi

Mungkin beberapa dari Anda tidak percaya bahwa gambar di atas adalah murni dibuat dengan CSS3. Ya, itu adalah salah satu pemanfaatan CSS Triangle yang menurut Saya paling sempurna:

CSS

.rb-wrap {
  position:relative;
  z-index:1;
}

.ribbon {
  width:60%;
  font:normal bold 16px Arial,Sans-Serif !important;
  position:relative;
  background-color:#ba89b6;
  color:white;
  text-align:center;
  padding:1em 2em;
  margin:0 auto 3em;
  /* Saya tambahkan sedikit efek bayangan */ 
  -webkit-box-shadow:0 1px 1px rgba(0,0,0,.2); 
  -moz-box-shadow:0 1px 1px rgba(0,0,0,.2);
  box-shadow:0 1px 1px rgba(0,0,0,.2);
}

.ribbon:before,
.ribbon:after {
  content:"";
  position:absolute;
  display:block;
  bottom:-1em;
  border:1.5em solid #986794;
  z-index:-1;
}

.ribbon:before {
  left:-2em;
  border-right-width:1.5em;
  border-left-color:transparent;
}

.ribbon:after {
  right:-2em;
  border-left-width:1.5em;
  border-right-color:transparent;
}

.ribbon .ribbon-content:before,
.ribbon .ribbon-content:after {
  content:"";
  position:absolute;
  display:block;
  border-style:solid;
  border-color:#804f7c transparent transparent transparent;
  bottom:-1em;
}

.ribbon .ribbon-content:before {
  left:0;
  border-width:1em 0 0 1em;
}

.ribbon .ribbon-content:after {
  right:0;
  border-width:1em 1em 0 0;
}

HTML

<div class="rb-wrap">
  <p class="ribbon">
    <strong class="ribbon-content">Pita Tiga Dimensi</strong>
  </p>
</div>

Unsur-Unsur Pembangun

Gambar di bawah ini memang tidak begitu menjelaskan tentang bagaimana efek pita tersebut terbentuk, tapi setidaknya gambar-gambar ini bisa memberikan sedikit petunjuk:

CSS3 3D Ribbon
Efek Pita Tiga Dimensi dengan CSS

Labels:

Wednesday, November 23, 2011

Efek Balon Kata dengan CSS

Menciptakan sebuah boks dengan efek rounded corner seperti ini sangat mudah dilakukan dengan cara menerapkan CSS Border Radius. Tapi bagaimana cara Saya menciptakan efek panah kecil di bawah balon kata ini?

Untuk bisa memahami cara membuat efek balon kata seperti ilustrasi di atas, setidaknya Anda harus memahami empat hal di bawah ini:

Kunci Pertama

Kunci pertama terletak pada CSS Pseudo Element :before dan :after. Bentuk segitiga yang Saya buat adalah sebuah elemen palsu yang diciptakan dari CSS Pseudo Element. Di sini Saya tidak mementingkan apakah Anda akan membuat elemen palsu tersebut menggunakan :before atau :after. Saya rasa semuanya akan sama saja, karena di sini kita akan berhadapan dengan posisi absolut. Hanya saja Saya memiliki beberapa saran yang ideal: Jika Anda ingin menciptakan elemen palsu di sebelah kiri atau atas elemen asli gunakanlah :before dan jika Anda ingin menciptakan elemen palsu di sebelah kanan atau bawah elemen asli gunakanlah :after.

CSS Pseudo Element untuk menciptakan efek panah
CSS Pseudo Element untuk menciptakan efek panah

Kunci ke Dua

Efek segitiga dibuat dengan teknik CSS Triangle. Anda bisa mempelajarinya di sini.

Prinsip Peletakan Posisi

Posisi absolut pada elemen akan membuat elemen berpindah tempat berdasarkan koordinat layar, untuk memindahkan koordinat posisi elemen palsu menjadi berdasarkan pada elemen asli, tambahkanlah position:relative pada elemen asli:

.balon-kata {
  position:relative;
}

Nah, kali ini kita akan berhadapan dengan koordinat top, right, bottom dan left seperti halnya CSS Posisi Absolute pada umumnya.
Kita mulai dengan syarat pertama: Jika Anda ingin meletakkan elemen palsu tepat di bawah elemen asli, tuliskan nilai top sebesar 100%. Nilai left dan right bisa disesuaikan sendiri:

Nilai top sebesar 100%
Nilai top sebesar 100%
Kenapa harus 100%?
Oke, kita coba ganti nilai top menjadi 50% atau gunakanlah satuan piksel. maka hasilnya kurang lebih akan tampak seperti ini:

Nilai top sebesar 50%
Nilai top sebesar 50%

Saya yakin sampai di sini Anda sudah mulai mengerti. Gunakanlah imajinasi. Sekarang kita masuki syarat ke dua. Ini hanyalah kesimpulan akhir dari logika di atas:

  • Jika Anda ingin menempatkan elemen palsu tepat di samping kiri elemen asli, atur nilai right menjadi 100%. Nilai top atau bottom bisa disesuaikan sendiri.
  • Jika Anda ingin menempatkan elemen palsu tepat di samping kanan elemen asli, atur nilai left menjadi 100%. Nilai top atau bottom bisa disesuaikan sendiri.
  • Jika Anda ingin menempatkan elemen palsu tepat di atas elemen asli, atur nilai bottom menjadi 100%. Nilai left atau right bisa disesuaikan sendiri.
  • Jika Anda ingin menempatkan elemen palsu tepat di bawah elemen asli, atur nilai top menjadi 100%. Nilai left atau right bisa disesuaikan sendiri.

Produk Akhir

Di atas Saya hanya memberikan prinsip-prinsip peletakan dan pembuatan efek panahnya saja, di bawah ini Saya akan memberikan kode sumber untuk bisa dipelajari lebih lanjut:

.balon-kata.top

.balon-kata.right

.balon-kata.bottom

.balon-kata.left
.balon-kata {
  background:black;
  position:relative;
  padding:15px;
  color:white;
  font:normal 16px Calibri,Arial,Sans-Serif;
  width:300px;
  height:auto;
  -webkit-border-radius:10px;
  -moz-border-radius:10px;
  border-radius:10px;
}

.balon-kata.top:before {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  bottom:100%;
  left:20px;
  border-width:10px;
  border-style:solid;
  border-color:transparent transparent black transparent;
  display:block;
}

.balon-kata.right:after {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  left:100%;
  top:20px;
  border-width:10px;
  border-style:solid;
  border-color:transparent transparent transparent black;
}

.balon-kata.bottom:after {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  top:100%;
  left:20px;
  border-width:10px;
  border-style:solid;
  border-color:black transparent transparent transparent;
  display:block;
}

.balon-kata.left:before {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  right:100%;
  top:20px;
  border-width:10px;
  border-style:solid;
  border-color:transparent black transparent transparent;
}
<div class="balon-kata top"> ... </div>
<div class="balon-kata right"> ... </div>
<div class="balon-kata bottom"> ... </div>
<div class="balon-kata left"> ... </div>

Ada Alternatif Lain? Yang Lebih Kreatif?

Cobalah untuk mewarnai dua sisi border atau gunakanlah CSS Transformasi skew() untuk membuat efeknya menjadi lebih nyata:

Mewarnai dua sisi border (top dan left)
.balon-kata.bottom:after {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  top:100%;
  left:20px;
  border-width:10px;
  border-style:solid;
  /* mewarnai dua sisi border top dan left */
  border-color:black transparent transparent black;
  display:block;
}
Mendistorsi dimensi elemen palsu .balon-kata.bottom:after dengan CSS Transformasi skew()
.balon-kata.bottom:after {
  content:"";
  width:0px;
  height:0px;
  position:absolute;
  top:100%;
  left:20px;
  border-width:10px;
  border-style:solid;
  border-color:black transparent transparent black;
  /* transformasi skew() */
  -webkit-transform:skew(-30deg, 0deg);
  -moz-transform:skew(-30deg, 0deg);
  -ms-transform:skew(-30deg, 0deg);
  -o-transform:skew(-30deg, 0deg);
  transform:skew(-30deg, 0deg);
  display:block;
}

Referensi Lain

Labels: , ,

CSS Triangle, Teknik Pembuatan Dimensi Segitiga dengan Border

Sebelum mempelajari bagian ini, Saya sarankan Anda untuk mempelajari CSS Border terlebih dahulu karena di sini Saya hanya akan berbicara tentang border. Efek segitiga bisa dibuat dengan cara mengambil prinsip sederhana seperti ini:

border-width: 30px;
border-style: solid;
border-color: red green blue yellow;

Jika kita ubah ukuran lebar dan tinggi elemen menjadi 0, maka inilah yang akan Anda dapatkan:

CSS Triangle

Cukup warnai salah satu sisi/dua sisi border saja maka Anda akan mendapatkan efek segitiga yang Saya maksud:

div {
  width:0;
  height:0;
  border-width:50px;
  border-style:solid;
  border-color:transparent transparent black transparent;
}
div {
  width:0;
  height:0;
  border-width:50px;
  border-style:solid;
  border-color:black black transparent transparent;
}

Setelah ini Saya yakin akan muncul sebuah pertanyaan, “Lalu untuk apa semua ini?”

Oke, coba lihat beberapa contoh di bawah ini:

Labels:

Tuesday, November 22, 2011

Perkenalan JQuery

Gambar Logo JQuery

BAB1: Pengertian JQuery

JQuery adalah sebuah paket fungsi JavaScript. Jadi, JQuery bukanlah bahasa baru dalam dunia web development melainkan hanya sebuah metode baru penulisan JavaScript. Setiap fungsi JQuery membutuhkan sebuah framework JQuery agar semua deklarasi fungsi bisa berjalan:

<script src='.../jquery.js' type='text/javascript'></script>
<script type='text/javascript'>
$(document).ready(function() {
    // Fungsi dimulai...
});
</script>

Dalam satu paket JQuery terdapat fitur-fitur ini:

  • Penyeleksian elemen HTML
  • Manipulasi elemen HTML
  • Manipulasi CSS
  • Fungsi Event HTML
  • Efek dan animasi JavaScript
  • Traversal HTML DOM dan modifikasi
  • AJAX
  • Utilitas

Cukup Satu JQuery Saja

Kesalahan yang umum terjadi pada para pengguna JQuery pemula adalah memasang lebih dari satu JQuery dalam satu dokumen. JQuery adalah sebuah paket. Jadi, sekali saja Anda telah memasang JQuery, maka sisanya tinggal menuliskan deklarasi-deklarasinya saja. Versi-versi JQuery seperti 1.3.2, 1.4.2, 1.6.2 dan yang terbaru 1.7.0 itu semua hanyalah perbaikan dari versi-versi sebelumnya. Ada dua alasan utama yang umum digunakan untuk mengembangkan JQuery:

Pertama, karena bug pada peramban (semacam kegagalan/tidak berjalannya sebuah fungsi JQuery pada peramban-peramban tertentu), sehingga JQuery harus menjalani perbaikan. Jika Anda pernah menemukan ketidaknormalan seperti: "Harusnya efek/fungsi ini bekerja pada peramban ini, tapi efek/fungsi ini tidak bekerja pada peramban itu" dalam pekerjaan Anda dan Anda merasa bahwa semuanya sudah benar, Anda bisa melaporkan bug tersebut ke http://bugs.jquery.com/newticket?redirectedfrom=.

Ke dua, untuk membuat/menambahkan fungsi baru. Misalnya, efek .fadeToggle() yang hanya ada pada versi JQuery di atas 1.4.3 (Lebih tepatnya dimulai pada versi 1.4.4 » baca di sini). Juga pada fungsi .on(), .off() dan yang lainnya yang telah ditambahkan pada versi 1.7 (selengkapnya di sini).

JQuery .fadeToggle()
Versi 1.4.4

BAB 2: Gambaran Mudah JQuery

Menurut Saya, JQuery bisa digambarkan sebagai sebuah mesin mobil yang belum bisa berjalan karena sang sopir belum menyalakan mesinnya. Sedangkan deklarasi-deklarasi yang ada di luar JQuery bisa Saya gambarkan sebagai kemudi, persneling, rem, dan hal-hal lain yang ada di ruang kemudi. Mobil tersebut (JQuery) hanya bisa berjalan jika Anda (sang sopir) menjalankan mesin mobil tersebut (mendeklarasikan fungsinya):

Gambar Script JQuery
JQuery adalah sekumpulan fungsi JavaScript. Saat Anda telah memasangnya, tugas selanjutnya hanyalah tinggal menjalankan fungsi-fungsi yang sudah dibangun di dalam JQuery.

Referensi:

Labels: , ,

Saturday, November 19, 2011

Membuat Efek Animasi Loading Sederhana dengan CSS3 Animasi

CSS3 Animated Loading

Di sini Saya menggunakan CSS3 translate, transformasi dan transparasi. Yang pertama harus Anda lakukan adalah membangun frame animasi. Kemudian, cukup panggil setiap efek animasi yang Anda buat ke elemen-elemen yang Anda inginkan. Saya pikir metode ini jauh lebih aman dibandingkan dengan metode animasi loading pembukaan halaman menggunakan JavaScript.

Metode 1: Menggunakan Efek Transparasi

/* Declare the element dimension. These are just examples. You can use all elements that already on the website */
#box1 {
  width:300px;
  height:300px;
  background-color:#000;
  margin:0 auto;
}

/* Step 1: Build the Animation */
@-webkit-keyframes aniload {
  from {opacity:0}
  to   {opacity:1}
}

@-moz-keyframes aniload {
  from {opacity:0}
  to   {opacity:1}
}

@-ms-keyframes aniload {
  from {opacity:0}
  to   {opacity:1}
}

@-o-keyframes aniload {
  from {opacity:0}
  to   {opacity:1}
}

@keyframes aniload {
  from {opacity:0}
  to   {opacity:1}
}

/* Step 2: Call the Animation */
#box1 {
  -webkit-animation:aniload 4s;
  -moz-animation:aniload 4s;
  -ms-animation:aniload 4s;
  -o-animation:aniload 4s;
  animation:aniload 4s;
}

Metode 2: Menggunakan Transformasi Translate

/* Declare the element dimension */
#box1 {
  width:300px;
  height:300px;
  background-color:#000;
  margin:0 auto;
}

/* Step 1: Build the Animation */
@-webkit-keyframes aniload {
  from {-webkit-transform:translate(0px, 1000px)}
  to   {-webkit-transform:translate(0px, 0px)}
}

@-moz-keyframes aniload {
  from {-moz-transform:translate(0px, 1000px)}
  to   {-moz-transform:translate(0px, 0px)}
}

@-ms-keyframes aniload {
  from {-ms-transform:translate(0px, 1000px)}
  to   {-ms-transform:translate(0px, 0px)}
}

@-o-keyframes aniload {
  from {-o-transform:translate(0px, 1000px)}
  to   {-o-transform:translate(0px, 0px)}
}

@keyframes aniload {
  from {transform:translate(0px, 1000px)}
  to   {transform:translate(0px, 0px)}
}

/* Step 2: Call the Animation */
#box1 {
  -webkit-animation:aniload 4s;
  -moz-animation:aniload 4s;
  -ms-animation:aniload 4s;
  -o-animation:aniload 4s;
  animation:aniload 4s;
}

Metode 3: Menggunakan Durasi Animasi yang Berbeda-Beda

Masih sama persis dengan metode ke dua, hanya saja di sini Saya menggunakan durasi animasi yang berbeda-beda pada setiap elemen:

/* Declare the element dimension */
.box {
  width:300px;
  height:300px;
  background-color:#000;
  margin:0 auto;
}

/* Step 1: Build the Animation */
@-webkit-keyframes aniload {
  from {-webkit-transform:translate(0px, 1000px)}
  to   {-webkit-transform:translate(0px, 0px)}
}

@-moz-keyframes aniload {
  from {-moz-transform:translate(0px, 1000px)}
  to   {-moz-transform:translate(0px, 0px)}
}

@-ms-keyframes aniload {
  from {-ms-transform:translate(0px, 1000px)}
  to   {-ms-transform:translate(0px, 0px)}
}

@-o-keyframes aniload {
  from {-o-transform:translate(0px, 1000px)}
  to   {-o-transform:translate(0px, 0px)}
}

@keyframes aniload {
  from {transform:translate(0px, 1000px)}
  to   {transform:translate(0px, 0px)}
}

/* Step 2: Call the Animation */
#box1 {
  -webkit-animation:aniload 4s;
  -moz-animation:aniload 4s;
  -ms-animation:aniload 4s;
  -o-animation:aniload 4s;
  animation:aniload 4s;
}

#box2 {
  -webkit-animation:aniload 1s;
  -moz-animation:aniload 1s;
  -ms-animation:aniload 1s;
  -o-animation:aniload 1s;
  animation:aniload 1s;
}

#box3 {
  -webkit-animation:aniload 5s;
  -moz-animation:aniload 5s;
  -ms-animation:aniload 5s;
  -o-animation:aniload 5s;
  animation:aniload 5s;
}

#box4 {
  -webkit-animation:aniload 3s;
  -moz-animation:aniload 3s;
  -ms-animation:aniload 3s;
  -o-animation:aniload 3s;
  animation:aniload 3s;
}

#box5 {
  -webkit-animation:aniload 2s;
  -moz-animation:aniload 2s;
  -ms-animation:aniload 2s;
  -o-animation:aniload 2s;
  animation:aniload 2s;
}

Labels:

Friday, November 18, 2011

Perkenalan CSS Animasi (@keyframes)

CSS Animasi sangat mirip dengan CSS Transisi. Ini adalah sintaks CSS3 spesial untuk menciptakan efek animasi secara otomatis:

Untuk membuat efek animasi dengan CSS, hal pertama yang harus Anda kuasai sebelum memulai ini tentunya adalah logika konsep animasi itu sendiri:

CSS3 Animasi Animation

Membangun Animasi

/* Safari & Chrome */
@-webkit-keyframes mamastopik {
  0%   {background-color:green;}
  25%  {background-color:yellow;}
  50%  {background-color:red;}
  75%  {background-color:blue;}
  100% {background-color:orange;}
}

/* Firefox 5+ */
@-moz-keyframes mamastopik {
  0%   {background-color:green;}
  25%  {background-color:yellow;}
  50%  {background-color:red;}
  75%  {background-color:blue;}
  100% {background-color:orange;}
}

/* IE 10+ */
@-ms-keyframes mamastopik {
  0%   {background-color:green;}
  25%  {background-color:yellow;}
  50%  {background-color:red;}
  75%  {background-color:blue;}
  100% {background-color:orange;}
}

/* Opera 12+ */
@-o-keyframes mamastopik {
  0%   {background-color:green;}
  25%  {background-color:yellow;}
  50%  {background-color:red;}
  75%  {background-color:blue;}
  100% {background-color:orange;}
}

/* Standar W3C */
@keyframes mamastopik {
  0%   {background-color:green;}
  25%  {background-color:yellow;}
  50%  {background-color:red;}
  75%  {background-color:blue;}
  100% {background-color:orange;}
}

Memanggil Animasi

#boks {
  -webkit-animation:mamastopik 10s;
  -moz-animation:mamastopik 10s;
  -ms-animation:mamastopik 10s;
  -o-animation:mamastopik 10s;
  animation:mamastopik 10s;
}

Objek yang Ingin Dianimasikan

<div id="boks"></div>

Langkah pertama yang harus Anda lakukan adalah membangun sistem animasi, yaitu menuliskan secara detail langkah-langkah dari awal animasi sampai berakhirnya animasi. Manipulasi penampilan dilakukan dangan cara menuliskan properti-properti CSS biasa. Tidak ada keistimewaan.

Langkah berikutnya adalah memanggil animasi. Ini dilakukan dengan cara menuliskan deklarasi -webkit-animation:mamastopik 10s;-moz-animation:mamastopik 10s;-ms-animation:mamastopik 10s;animation:mamastopik 10s; dalam selektor objek yang Anda inginkan (dalam hal ini Saya menerapkannya dalam sebuah elemen #boks).

  • mamastopik adalah nama animasi. Ini tidak mutlak, Anda bisa menuliskan nama animasi sesuka hati (dengan mengikuti peraturan sintaks CSS tentunya)
  • 10s adalah waktu tempuh sistem animasi yang Anda bangun dalam satuan detik (s). Kalau waktu tempuh film kartun biasanya sekitar 30 menit, sinetron Korea biasanya sekitar 1 - 2 jam. Milidetik juga bisa digunakan (ms), namun tidak untuk menit dan di atasnya.

Efek Animasi Tak Terbatas

Efek animasi tak terbatas maksudnya adalah animasi akan berjalan terus-menerus tanpa henti. Hal ini bisa dilakukan dengan cara menambahkan nilai infinite setelah durasi:

#boks {
  -webkit-animation:mamastopik 5s infinite;
  -moz-animation:mamastopik 5s infinite;
  -ms-animation:mamastopik 5s infinite;
  -o-animation:mamastopik 5s infinite;
  animation:mamastopik 5s infinite;
}

Lebih Detail Tentang Konfigurasi Animasi

Delay, direksi, langkah animasi, percepatan dan waktu tempuh bisa diterapkan dengan cara menuliskannya secara terpisah:

#boks {
  /* Safari & Chrome */
  -webkit-animation-name: mamastopik;
  -webkit-animation-duration: 10s;
  -webkit-animation-timing-function: linear;
  -webkit-animation-delay: 2s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-direction: alternate;
  -webkit-animation-fill-mode: forwards;
  -webkit-animation-play-state: running;

  /* Firefox */
  -moz-animation-name: mamastopik;
  -moz-animation-duration: 10s;
  -moz-animation-timing-function: linear;
  -moz-animation-delay: 2s;
  -moz-animation-iteration-count: infinite;
  -moz-animation-direction: alternate;
  -moz--animation-fill-mode: forwards;
  -moz-animation-play-state: running;

  /* IE */
  -ms-animation-name: mamastopik;
  -ms-animation-duration: 10s;
  -ms-animation-timing-function: linear;
  -ms-animation-delay: 2s;
  -ms-animation-iteration-count: infinite;
  -ms-animation-direction: alternate;
  -ms-animation-fill-mode: forwards;
  -ms-animation-play-state: running;

  /* Opera */
  -o-animation-name: mamastopik;
  -o-animation-duration: 10s;
  -o-animation-timing-function: linear;
  -o-animation-delay: 2s;
  -o-animation-iteration-count: infinite;
  -o-animation-direction: alternate;
  -o-animation-fill-mode: forwards;
  -o-animation-play-state: running;

  animation-name: mamastopik;
  animation-duration: 10s;
  animation-timing-function: linear;
  animation-delay: 2s;
  animation-iteration-count: infinite;
  animation-direction: alternate;
  animation-fill-mode: forwards;
  animation-play-state: running;
}

/* Khusus untuk sintaks IE Saya masih belum bisa menjamin, karena Saya masih belum menemukan referensi yang tepat. */
DeklarasiKeterangan
animation-name:mamastopik;Mendeklarasikan nama animasi
animation-duration:10s;Waktu tempuh animasi
animation-timing-function:linear;Percepatan animasi/Easing animasi. Anda bisa mempelajari jenis-jenis percepatan animasi pada tutorial CSS Transisi
animation-delay:2s;Delay animasi. Semacam waktu malas/penambahan waktu ancang-ancang sebelum animasi dijalankan.
animation-direction:alternate;Menentukan apakah saat animasi selesai dijalankan (mencapai 100%) akan mengambil langkah kembali menuju 0% sebagai animasi lanjutan itu sendiri kemudian memulai animasi itu kembali dari 0% atau langsung menyentakkan diri menuju animasi 0% dan memulainya kembali menuju 100%. Nilainya bisa berupa normal atau alternate » lihat contohnya di sini
animation-fill-mode:forwards;Nilainya bisa forwards atau backwards. Fungsinya untuk menentukan apakah properti animasi dijalankan dari 0% menuju 100% atau sebaliknya, dari 100% menuju 0% » pelajari di sini
animation-play-state:running;Menentukan apakah animasi akan berjalan atau berhenti. Nilainya bisa berupa running atau pause. (Tidak terlalu penting)

Memperpendek Deklarasi

Urutannya adalah: animation-name animation-duration animation-timing-function animation-delay animation-iteration-count animation-direction

#boks {
  -webkit-animation:mamastopik 8s ease-in-out 1s infinite alternate;
  -moz-animation:mamastopik 8s ease-in-out 1s infinite alternate;
  -ms-animation:mamastopik 8s ease-in-out 1s infinite alternate;
  -o-animation:mamastopik 8s ease-in-out 1s infinite alternate;
  animation:mamastopik 8s ease-in-out 1s infinite alternate;
}

0% ⇒ 100% = from ⇒ to

@-webkit-keyframes fadeIn {
  from {opacity:0;}
  to   {opacity:1;}
}

@-moz-keyframes fadeIn {
  from {opacity:0;}
  to   {opacity:1;}
}

@-ms-keyframes fadeIn {
  from {opacity:0;}
  to   {opacity:1;}
}

@-o-keyframes fadeIn {
  from {opacity:0;}
  to   {opacity:1;}
}

@keyframes fadeIn {
  from {opacity:0;}
  to   {opacity:1;}
}

Referensi:

Labels: ,

Thursday, November 17, 2011

CSS3 Button Generator · Reconstruction

CSS3 Button Generator
CSS3 Button Generator - V2 is the reconstruction of my first application, CSS3 Button Generator. Now, I add some new features that will further expand your imagination: Three options gradients and color-stop gradient to follow the development of CSS3. 'Holding Hover Session' for easy editing, external class modifiers and others:
CSS3 Button Generator
Featured Option

I have two versions of the application language, English and Indonesian. This is a very lightweight application and simple to use. Have fun!

Download

Forget it! Try the new version of CSS3 Button Generator which had escaped from several mistakes!

Click Here!

Give me the experiences that happened to you to fix the application problem or simply just fix the error. I am very grateful for that.

Labels: , , ,

Friday, November 11, 2011

Widget Daftar Isi Akordion dengan Sortir Bulan Terbit

Kali ini Saya akan memperkenalkan widget daftar isi untuk Blogger dengan konsep akordion jQuery:

Table of Content for Blogger

Pertama-tama, masuklah ke tab Posting/Entri, kemudian pilih Edit Laman. Tambahkan sebuah halaman baru:

halaman statis blogger
Tambahkan sebuah halaman statis


Klik tab Edit HTML pada formulir posting:

instalasi script daftar isi blog
Pilih mode HTML.


Salin kode di bawah ini, kemudian letakkan di dalam formulirnya:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="//cdn.rawgit.com/tovic/dte-project/0ef9de902cf286a77272f9b3c6f8168c17ab61c6/accordion-toc-skin.css"/>
<div id="table-of-content" class="table-of-content"><span class="loading">Memuat...</span></div>
<div class="credit-link"><a href="//www.dte.web.id/2011/11/widget-daftar-isi-akordion-dengan.html" title="Accordion TOC by Taufik Nurrohman">&#9654; Accordion TOC</a></div>
<script>
var toc_config = {
    url: 'http://nama_blog.blogspot.com',
    containerId: 'table-of-content',
    monthNames: [
        'Januari',
        'Februari',
        'Maret',
        'April',
        'Mei',
        'Juni',
        'Juli',
        'Agustus',
        'September',
        'Oktober',
        'November',
        'Desember'
    ],
    oldestFirst: false,
    maxResults: 9999,
    activePanel: 1,
    slideSpeed: {
        down: 400,
        up: 400
    },
    slideEasing: {
        down: null,
        up: null
    },
    slideCallback: {
        down: function() {},
        up: function() {}
    },
    clickCallback: function() {},
    jsonCallback: '_toc',
    delayLoading: 0
};
</script>
<script src="//cdn.rawgit.com/tovic/dte-project/0ef9de902cf286a77272f9b3c6f8168c17ab61c6/accordion-toc-2.js"></script>

Konfigurasi Widget

Opsi Keterangan
url Ganti dengan URL blog Anda.
containerId ID kontainer elemen yang nantinya akan digunakan untuk menampung isi widget.
monthNames Nama-nama bulan dalam satu tahun sesuai dengan penamaan bulan di negaramu.
oldestFirst Ganti nilainya menjadi true untuk menampilkan arsip dengan tanggal yang lebih tua terlebih dahulu.
maxResults Jumlah maksimal feed yang ingin dimuat. Abaikan!
activePanel Urutan panel yang ingin dibuat terbuka secara default. Dalam hal ini, nilai 1 menunjukkan bahwa panel yang akan aktif saat pertama kali widget dimuat adalah panel yang pertama.
slideSpeed Tentukan kecepatan efek animasi panel baik saat bergeser ke atas maupun saat bergeser ke bawah pada variabel ini.
delayLoading Waktu tunda pemuatan feed.

Kode yang Saya beri garis bawah adalah jQuery. Jika templat Anda sudah dilengkapi dengan jQuery, Singkirkan kode tersebut!

Labels: , ,

Efek Hover Link/Tautan Menyala dengan CSS

css link menyala glowing


Tutorial yang sangat sederhana ini hanyalah sebuah teknik penerapan CSS Pseudo Classes, CSS Text Shadow dan CSS Transisi. Jadi, sebenarnya Saya yakin kamu sudah pernah menemukan ide ini sejak dulu. Tapi Saya hanya ingin membagikan teknik ini pada orang-orang yang belum tahu:

CSS

a.murub {
  color:#ccc;
  text-decoration:none;
  text-shadow:1px 1px 0px #000,0 0 0px #000,0 0 0px #000,0 0 0px #000;
  -webkit-transition:all .5s ease-out;
  -moz-transition:all .5s ease-out;
  -o-transition:all .5s ease-out;
  transition:all .5s ease-out;
}

a.murub:hover {
  color:#fff;
  text-shadow:
    0px 1px 0px #FF00FF,
    0px 0px 3px #FF00FF,
    0px 0px 5px #FF00FF,
    0px 0px 30px #FF00FF,
    0px 3px 50px #FF00FF;
}

HTML

<a class="murub" href="#">LINK</a>

Labels: ,

Thursday, November 10, 2011

Widget Daftar Isi Blogger Galleria

Pembaharuan: 25 Februari 2012

Daftar Isi Blogger Galleria

Galleria adalah widget daftar isi dengan tema fotografi. Setiap artikel akan ditampilkan sebagai foto-foto dengan judul yang akan tampil saat disentuh. Masonry adalah salah satu kelengkapan utama untuk membangun widget ini. Menjaga agar setiap elemen tampak berjajar dengan rapi dan responsif:


Buat widget daftar isi ini dengan mengikuti langkah-langkah berikut:

Pertama-tama klik menu Laman pada sidebar. Kemudian, pada menu Laman Baru pilihlah Laman Kosong:

Menambahkan halaman statis baru


Setelah itu Anda akan melihat formulir halaman statis seperti ini. Klik mode HTML:

Pilih mode HTML


Salin kode di bawah ini kemudian letakkan di dalam formulirnya:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<link rel="stylesheet" media="screen" href="http://reader-download.googlecode.com/svn/trunk/blogger-toc-gallery-default-theme.css" type="text/css"></link>
<h4 id="loading">Loading...</h4>
<script type="text/javascript">
var enableMasonry = true,
    idMode        = true,
    showPostDate  = true,
    byLabels      = false,
    labelName     = "Mengenai",
    pBlank        = "http://2.bp.blogspot.com/-RdWht36FTLI/TrsqFbSraFI/AAAAAAAABO4/rTjPm97uO34/s1600/dte-darkblue.png";
    text          = "Komentar",
    numposts      = 999,
    showSpeed     = 1000,
    sDownSpeed    = 400,
    sUpSpeed      = 400,
    loadingItem   = "Loading item...",
    errorText     = "Opps...",
    home_page     = "http://latitudu.blogspot.com/";
</script>
<script type="text/javascript" src="http://reader-download.googlecode.com/svn/trunk/blogger-gallery-widget-rev1.js"></script>

Pengaturan

OpsiNilaiKeterangan
enableMasonrytrueGanti nilainya menjadi false jika Anda sudah memakai JQuery Masonry di dalam template
false
idModetrueJika bernilai true, sistem bulan terbit akan menjadi berbahasa Indonesia. Jika bernilai false sistem bulan terbit akan berubah menjadi berbahasa Inggris.
false
showPostDatetrueJika bernilai true, bulan terbit akan ditampilkan. Jika bernilai false bulan terbit akan disembunyikan.
false
byLabelstrueDigunakan untuk memfilter posting. Jika ingin menampilkan posting dengan kategori tertentu saja, pilihlah nilai true. Setelah itu tentukan nama label pada variabel labelName.
false
labelName"Widget", "JQuery", "CSS", ... (nama label)Tentukan nama label jika opsi byLabels bernilai true.
pBlank"image.jpg", ... (URL Gambar)Gambar cadangan jika posting yang tampil tidak memiliki gambar.
text"Komentar", "Comments", ... (teks)Digunakan untuk menentukan label jumlah komentar (contoh: 10 Komentar).
numposts10, 30, 999, ...(numerik)Digunakan untuk menentukan jumlah posting maksimal yang akan ditampilkan.
showSpeed"slow", "fast", 1000, ... (numerik/kecepatan valid JQuery)Digunakan untuk menentukan kecepatan animasi penampilan gambar.
sDownSpeed"slow", "fast", 1000, ... (numerik/kecepatan valid JQuery)Digunakan untuk menentukan kecepatan animasi penampilan judul gambar.
sUpSpeed"slow", "fast", 1000, ... (numerik/kecepatan valid JQuery)Digunakan untuk menentukan kecepatan animasi penghilangan judul gambar.
loadingItem"Sedang memuat gambar...", ... (teks)Digunakan untuk menentukan teks status saat gambar sedang dimuat.
errorText"Maaf, tunggu sebentar...", ... (teks)Digunakan untuk menentukan teks status saat gambar sempat gagal dimuat.
home_page"http://namablogmu.blogspot.com", ... (URL Blog)Ganti URL ini dengan URL blog Anda.

Kode yang Saya beri garis bawah adalah JQuery. Jika template Anda sudah dilengkapi dengan JQuery, singkirkan kode tersebut!

Labels: , ,

Monday, November 7, 2011

CSS Media Queries

CSS Media Queries

Bagaimana Media Queries Bekerja

Mungkin beberapa dari Anda masih belum mengenal tentang media queries, jadi mari kita mulai dengan sesuatu yang sangat sederhana. Kunjungi halaman di bawah ini lalu perkecil ukuran layar browser sedikit demi sedikit dan perhatikan!

Seperti yang telah Anda lihat bahwa ukuran layar dapat mengubah warna halaman. Itulah fungsi media queries, yaitu untuk memanipulasi CSS sesuai dengan kondisi layar peramban. Namun, bukan itu fungsi utama dari media queries. Media queries tidak hanya dapat mengubah warna halaman, tetapi juga dapat mengubah layout sebuah website. Dan itu artinya, Anda dapat menciptakan tampilan website sesuka hati Anda dengan mempertimbangkan ukuran viewport yang mungkin akan pengunjung gunakan. Hal ini memungkinkan Anda untuk menciptakan tampilan website yang dinamis, yang dapat menyesuaikan diri dengan tempat dimana website tersebut dibuka. Apakah itu dari komputer, smartphone, tablet, apapun itu:

Contoh Nyata Media Queries

Memulai Konsep

Hal pertama yang harus Anda lakukan adalah membuat konsep sebuah website. Tidak perlu terlalu rumit, pastikan saja Anda menciptakan template yang lengkap dan umum, yang terdiri dari sebuah header, navigasi, artikel, sidebar dan footer. Misalnya seperti ini:

HTML

<div id='outer-wrapper'>

    <div id='header-wrapper'>
        <h1>HEADER WEBSITE</h1>
    </div>

    <div id='nav'>
        <ul>
            <li><a href='#'>Home</a></li>
            <li><a href='#'>Archive</a></li>
            <li><a href='#'>About</a></li>
            <li><a href='#'>Contact</a></li>
        </ul>
    </div>

    <div id='content'>
        <div id='main-wrapper'>
            ARTIKEL DI SINI...
        </div>

        <div id='sidebar-wrapper'>
            WIDGET DI SINI...
        </div>
        <div class='clear'></div>
    </div> <!-- end content -->

    <div id='footer-wrapper'>
        Copyright 2011 - Taufik Nurrohman
    </div>

</div> <!-- end outer-wrapper -->

CSS

h1,h2,h3,h4,h5,h6,ul,ol,li {
  margin:0 0 0 0;
  padding:0 0 0 0;
  border:none;
}

body {
  background:#fff;
  margin:0;padding:0;
  text-align:center;
  font:normal normal 70% Arial,Sans-Serif;
}

#outer-wrapper {
  width:1030px;
  margin:0 auto 0;
  text-align:left;
  background:#ddd;
}

#header-wrapper {
  padding:2%;
  margin:0;
  display:block;
  background:#666;
}

#nav {
  background:#999;
  font:normal normal 1em Arial,Sans-Serif;
  overflow:hidden;
}

#nav ul {
  margin:0;
  padding:0;
  height:auto;
}

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

#nav ul li a {
  display:block;
  padding:5px 10px;
  background:#999;
  color:#fff;
}

#nav ul li a:hover {
  background:#888;
  text-decoration:none;
}

#content {
  clear:both;
  display:block;
}

#main-wrapper {
  width:71%;
  padding:2%;
  word-wrap:break-word;
  overflow:hidden;
  float:left;
  display:inline;
  background:#eee;
}

#sidebar-wrapper {
  width:21%;
  padding:2%;
  word-wrap:break-word;
  overflow:hidden;
  float:right;
  display:inline;
  background:#ddd;
}

#footer-wrapper {
  padding:2%;
  clear:both;
  display:block;
  background:#666;
}

.clear {clear:both}

Di sini saya mengeset lebar #outer-wrapper sebesar 1030px lalu mengeset ukuran #sidebar-wrapper dan #main-wrapper menggunakan persentase. Perhitungan persentase sebuah tampilan website yang ideal dapat Anda pelajari di sini.

Menerapkan Media Queries

Buatlah beberapa peraturan yang tegas:

  • Saat ukuran layar telah mencapai 1030 piksel, set lebar #outer-wrapper menjadi 100%. Hal ini akan membuat template menjadi mudah beradaptasi dengan viewport yang lebih sempit dari 1030 piksel.
  • Saat lebar viewport lebih kecil dari 600 piksel, set posisi #main-wrapper dan #sidebar-wrapper menjadi elemen blok dalam satu kolom.

Menuliskan lebar sebesar 100% akan mempermudah template dalam beradaptasi, karena persentase tidak diukur berdasarkan keadaan elemen, melainkan berdasarkan tempat dimana elemen tersebut berada. Harap diingat pula beberapa deklarasi penting yang harus Anda terapkan saat menciptakan layout satu kolom.
Seperti yang kita tahu, bahwa untuk menciptakan kolom, deklarasi yang umum digunakan adalah float:left atau float:right, display:inline dan width:N. Maka saat Anda ingin menciptakan layout satu kolom dari elemen yang tadinya berupa dua kolom, hal yang terpenting yang harus Anda lakukan pertama kali adalah netralisasi float dan display. Setelah itu set lebar elemen menjadi auto agar lebar elemen bisa menyesuaikan diri. Setelah itu terserah Anda:

@media screen and (max-width:1030px) {
    #outer-wrapper {
      width:100%;
    }
}

@media screen and (max-width:600px) {
    #sidebar-wrapper,
    #main-wrapper {
      float:none;
      display:block;
      width:auto;
      padding:5%;
    }
}

Gambar Responsif

Untuk membuat gambar menjadi responsif, Anda bisa menambahkan kode ini dalam CSS:

img {
  max-width:100%;
  height:auto;
  width:auto\9; /* IE8 */
}

Hal yang sama juga bisa Anda lakukan untuk embed video dan iframe:

embed,object,iframe {
  width:100%;
  height:auto;
  min-height:300px;
}

Meta Tag Skala pada Perangkat Seluler

Secara normal, perangkat seluler yang canggih akan memperkecil skala halaman website saat dibuka. Dengan menggunakan meta tag ini, perangkat tersebut tidak akan menyesuaikan skala halaman dan akan menerapkan skala seperti apa adanya:

<meta content='width=device-width, initial-scale=1, maximum-scale=1' name='viewport'/>

Orientasi Viewport

Jika Anda menggunakan tablet atau iPhone maka orientasi dapat berubah secara otomatis dari portrait menjadi landscape atau sebaliknya saat Anda memutarnya. Saya tidak tahu apakah komputer Anda memiliki fasilitas hebat seperti itu atau tidak. Jadi, sekarang coba balik komputer Anda dan lihat apakah orientasinya berubah? :))

@media screen and (orientation:portrait) {
    /* Tampilan Portrait Website Anda */
}

@media screen and (orientation:landscape) {
    /* Tampilan Landscape Website Anda */
}

Masalah Background Image yang terlalu Besar

Tidak seperti gambar pada umumnya, background-image tidak bisa responsif, karena dia adalah gambar yang hanya dijadikan sebagai background sebuah objek, bukan dijadikan sebagai objek itu sendiri. Untuk membuat background-image menjadi responsif, gunakan CSS background-size. Misalnya, di sini Saya akan mengubah skala background menjadi 80% dari ukuran sesungguhnya saat lebar viewport berada pada 480 piksel:

@media screen and (max-device-width:480px) {
    html,body {
      -webkit-background-size:100% auto;
      -moz-background-size:100% auto;
      -ms-background-size:100% auto;
      -o-background-size:100% auto;
      background-size:100% auto;
    }
}

Media Queries pada CSS Eksternal

Bla.. bla.. bla.... Saya yakin Anda sudah mengerti untuk yang satu ini:

<link rel='stylesheet' media='screen and (max-width: 600px)' href='600px-viewport.css'></link>

Max Width, Min Width, Multiple Media Queries

Max Width

Kode di bawah akan mulai mengubah penampilan saat lebar viewport berada pada maksimal 500 piksel dan di bawahnya:

@media screen and (max-width:500px) {
    ...
    ...
}

Min Width

Kode di bawah akan mulai mengubah penampilan saat lebar viewport berada pada minimal 500 piksel dan di atasnya:

@media screen and (min-width:500px) {
    ...
    ...
}

Multiple Media Queries

Kode di bawah ini akan mengubah penampilan apabila lebar viewport berada di antara 500 piksel dan 900 piksel:

@media screen and (min-width:500px) and (max-width: 900px) {
    ...
    ...
}

Device Width

Harap bedakan antara max-width dan max-device-width. max-width dihitung berdasarkan resolusi area, sedangkan max-device-width dihitung berdasarkan resolusi device:

@media screen and (max-device-width:1024px) {
    ...
    ...
}

Media Queries untuk Device Standar

/* Smartphone (portrait & landscape) */
@media only screen
and (min-device-width:320px)
and (max-device-width:480px) {
    ...
    ...
}

/* Smartphone (landscape) */
@media only screen
and (min-width:321px) {
    ...
    ...
}

/* Smartphone (portrait) */
@media only screen
and (max-width:320px) {
    ...
    ...
}

/* iPad (portrait & landscape) */
@media only screen
and (min-device-width:768px)
and (max-device-width:1024px) {
    ...
    ...
}

/* iPad (landscape) */
@media only screen
and (min-device-width:768px)
and (max-device-width:1024px)
and (orientation:landscape) {
    ...
    ...
}

/* iPad (portrait) */
@media only screen
and (min-device-width:768px)
and (max-device-width:1024px)
and (orientation:portrait) {
    ...
    ...
}

/* Desktop & laptop */
@media only screen
and (min-width:1224px) {
    ...
    ...
}

/* Large Screen */
@media only screen
and (min-width:1824px) {
    ...
    ...
}

/* iPhone 4 */
@media
only screen and (-webkit-min-device-pixel-ratio:1.5),
only screen and (min-device-pixel-ratio:1.5) {
    ...
    ...
}

Referensi:

Labels: , ,