Hareketli Liste Elemanlari

Web sayfanizin bir bolumu degisecegi zaman, bu degisimi bir animasyon ile yapmak ziyaretcilerinizin sitede neler olup bittigini anlamasini saglamak icin guzel bir yoldur. Animasyonlar yeni gelen içeriği bildirebilir ya da kaldırılmakta olan içeriğe dikkat çekebilir. Bu yazıda, bir liste içindeki ögeleri göstererek ve gizleyerek bunun içeriğin tanıtılmasında nasıl kullanilabileceğine bakacağız.

  • Liste ogesi
  • Liste ogesi

İçeriği tanıtmak

Animasyonlar, ziyaretçilerin sitenizdeki şeylerin ne zaman değiştiğini anlamasına yardımcı olabilir. İçerikler animasyon kullanılmadan eklendiğinde ya da kaldırıldığında, ziyaretçiler bu ani değişiklikleri gözden kaçırabilir ve akılları karışabilir. Hafif animasyonlar eklemek bu sorunun üstesinden gelebilir ve sayfadan bir şeyin kaldırılacağını ya da ekleneceğini “haber vererek” yardımcı olabilir.

Icerik ekleme veya cikarmayi bir liste ornegi uzerinde gosterebiliriz. Bu animasyonların çoğu başka türlü içerikler için de kullanılabilir. Eğer bu animasyonları yararlı bulduysanız ya da ekleyecek başka fikirleriniz varsa lütfen bizimle iletişime geçin, fikirlerinizi duymaktan mutluluk duyarız.

HTML

Başlarken önceden doldurulmuş olan bir liste, ve listeye yeni ögeler eklemek için de bir buton olusturacagiz.

<ul id="list">
  <li class="show">List item</li>
  <li class="show">List item</li>
</ul>
<button id="add-to-list">Add a list item</button>

Dikkatinizi çekmek istediğim birkaç şey var. İlki, HTML’de iki adet ID kullandık.  Normalde stil işlemlerinde “fazla spesifik” oldukları ve problem çıkardıkları için ID kullanmayız.  Fakat JavaScript kullanırken işimize yarayacaklar.

İkincisi ise kullandığımız “show” class’ı. Bu class’ı daha sonra animasyon eklerken kullanacağız.

Biraz JavaScript

Bu demo’da listeye yeni ögeler eklemek ve daha sonra animasyonun gerçekleşebilmesi amacıyla “show” class’ını eklemek için biraz JavaScript kullanacağız.  Bunun iki aşamalı olmasının bir sebebi var.  Eğer liste ögeleri görünür halde eklenselerdi, animasyon geçişinin gerçekleşmesi için yeterli zaman olmazdı.

Animasyonları li ögeleri üzerinde gerçekleştirerek bunun üstesinden gelebilirdik fakat bu daha sonra elementleri başka bir animasyonla kaldırmak istediğimizde zorluk çıkarırdı.

/*
 * Add items to a list - from cssanimation.rocks/list-items/
 */
document.getElementById('add-to-list').onclick = function() {
  var list = document.getElementById('list');
  var newLI = document.createElement('li');
  newLI.innerHTML = 'A new item';
  list.appendChild(newLI);
  setTimeout(function() {
    newLI.className = newLI.className + " show";
  }, 10);
}

Animasyonsuz Hal

Biraz CSS yazarak liste ögelerini görünür hale getirebiliriz.  show class’ını kullanarak liste ögelerini görünür yapıyoruz ve aynı mantıkla show class’ını silmemiz liste ögelerinin kaybolmasına neden oluyor.

li {
  list-style: none;
  background: #d1703c;
  color: #fff;
  height: 0;
  line-height: 2em;
  margin: 0;
  padding: 0 0.5em;
  overflow: hidden;
  width: 10em;
}

li.show {
  height: 2em;
  margin: 2px 0;
}

Verdiğimiz bu stiller ile li elementlerinin, önlerinde madde işareti olmadan dikdörtgen bir şekilde görünmesini sağlıyoruz, height ve margin özelliğine 0 veriyoruz ve overflow özelliğini hidden’a ayarlıyoruz.  Bu sayede show class’ı vermediğimiz sürece gizli kalacaklar.

show class’ı elementlere height ve margin verecek. Henüz animasyon kullanmadığımız için ögeler sayfada bir anda belirecekler. Liste ögelerine tıklayıp yokolmalarını izlemeyi de unutmayın.

  • Liste ogesi
  • Liste ogesi

Fade (Soluklaşma)

Ekleyeceğimiz ilk animasyon basit bir "fade" efekti olacak. Liste ögeleri eskisine göre daha aşamalı olarak belirecekler. Görsel olarak bu hala biraz kullanışsız ama artık kullanıcılar sayfada bir şey olduğunun farkına varmak için daha fazla zamana sahip.

  • Liste ogesi
  • Liste ogesi

Efekti eklemek için bir CSS parçası daha oluşturdum. Bunu listeye uygulamak için, listeyi saran elemente fade class’ı verin.

.fade li {
  transition: all 0.4s ease-out;
  opacity: 0;
  height: 2em;
}
.fade li.show {
  opacity: 1;
}

Slide down (Aşağıya kayma) & Fade

Her yeni öge eklendiğinde oluşan ani zıplama biraz rahatsız edici. Şimdi akıcı bir kayma efekti oluşturmak için height özelliğini de ayarlayalım.

  • Liste ogesi
  • Liste ogesi

slide-fade class’ı ile fade class’ı arasındaki tek fark height: 2em özelliğinin kaldırılmış olması.  show class’ı (ilk CSS parçasından aldığı) belirlenmiş bir height özelliğine sahip olduğu için height’ı animasyon geçişinde otomatik olarak ayarlayacaktır.

.slide-fade li {
  transition: all 0.4s ease-out;
  opacity: 0;
}
.slide-fade li.show {
  opacity: 1;
}

Swinging in (Sallanma)

Fade ve slide efektlerinin yanı sıra, 3 boyutlu bir efekt ekleyerek biraz daha ileriye gidebiliriz. Tarayıcıların elementleri değiştirmeleri sadece X ve Y yönleriyle sınırlı değildir, ve boylece derinlik efekti verebiliriz.

  • Liste ogesi
  • Liste ogesi

Bunu ayarlamak için ul elementini içine alan section‘ı 3 boyutlu değişimler için bir sahne olarak belirlemeliyiz. Bunu, section’a bir perspective değeri vererek yapıyoruz.

Perspective CSS’te animasyon değişimlerinin gerçekleşeceği yerdeki derinliktir.  Düşük bir değer, daha sığ bir derinlik ve daha keskin açılar demektir. Bu değerlerle oynayıp sizin için uygun olanını bulabilirsiniz.

.swing {
  perspective: 100px;
}

Bir sonraki aşama li elementlerinin yerlerine "dönüşerek" gelmelerini ayarlamak.  Daha önceki gibi fade efekti vermek için opacity özelliğini kullanacağız fakat li elementlerinin yerlerine "dönerek" gelmeleri için transform özelliği ekleyeceğiz.

.swing li {
  opacity: 0;
  transform: rotateX(-90deg);
  transition: all 0.5s cubic-bezier(.36,-0.64,.34,1.76);
}

.swing li.show {
  opacity: 1;
  transform: none;
  transition: all 0.5s cubic-bezier(.36,-0.64,.34,1.76);
}

Bu örnekte li 90 derece arkaya dönük halde başlıyoruz. show class’ı eklendiğinde transform özelliği none‘a ayarlanıyor ve bu da li elementinin bir geçişle yerine gelmesini sağlıyor. Sallanma efektini vermek için cubic-bezier zamanlama fonksiyonunu kullandım.

Swinging from side (Yandan sallanma)

Yarattigimiz efekti kolayca yeni şekiller elde etmek için duzenleyebiliriz. Aşağıda ögelerin yanlardan sallanarak geldiği bir örnek görebilirsiniz.

  • Liste ogesi
  • Liste ogesi

Bu efekti sağlamak için sadece dönüşün eksenini değiştirmemiz gerekiyor.

.swing li {
  opacity: 0;
  transform: rotateY(-90deg);
  transition: all 0.5s cubic-bezier(.36,-0.64,.34,1.76);
}

Yaptığımız tek değişiklik rotateX yerine rotateY kullanmak oldu.

Ön ekler ve tarayıcı testleri

Yukarıdaki kod anlaşılabilirlik ve okunabilirlik nedeniyle herhangi bir ön ek içermiyor. -webkit ön eki ve başka ön eklere ihtiyacı olan tarayıcıları desteklemek için bu ön ekleri eklemenizi kesinlikle tavsiye ederim. Ben bu gibi şeyler hakkında endişelenmemek için Autoprefixer kullanıyorum.

Bu animasyonlar göster/sakla gibi basit bir mekanizma kullandıkları için animasyonları desteklemeyen tarayıcılarda bir sorun çıkarmayacaktır.  Birçok cihazda ve tarayıcıda bu animasyonların test edilmesi önemli fakat modern tarayıcıların çoğu bu animasyonları destekleyecektir.