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ği hakkında genel bir bakış sunulmaktadır.
Daha iyi tarayıcı ve çerçeve desteği
Aynı dokümanda görünüm geçişleri, Baseline Newly available olarak kullanıma sunulacak
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ı sürüm olarak yayınlanacak olan Firefox 144'e eklemeyi 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 destekleneceğini 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> belgelerine 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
Bir görünüm geçişinin 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 ö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, gerçekten değişmeyen birçok öğeyi 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ıza gerek kalmaz. 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 tamamlanacağı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.
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.
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 yerleştirilmiş görünüm geçişi grupları Chrome 140'tan itibaren kullanılabilir.
Browser Support
Görünüm geçişi çalıştırıldığında, anlık görüntüsü alınan öğeler sözde öğ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 için ağaçta belirli bir hiyerarşi gerekir.
"İç 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(…) ile ::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 özelliği 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;
});
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ıştırarak durumu düzeltir. Bu sayede, finished çözünürlüğünde oluşturulan görsel kare, 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 hâlâ zaman 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 element.startViewTransition() (document.startViewTransition() yerine) ç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şlevler içerir. Ayrıca, geçişi atlama veya türlerini değiştirme gibi işlemler yapmanıza olanak tanır.
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.
Görünüm geçişinin ViewTransition.waitUntil ile otomatik olarak tamamlanmasını engelleme
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 beklenmesine 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.