Sorduğunuz şeyi incelemeden önce, viewportmeta etiketin neden ilk başta bulunduğunu biraz inceleyelim . İşte topladıklarım.
viewportEtikete neden ihtiyacımız var ?
Görünüm, web içeriğinin görülebildiği bir alandır. Genellikle, oluşturulan sayfa (web içeriği) görünümden daha büyüktür. Sonuç olarak, gizli içeriği görmek için genellikle kaydırma çubuklarını kullanırız (çünkü görünüm her şeyi görüntüleyemez). CSS Aygıt Uyarlama Modülü Seviye 1'den alıntılanmıştır :
Dar görünüm alanı, masaüstü tarayıcılarda iyi görünecek şekilde tasarlanmış belgeler için bir sorundur. Sonuç olarak, mobil tarayıcı satıcıları, görünüm alanı boyutundan farklı ve tipik bir masaüstü tarayıcı penceresininkine yakın olan sabit bir başlangıç içeren blok boyutu kullanırlar. Kaydırma veya yatay kaydırmaya ek olarak, yakınlaştırma genellikle belgeye genel bakış ve belgenin okunması ve etkileşimde bulunulması gereken belirli alanlarına yakınlaştırma arasında geçiş yapmak için kullanılır.
Mobil cihazlarda (ve diğer daha küçük cihazlarda), ilk içeren blok genellikle görünüm penceresinden daha büyüktür. Örneğin, ekran genişliği olan bir mobil aygıtın 640pxbaşlangıçtaki bir bloğu olabilir 980px. Bu durumda, ilk içeren blok 640pxmobil ekrana sığabilmesi için küçültülür . Bu 640pxgenişlik (ekran genişliği), initial-widthtartışmamızla ilgili olacak görünüm penceresine denir .
Peki .... Bu viewportetikete neden ihtiyacımız var ? Günümüzde mobil cihazlar için tasarım yapmamızı sağlayan medya sorgularımız var . Ancak, bu medya sorgusu gerçek görünümün genişliğine bağlıdır . Mobil cihazlarda, kullanıcı aracısı başlangıçtaki görüntü alanı boyutunu otomatik olarak farklı bir sabit olana (genellikle başlangıçtaki görüntü alanı boyutundan daha büyük) ayarlar. Dolayısıyla, bir mobil cihazın görünüm alanının genişliği sabitse, medya sorgularında kullandığımız CSS kuralları yalnızca görünümün genişliği asla değişmediği için yürütülmez. Kullanımı viewportetiketi, biz olabilir kontrol fiili (UA tarafından tarz edildikten sonra) ViewPort'un genişliğini. MDN'den alıntı :
Bununla birlikte, bu mekanizma, medya sorguları kullanan dar ekranlar için optimize edilmiş sayfalar için o kadar iyi değildir - örneğin, sanal görünüm alanı 980 piksel ise, 640 piksel veya 480 piksel veya daha kısa bir hızda başlayan medya sorguları asla kullanılmayacak, duyarlı tasarım teknikleri.
viewportEtiketin yalnızca genişlik değil, gerçek görünümün yüksekliğini de değiştirebileceğini unutmayın
viewport etiketinin width
widthBir de viewportetikete çevrilmiştir max-widthiçinde @viewportkural. widthAs device-widthdeğerini bildirdiğinizde 100%, @viewportkuralda çevrilir . Yüzde değeriinitial-width görünümün görünümüne göre çözümlenir . Yukarıdaki örneği hala kullanıyorsanız, max-widthdeğeri 640px. Bildiğiniz gibi, bu yalnızca max-width. min-widthOtomatik olacak extend-to-zoom.
extend-to-zoom
Sorunuz , zumaya genişletmenin değeri tam olarak neydi ? Topladığım kadarıyla, belirli bir yakınlaştırma düzeyinde görüntüleme alanına sığacak şekilde uzanan görünümü desteklemek için kullanılan değerdir. Başka bir deyişle, belirtilen yakınlaştırma değerine göre değişen bir görüntü alanı boyutu değeridir. Bir örnek? Verilen max-zoomUA stil değeri 5.0ve initial-widtholduğu 320px, <meta name="viewport" content="width=10">bir ilk gerçek genişliği çözecektir 64px. Bu mantıklıdır, çünkü bir cihazda yalnızca 320 piksel varsa ve yalnızca 5xnormal değere yakınlaştırılabiliyorsa , minimum görüntüleme alanı boyutu olur 320px divided by 5, yani bir seferde yalnızca 64 piksel gösterilir ( ve 10pxçünkü bu 32x yakınlaştırma gerektirir!). Bu değer , gerçek görüntüleme alanı genişliğinin belirlenmesinde rol oynayacak olan min-widthve max-widthdeğerlerinin nasıl genişletileceğini (değiştirileceğini) belirlemek için algoritma tarafından kullanılacaktır .
Hepsini bir araya koy
Yani esasen <meta name="viewport" content="width=device-width, initial-scale=1.0">ve arasındaki fark <meta name="viewport" content="initial-scale=1.0">nedir? Sadece algoritmanın ( bu ve bu ) adımlarını tekrarlayın . Önce ikincisini ( widthniteliği olmayan ) yapalım . ( initial-widthGörünüm penceresinin olduğunu varsayacağız 640px.)
width, set bu sonuçları edilmez max-widthve min-widthvarlık extend-to-zoomiçinde @viewportkural.
initial-scaleolduğunu 1.0. Bu, zoomdeğerin aynı zamanda1.0
- Hadi çözmek
extend-to-zoom . Adımlar:
extend-zoom = MIN(zoom, max-zoom). İşlem MIN, olmayan değere gider auto. İşte, zoomöyle 1.0ve max-zoomöyle auto. Bu araç extend-zoomolduğunu1.0
extend-width = initial-width / extend-zoom. Bu kolay; 640'ı 1'e bölün extend-width.640
- Çünkü
extend-zoom, olmayan auto, ikinci koşula atlayacağız. max-widthaslında extend-to-zoom, bu max-widthayarlanacaktır anlamına gelir extend-width. Böylece,max-width = 640
min-widthaynı zamanda extend-to-zoom, bu ayarı min-widthyapmak anlamına gelir max-width. Biz olsunmin-width = 640
- Sonra olmayan çözülmesi
auto (yani extend-to-zoomiçin değerler) max-widthve min-width. Bir sonraki prosedüre geçebiliriz . Çünkü min-widthveya max-widthdeğil auto, ilk kullanır if, böylece ilk gerçek görünüm ayarlama prosedüründe widthiçin MAX(min-width, MIN(max-width, initial-width))eşittir, MAX(640, MIN(640, 640)). Bu 640, ilk gerçek görünümünüz için çözülürwidth
- İçin taşıma sonraki prosedür . Bu adımda
widthdeğil auto. Değer değişmedi ve sonuç widtholarak640px
İlkini yapalım.
widthayarlandığında, bu sonuçlar max-widtholma 100%( 640pxbizim durumumuzda) ve min-widthvarlık extend-to-zoomiçinde @viewportkural.
initial-scaleolduğunu 1.0. Bu, zoomdeğerin aynı zamanda1.0
- Hadi çözmek
extend-to-zoom . Adımları dikkatlice izlerseniz (neredeyse yukarıdakiyle aynıdır), bir max-widthve 640pxve ile min-widthsonuçlanır 640px.
- Muhtemelen örüntüyü şimdi görebilirsiniz. Gerçek görüntü alanı genişliğini alacağız
640px.
Peki algılanan fark nedir? Aslında hiçbiri . İkisi de aynı şeyi yapıyor. Umarım açıklamam yardımcı olur ;-) Bir şey yanlış giderse, söyle bana.
1.0, ancak bundan emin değilim gibi görünüyor. Neyse, harika cevap, teşekkürler!