Memahami Metode BEM


Kenapa di beberapa file penamaan class-nya banyak menggunakan – atau __ ?

Dasarnya ada beberapa dan sedang saya coba terapkan:

Sebenarnya hanya berusaha mengubah kebiasaan lama. Sebelumnya terbiasa memakai penamaan class yang kurang semantic, misalnya;

<nav class="main-nav">
  <ul>
    <li class="item"><a href="#">Item 1</a></li>
    <li class="item"><a href="#">Item 2</a></li>
    <li class="item"><a href="#">Item 3</a></li>
  </ul>
</nav>

Perhatikan. Tidak ada yang salah memang, tapi bagian susahnya adalah keterkaitan item dengan main-nav yang kurang mudah dipahami. item yang terletak didalam <nav> atau .main-nav bisa apa saja. Logo, search form, dropdown, dan lain-lain. Kalau kita melihat CSS yang menjadi alasan markup diatas mungkin bisa dipahami, Tapi bagaimana kalau kita cuma membaca HTML-nya?

Makanya terciptalah BEM oleh Yandex. BEM (block, element, modifier) mengenalkan metode penamaan yang sedikit susah untuk diterapkan tapi lumayan mudah untuk dipahami. Berikut adalah contoh berdasarkan contoh di atas menggunakan syntax SCSS:

.main-nav {
  background-color: #333;

  &__logo {
    display: inline-block;

    &--on-right {
      float: right;
    }
  }
}

SCSS diatas jika di compile maka hasilnya seperti berikut:

.main-nav {
  background-color: #333;
}
.main-nav__logo {
  display: inline-block;
}
.main-nav__logo--on-right {
  float: right;
}

dan berikut adalah markup yang bisa kita buat:

<nav class="main-nav">
  <img class="main-nav__logo" src="...">
    ...
</nav>

atau bisa juga seperti berikut:

<nav class="main-nav">
    ...
  <img class="main-nav__logo--on-right" src="...">
</nav>

Dari kedua contoh di atas, kita bisa memahami bahwa main-nav__logo adalah elemen dari main-nav dan main-nav__logo--on-right adalah variasi dari main-nav__logo yang terletak di kanan.

Alasan kenapa menggunakan -- atau __ bisa dilihat pada contoh di atas, main-nav lebih baik daripada mainnav kan?.

Contoh dari saya masih berantakan, dan mungkin BEM memang terlihat agak aneh dan dalam penerapannya memerlukan pengetikan yang lebih banyak. Lagipula tidak semuanya harus menggunakan metode BEM. Misalnya:

.text-left   { text-align: left;   }
.text-center { text-align: center; }
.text-right  { text-align: right;  }

Beberapa contoh di atas sifatnya helper-classes dan berdiri sendiri.

Berikut sedikit kutipan dari CSSwizardry mengenai penerapan BEM:

One of the hardest parts of BEM is deciding when to start and stop scope, and when (or not) to use it. It’s a case of ‘you’ll just know when you know’.

CSSwizardry

Menurut pendapat saya pribadi, BEM lebih berguna untuk styling di elemen yang sifatnya variasi dari elemen lain. Misalnya seperti berikut:

.button { }
.button--yellow { }
.button--red { }

Kita bisa memahami bahwa .button--yellow dan .button--red adalah variasi lain dari .button tapi sifatnya tidak terlalu khusus dan tetap reusable.

Well, intinya semua kembali ke keperluan kita. Menurut saya kalau kalian menggunakan framework CSS yang kalian bangun sendiri, maka tetap jaga agar struktur CSS kalian reusable dan jaga prinsip DRY lalu nanti terapkan BEM untuk menerapkan style sesuai keperluan.

Post Lainnya

Pemasangan Ruby dan Jekyll

Seperti yang gue bilang di post sebelumnya, bahwa gue akan memberikan tutorial tentang cara install Ruby dan Jekyll. Sebelum kita melangkah ke perjalanan yang lebih jauh, tutorial gue lebih cocok sama yang menggunakan Linux, Ubuntu lebih tepatnya, atau Lubuntu lebih tepatnya lagi. Untuk pengguna Mac dan sejenisnya, mungkin kalian bisa menggunakan Homebrew tapi cara pemasangannya ga bisa gue jelasin karena gue ga punya Mac. Untuk pengguna Windows dan sejenisnya, ke Google aja ya.

Android M disebut di Android Code Review

Ada yang pakai android ? Jelly Bean ? Kitkat ? Atau masih ada yang belum bisa move-on dari Gingerbread ? Hahahahaha

Mengubah DNS di Linux

Cara ini sudah sangat lama saya pergunakan. Jadi kalau misalnya tidak bekerja dengan benar atau ada kesalahan, hubungi saya di Twitter.

Komentar

Komentar akan tampil setelah diterima.