Görünüm geçişlerindeki yenilikler (2025 güncellemesi)

Yayınlanma tarihi: 8 Ekim 2025

2023'te aynı dokümanda görünüm geçişlerini kullanıma sunduğumuzdan beri çok şey değişti.

2024'te belgeler arası görünüm geçişlerini kullanıma sunduk, view-transition-class ve görünüm geçişi türleri gibi iyileştirmeler ekledik. Ayrıca Safari'nin görünüm geçişleri desteği eklemesini memnuniyetle karşıladık.

Bu yayında, 2025'te görünüm geçişleriyle ilgili nelerin değiştiğine dair genel bir bakış sunulmaktadır.

Daha iyi tarayıcı ve çerçeve desteği

Aynı doküman görünümü geçişleri, Baseline Newly available olarak kullanıma sunulacak

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox Technology Preview: supported.
  • Safari: 18.

Source

Interop 2025'in odak alanlarından biri, View Transition API'dir. Bu API'de özellikle document.startViewTransition(updateCallback) ve view-transition-class ile aynı belge görünümü geçişleri, view-transition-name: match-element ile otomatik adlandırma ve :active-view-transition CSS seçici yer alır.

Firefox, bu özellikleri 14 Ekim 2025'te kararlı hale gelecek olan Firefox 144 sürümüne dahil etmeyi planlıyor. Bu işlem, söz konusu özellikleri yeni kullanılabilir temel düzey özellikler haline getirir.

View Transition API desteği artık React çekirdeğinde

React ekibi, yıl boyunca görünüm geçişlerini React'in çekirdeğine eklemek için çalıştı. Nisan ayında desteği duyurmuşlardıreact@experimental ve bu hafta React Conf'ta desteği react@canary'a taşıdılar. Bu da tasarımın son haline yakın olduğu anlamına geliyor.

function Child() {
  return (
    <ViewTransition>
      <div>Hi</div>
    </ViewTransition>
  );
}

function Parent() {
  const [show, setShow] = useState();
  if (show) {
    return <Child />;
  }
  return null;
}

Tüm ayrıntılar için React'in <ViewTransition> dokümanlarına göz atabilir veya konuyla ilgili iyi bir giriş için Aurora Scharff'ın bu konuşmasını izleyebilirsiniz.

Yakın zamanda kullanıma sunulan özellikler

view-transition-name: match-element ile öğeleri otomatik olarak adlandırma

Browser Support

  • Chrome: 137.
  • Edge: 137.
  • Firefox Technology Preview: supported.
  • Safari: not supported.

Görünüm geçişinin bir parçası olarak anlık görüntüsü alınacak bir öğeyi işaretlemek için öğeye view-transition-name ekleyin. Bu, iki farklı öğe arasında geçiş yapma gibi özellikleri etkinleştirdiği için görünüm geçişleri açısından çok önemlidir. Her öğe, geçişin her iki tarafında da aynı view-transition-name değerine sahiptir ve görünüm geçişleri sizin için her şeyi halleder.

Ancak, çok fazla öğeyi, gerçekten değişmeyen öğeleri geçiş yaparken öğeleri benzersiz şekilde adlandırmak zahmetli olabilir. Bir listede 100 öğe taşıyorsanız 100 benzersiz ad bulmanız gerekir.

match-element sayesinde tüm bunları yapmanız gerekmez. Bu, view-transition-name için değer olarak kullanıldığında tarayıcı, öğenin kimliğine göre eşleşen her öğe için dahili bir view-transition-name oluşturur.

Bu yaklaşım aşağıdaki demoda kullanılmıştır. Satırdaki her karta otomatik olarak oluşturulan bir view-transition-name eklenir.

.card {
  view-transition-name: match-element;
  view-transition-class: card;
}

#targeted-card {
  view-transition-name: targeted-card;
  view-transition-class: none;
}

Giriş veya çıkış yapan kart açık bir ad alır. Bu ad, CSS'de belirli animasyonları bu anlık görüntüye eklemek için kullanılır. Diğer tüm kartların anlık görüntüleri, kendileriyle ilişkili view-transition-class kullanılarak şekillendirilir.

/* Style all pseudos with the class .card */
::view-transition-group(*.card) {
  animation-timing-function: var(--bounce-easing);
  animation-duration: 0.5s;
}

/* Style only the targeted-card's pseudos */
::view-transition-old(targeted-card):only-child {
  animation: animate-out ease-out 0.5s forwards;
}
::view-transition-new(targeted-card):only-child {
  animation: animate-in ease-in 0.25s forwards;
}

Geliştirici Araçları artık view-transition-class kullanan sözde öğeleri hedefleyen kuralları gösteriyor

Görünüm geçişlerinde hata ayıklamak için Geliştirici Araçları'ndaki Animasyonlar panelini kullanarak tüm animasyonları duraklatabilirsiniz. Bu sayede, görünüm geçişinin tamamlanmış duruma ulaşacağından endişelenmeden sözde öğeleri inceleyebilirsiniz. Geçişlerin nasıl gerçekleştiğini görmek için animasyonun zaman çizelgelerinde manuel olarak da gezinebilirsiniz.

Chrome Geliştirici Araçları ile görünüm geçişlerinde hata ayıklama.

Daha önce, ::view-transition-* sözde öğelerinden biri incelenirken Chrome Geliştirici Araçları, kendi view-transition-class kümesi kullanılarak sözde öğeleri hedefleyen kuralları göstermiyordu. Bu durum, işlevin eklendiği Chrome 139'da değişti.

Şekil: Kartlar demosunda bir view-transition-group sözde öğesini inceleyen Chrome Geliştirici Araçları'nın ekran görüntüsü. Stiller sekmesinde, view-transition-group(*.card) seçicisini kullanan kural da dahil olmak üzere bu sözdeyi etkileyen kurallar gösterilir.

İç içe görünüm geçişi grupları Chrome 140'tan itibaren kullanılabilir.

Browser Support

  • Chrome: 140.
  • Edge: not supported.
  • Firefox: not supported.
  • Safari: not supported.

Görünüm geçişi çalıştırıldığında, anlık görüntüsü alınan öğeler sahte öğeler ağacında oluşturulur. Oluşturulan ağaç varsayılan olarak "düz" olur. Bu durumda, DOM'daki orijinal hiyerarşi kaybolur ve yakalanan tüm görünüm geçişi grupları tek bir ::view-transition sözde öğesi altında kardeş öğeler olur.

Bu düz ağaç yaklaşımı birçok kullanım alanı için yeterli olsa da kırpma veya 3D dönüştürme gibi görsel efektler kullanıldığında sorunlu hale gelir. Bunlar, ağaçta belirli bir hiyerarşi gerektirir.

İç içe yerleştirilmiş görünüm geçişi grupları etkinleştirilmeden ve etkinleştirilerek yapılan bir demoyu kaydetme. İç içe yerleştirilmiş görünüm geçişi grupları kullanıldığında metin içerikleri kart tarafından kırpılabilir ve metin de kartla birlikte 3D olarak dönebilir.

"İç içe görünüm geçişi grupları" sayesinde artık ::view-transition-group sözde öğelerini iç içe yerleştirebilirsiniz. Görünüm geçişi grupları iç içe yerleştirildiğinde, geçiş sırasında kırpma gibi efektleri geri yüklemek mümkündür.

Görünüm geçişi gruplarını nasıl kullanacağınızı öğrenin.

Sözde öğeler artık daha fazla animasyon özelliğini devralıyor

Bir ::view-transition-group(…) sözde öğesinde animation-* uzun el yazısı özelliklerinden birini ayarladığınızda, kapsanan ::view-transition-image-pair(…), ::view-transition-old(…) ve ::view-transition-new(…) de bu özelliği devralır. Bu özellik, ::view-transition-new(…) ve ::view-transition-old(…) arasındaki geçişi ::view-transition-group(…) ile otomatik olarak senkronize ettiği için kullanışlıdır.

::view-transition-group(.card) {
  animation-duration: 0.5s;
}

Başlangıçta bu devralma animation-duration ve animation-fill-mode ile sınırlıydı (daha sonra animation-delay de eklendi) ancak şimdi daha fazla animasyon uzun el yazısını devralacak şekilde genişletildi.

Görünüm geçişlerini destekleyen tarayıcılar artık kullanıcı aracısı stil sayfalarında aşağıdakilere sahip olmalıdır.

:root::view-transition-image-pair(*),
:root::view-transition-old(*),
:root::view-transition-new(*) {
  animation-duration: inherit;
  animation-fill-mode: inherit;
  animation-delay: inherit;
  animation-timing-function: inherit;
  animation-iteration-count: inherit;
  animation-direction: inherit;
  animation-play-state: inherit;
}

Daha fazla özellik devralan sözde öğeler, Chrome 140'ta kullanıma sunuldu.

finished sözü geri çağırmasının yürütülmesi artık bir çerçeve beklemiyor

Chrome, finished geri çağırma işlevini yürütme sözünü kullanırken bu mantığı yürütmeden önce bir çerçevenin oluşturulmasını beklerdi. Bu durum, komut dosyası görsel olarak benzer bir durumu korumak için bazı stilleri hareket ettirirken animasyonun sonunda titremeye neden olabilir.

 document.startViewTransition(() => {
  if (from) {
    dfrom.classList.remove("shadow");
    dto.appendChild(target);
  } else {
    dto.classList.remove("shadow");
    dfrom.appendChild(target);
  }
}).finished.then(() => {
  if (from) {
    dto.classList.add("shadow");
  } else {
    dfrom.classList.add("shadow");
  }
  from = 1 - from;
});
Zamanlama düzeltmesini içermeyen Chrome 139'da kaydedilen, önceki kodun çalışırken kaydedilmiş hali. Geçiş tamamlandığında kutunun gölgesi eklendiğinde bir aksaklık görebilirsiniz.

Zamanlamadaki bu değişiklik, görünüm geçişi temizleme adımlarını yaşam döngüsü tamamlandıktan sonra eşzamansız olarak çalışacak şekilde taşıyarak durumu düzeltir. Bu sayede, finished vaat edilen çözünürlükte üretilen görsel çerçeve, görünüm geçişi yapısını korumaya devam eder ve titreşimi önler.

Bu zamanlama değişikliği Chrome 140'ta kullanıma sunuldu.

Yakında kullanıma sunulacak özellikler

Yıl henüz bitmediği için bazı özellikleri kullanıma sunmak için biraz daha zamanımız var.

Kapsamlı görünüm geçişleri, Chrome 140'ta test edilmeye hazır

Kapsamlı görünüm geçişleri, View Transition API'nin önerilen bir uzantısıdır. Bu uzantı, herhangi bir HTMLElement üzerinde document.startViewTransition() yerine element.startViewTransition() çağırarak DOM'un bir alt ağacında görünüm geçişi başlatmanıza olanak tanır.

Kapsamlı geçişler, farklı geçiş köklerine sahip oldukları sürece birden fazla görünüm geçişinin aynı anda çalışmasına olanak tanır. İşaretçi etkinlikleri, dokümanın tamamında değil, yalnızca söz konusu alt ağaçta engellenir (yeniden etkinleştirebilirsiniz). Ayrıca, geçiş kökünün dışındaki öğelerin, kapsamlı görünüm geçişinin üzerine çizilmesine izin verirler.

Aşağıdaki demoda, düğmelerden birini tıklayarak bir noktayı kapsayıcısı içinde hareket ettirebilirsiniz. Bu, doküman kapsamlı veya öğe kapsamlı görünüm geçişleriyle yapılabilir. Böylece, bunların nasıl farklı davrandığını görebilirsiniz.

Bu özellik, chrome://flags bölümünde "Deneysel Web Platformu özellikleri" işareti etkinleştirilmiş olarak Chrome 140'tan itibaren test edilmeye hazırdır. Geliştiricilerden geri bildirim almak için çalışmalarımızı sürdürüyoruz.

::view-transition konumunun Chrome 142'de fixed yerine absolute olarak değiştirilmesi

::view-transition sözde öğesi şu anda position: fixed kullanılarak konumlandırılıyor. CSS Çalışma Grubu'nun kararı uyarınca bu değer position: absolute olarak değişecektir.

Chrome 142'de kullanıma sunulacak olan bu position değerinin fixed'den absolute'e değişimi, ::view-transition sözde öğesinin kapsayan bloğu zaten anlık görüntü kapsayan blok olduğundan görsel olarak gözlemlenemez. Gözlemlenebilen tek etki, getComputedStyle işlemi yapılırken farklı bir position değeridir.

document.activeViewTransition, Chrome 142'ye geliyor

Görünüm geçişi başlatıldığında bir ViewTransition örneği oluşturulur. Bu nesne, geçiş ilerlemesini izlemek için çeşitli sözler ve işlevlerin yanı sıra geçişi atlama veya türlerini değiştirme gibi manipülasyonlara izin verir.

Chrome artık bu örneği manuel olarak takip etmenizi gerektirmek yerine bu nesneyi temsil eden bir document.activeViewTransition özelliği sunuyor. Devam eden bir geçiş yoksa değeri null olur.

Aynı dokümanda görünüm geçişleri için değer, document.startViewTransition çağrıldığında ayarlanır. Dokümanlar arası görünüm geçişleri için ViewTransition örneğine pageswap ve pagereveal etkinliklerinde erişebilirsiniz.

document.activeViewTransition desteği Chrome 142'de kullanıma sunulacak.

ViewTransition.waitUntil ile görünüm geçişinin otomatik olarak tamamlanmasını önleme

Görünüm geçişi, tüm animasyonları tamamlandığında otomatik olarak finished durumuna ulaşır. Bu otomatik tamamlamayı önlemek için yakında ViewTranistion.waitUntil simgesini kullanabilirsiniz. Bir söz geçirilirken ViewTransition, yalnızca geçirilen söz de çözüldüğünde finished durumuna ulaşır.

const t = document.startViewTransition();
t.waitUntil(async () => {
  await fetch();
});

Bu değişiklik, yılın ilerleyen dönemlerinde kullanıma sunulacak ve örneğin fetch beklemeye veya kaydırmaya dayalı görünüm geçişinin daha kolay uygulanmasına olanak tanıyacak.

Sırada ne var?

2023'te ilk kez sunduğumuz görünüm geçişleri özelliğinden bu yana boş durmadığımızı görebilirsiniz. Gelecekte kapsamlı görünüm geçişlerini kullanıma sunmayı dört gözle bekliyoruz. Her zaman olduğu gibi geri bildirimlerinizi bekliyoruz.

Görünüm geçişleriyle ilgili sorularınız varsa sosyal medyada bize ulaşabilirsiniz. Görünüm geçişleriyle ilgili özellik istekleri CSS WG'ye gönderilebilir. Bir hatayla karşılaşırsanız Chromium hata bildiriminde bulunarak durumu bize bildirin.