HTML5 <picture>
etiketi, ekran genişliğine bağlı olarak doğru görüntü kaynağını çözmenize yardımcı olur
Görünüşe göre tarayıcıların davranışı son 5 yılda çok fazla değişmedi ve çoğu display: none
, üzerlerinde bir özellik ayarlanmış olsa bile gizli görüntüleri indirecekti .
Bir medya sorguları çözümü olsa da , yalnızca resim CSS'de arka plan olarak ayarlandığında yararlı olabilir.
Ben (sorununa sadece JS çözümü vardır düşünüyordum ederken tembel yük , picturefill , vs.), HTML5 ile kutu çıkıyor güzel bir saf HTML çözümü vardır ortaya çıktı.
Ve bu <picture>
etiket.
İşte nasıl MDN bunu anlatır:
HTML <picture>
öğesi birden belirtmek için kullanılan bir kapsayıcıdır <source>
bir özgün bağlanma açısından unsurları <img>
içerdiği. Tarayıcı, sayfanın geçerli düzenine (görüntünün içinde görüntüleneceği kutunun kısıtlamaları) ve görüntüleneceği cihaza (örneğin normal veya hiDPI bir cihaz) göre en uygun kaynağı seçecektir.
İşte nasıl kullanılacağı:
<picture>
<source srcset="mdn-logo-wide.png" media="(min-width: 600px)">
<img src="mdn-logo-narrow.png" alt="MDN">
</picture>
Arkasındaki mantık
Tarayıcı img
, yalnızca medya kurallarının hiçbiri geçerli değilse etiketin kaynağını yükler . Ne zaman <picture>
eleman tarayıcı tarafından desteklenmez, tekrar gösterilmeye son çare olacaktır img
etiketi.
Normalde en küçük resmi kaynak olarak koyarsınız <img>
ve bu nedenle daha büyük ekranlar için ağır görüntüleri yüklemezsiniz. Tersine, bir medya kuralı geçerliyse, kaynağın kaynağı <img>
indirilmez, bunun yerine ilgili <source>
etiketin URL'sini indirir .
Buradaki tek tuzak, öğe tarayıcı tarafından desteklenmiyorsa, yalnızca küçük resmi yükleyeceğidir. Öte yandan 2017'de mobil ilk yaklaşımda düşünmeli ve kodlamalıyız.
Birisi çok çıkmadan önce, şu anda mevcut tarayıcı desteği <picture>
:
Masaüstü tarayıcılar
Mobil tarayıcılar
Kullanabileceğim tarayıcı desteği hakkında daha fazla bilgi .
İyi olan şey html5please'ın cümlesinin bir yedeği ile kullanmaktır . Ben şahsen onların tavsiyelerini almaya niyetliyim.
W3C'nin özelliklerinde bulabileceğiniz etiket hakkında daha fazla bilgi . Burada bahsetmemin önemli olduğunu düşündüğüm bir feragatname var:
picture
Eleman benzer görünümlü farklıdır video
ve audio
elemanlar. Hepsinde source
eleman bulunurken src
, eleman bir picture
elemanın içine yerleştirildiğinde ve kaynak seçim algoritması farklı olduğunda kaynak elemanın niteliğinin bir anlamı yoktur . Ayrıca, picture
öğenin kendisi hiçbir şey görüntülemez; yalnızca içerdiği img
öğesi için birden çok URL'den seçim yapmasını sağlayan bir bağlam sağlar.
Öyleyse söylediği şey, sadece bir görüntü yüklerken, görüntüye bir bağlam sağlayarak performansı artırmanıza yardımcı olmasıdır.
Görüntüyü küçük cihazlarda gizlemek için yine de biraz CSS büyüsü kullanabilirsiniz:
<style>
picture { display: none; }
@media (min-width: 600px) {
picture {
display: block;
}
}
</style>
<picture>
<source srcset="the-real-image-source" media="(min-width: 600px)">
<img src="a-1x1-pixel-image-that-will-be-hidden-in-the-css" alt="MDN">
</picture>
Böylece tarayıcı olacak göstermez gerçek resmini ve sadece indirir 1x1
(eğer birden fazla kez kullanırsanız önbelleğe alınabilir) piksel görüntü. Eğer olsa da, unutmayın <picture>
etiketi bile DESCKTOP ekranlarında, tarayıcı tarafından desteklenmeyen gerçek görüntü olmaz (kesinlikle bir polyfill yedeği var gerekir böylece) görüntülenir.