2016-03-19 29 views
12

Uzun zaman önce content özelliğini for any HTML element izin CSS3 Oluşturulan İçerik spec bir taslak vardı (sadece :: önce/:: sonrasında sözde elemanları) boş veya değiştirilen elemanları herhangi bir resmi kısıtlama olmaksızın,. Bir zamanlar Opera Presto (1, 2) ve en azından bir ölçüde WebKit (3) tarafından desteklenmiştir. 2011'in sonunda, WebKitiçin uygulamasının span değiştirilen öğeden değiştirilemeyen bir öğeye etkili bir şekilde dönüştürülmüş gibi görünüyordu (içerik menüsü bile değiştirildi, 'Resmi farklı kaydet ...'). Ayrıca, img::before gibi sahte öğeleri uygulamak mümkün kıldı.CSS `content` özelliği WebKit'teki` img` öğesi için nasıl çalıştı?

Geçerli Göz Kırpma (Chrome vb.) Uygulamasında, özelliğinin img öğesinin seçilerek görünür bir etkisi yoktur. Ama img eleman açıkça düzgün yüklenmiş veya kırık olup olmadığına bağlı olarak farklı bir yapıya sahiptir: yüklerse, bu basit boş unsur olarak DOM Denetleyicisi tarafından gösterilir ancak eğer kırılırsa, bu gibi iç Gölge DOM yapısını ortaya çıkarır:

<div id="alttext-container" style="overflow: hidden; border: 1px solid silver; display: inline-block; box-sizing: border-box; padding: 1px;"> 
    <img id="alttext-image" width="16" height="16" align="left" style="margin: 0px; float: left; display: inline;"> 
    <div id="alttext" style="overflow: hidden; display: block;">Alt text</div> 
</div> 

Muhtemelen kırık img çünkü gölge div s yardımıyla görüntülenir, bu durumda sadece (4) kendisine sözde elemanları uygulamak mümkündür.

Güncel WebKit img için sözde elemanları desteklemez. Ancak, ilginç bir şekilde, en azından iOS 9.2.1 Safari, bu (5) için content özelliğini ayarladıktan sonra bunları desteklemeye başlar.

Bu özellik neden böyle bir değişiklik yapıyor? Boş bir öğenin herhangi bir içerik alması durumunda (hatta üretilir), tarayıcının bu içeriği gösterecek bir şey sağlaması, boş öğeyi bir çeşit kapsayıcı (Blink'in gölgesi div id="alttext-container" gibi) ile değiştirmesi ve bu kapsayıcının pseudos. Yanlış mıyım? Ve bu davranış en son WebKit sürümlerinden kaldırılmadı mı?

+1

ilginç bir şekilde .. safari de sonradan öğelerini gösterir ve kırılmasa bile görüntüyü göstermez .. –

+0

Evet, Safari'de bu 'img' elemanın render model değiştirir' content' özelliği yüklenmemiş/kırık devlet, sahip gibi görünüyor. yani Blink davranışları farklıdır. bu arada , sen OS test etmedi X Safari? –

+0

Şaşırtıcı, bu yüzden hiçbir yerde belgelenmiş bulunamıyorum .. –

cevap

1

The content property as defined in CSS 2.1 için geçerlidir: önce ve: sözde elemanları sonra. CSS kurallarına göre, herhangi bir öğe için herhangi bir özellik belirtebilirsiniz, ancak belirtimler, özelliklerin "geçerli olduğu" (yani, üzerinde etkisi olan) özelliklerine ilişkin sınırlamalara sahiptir. CSS3 Generated and Replaced Content Module

, bir Çalışma Taslağı, tüm unsurları için geçerli gibi içerik özelliği açıklanmıştır. Bir h1 elemanının içeriğini bir görüntü ile değiştirmenin bir örneğine sahiptir ve kesinlikle bir img elemanına da aynı şekilde yapılabilir.

Ancak bu yalnızca bir Çalışma Taslaktır. CSS uygulama durumu, QuirksMode.org CSS bilgisi ve Caniuse.com'daki olağan kaynaklar durumu göstermez; sadece içerik için destek açıklar: önce ve: (sonra IE 7 ve daha önce oldukça evrenseldir.