CodeBlanks Logo Icon CodeBlanks

BEM metodolojisi

CSS kursu · Uzman · Ders 1/53

Block, Element, Modifier adlandırma metodolojisini öğrenirsin.

BEM: Block, Element, Modifier

BEM, büyük arayüzleri tutarlı biçimde adlandırmak için bir yöntemdir. Adı üç parçanın baş harflerinden gelir: Block bağımsız bileşen, Element bloğun bir parçası, Modifier bir halini belirten varyant. Her sınıf adı bu üç fikri birleştirir.

BEM sayesinde sınıf adına baktığında öğenin rolünü hemen görürsün. .card__title bir kartın başlığı, .button--primary bir düğmenin öne çıkan halidir. Çakışan stiller azalır, ekip içinde ortak dil oluşur.

Block: bağımsız bileşen

Bir block, kendi başına duran ve taşıdığı anlamı yalnızca adından alan bileşendir. Menü, arama kutusu, ürün kartı, hero bölümü — her biri birer bloktur. Ad kısa, yalın ve yinelenebilir olmalıdır: .menu, .search, .card, .hero.

Blok adları iç içe geçmez; başka bir bloğun çocuğu gibi yazılmaz. Bir kart menünün içinde de olsa .card olarak adlandırılır. Bu yalınlık, blokların projenin her yerinde yeniden kullanılmasını sağlar.

Element: bloğun parçası

Bir element, bloğun içinde yer alan ve bloktan ayrı anlam taşımayan parçadır. Yazımı: blok adı, çift alt çizgi, element adı. .card__title, .menu__item, .search__input.

Elementler bloklarından ayrı kullanılmaz; .card__title anlamlıdır çünkü bir kartın başlığıdır. Element adları da yalın ve kısa tutulur. Bir blokta birden çok element olabilir ve her biri aynı çift alt çizgi biçimini izler.

Modifier: hal ve varyant

Bir modifier, bir bloğun ya da elementin belirli bir halini ya da varyantını işaretler. Yazımı: blok ya da element adı, çift tire, modifier adı. .button--primary öne çıkan düğme, .menu__item--active seçili menü öğesidir.

Modifier tek başına kullanılmaz; her zaman bir blok ya da element adına eklenir. Yani .button--primary anlamlıdır ama .--primary tek başına değildir. Bu yaklaşım, modifier'ın nereye ait olduğunu her zaman adında taşımasını sağlar.

Uygulama BEM sınıf üçlüsünü yaz

Üç BEM bildirimi ekle. Birincisi .button bloğu; display: inline-flex ve padding: 0.5rem 1rem içersin. İkincisi .button__icon elementi; width: 1.25rem içersin. Üçüncüsü .button--primary modifier'ı; background: navy ve color: white içersin.

Örnek çözümü göster
/* button bloğunu, icon elementini ve primary modifier'ını ekle */
.button {
  display: inline-flex;
  padding: 0.5rem 1rem;
}
.button__icon {
  width: 1.25rem;
}
.button--primary {
  background: navy;
  color: white;
}

Kendini test et

  1. Hangisi geçerli bir BEM element adıdır?

    .card__title {
      font-weight: bold;
    }
    • .card--title
    • .card_title
    • .card__title
    • .card-title
    Cevabı göster

    .card__title — Doğru. Element adı blok adından sonra çift alt çizgiyle ayrılır: .card__title.

  2. Element adını tamamla

    .menu______ {
      padding: 0.5rem 1rem;
    }
    Cevabı göster
    .menu__item {
      padding: 0.5rem 1rem;
    }
  3. Sınıf adını türüne eşle

    .button
    Block
    .button__icon
    Element
    .button--large
    Modifier
    .card__media--rounded
    Element + modifier

Uzman bölümündeki tüm dersler