CSS özelliği , bir kutunun ve kutusunun oran olarak otomatik olarak hesaplandığı aspect-ratio
orantılı boyutları koruyan kutular oluşturmanıza olanak sağlar . Biraz matematiksel, ancak fikir şu ki, bu özellik üzerinde bir değeri diğerine bölebilirsiniz ve hesaplanan değer bir kutunun bu oranda kalmasını sağlar.height
width
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
şu anda Çalışma Taslağında bulunan CSS Kutu Boyutlandırma Modülü Seviye 4 spesifikasyonunda tanımlanmıştır. Bu, hala devam ettiği ve değişme şansı olduğu anlamına gelir. Ancak, Chrome ve Firefox deneysel bir bayrak arkasında desteklediğinden ve Safari Teknoloji Önizlemesi, 2021'in başlarında buna destek eklediğinden, aspect-ratio
çok fazla ivme kazanan güçlü sinyaller var .
Sözdizimi
aspect-ratio: auto || ;
Düz İngilizce'de: aspect-ratio
ya varsayılan olarak auto
varsayılır ya da nerede bir değer olarak kabul edilir
.
- Başlangıç değeri:
auto
- Şunlar için geçerlidir: satır içi kutular ve dahili ruby veya tablo kutuları dışındaki tüm öğeler
- Devralındı: hayır
- Yüzdeler: n / a
- Hesaplanan değer: belirtilen anahtar kelime veya bir sayı çifti
- Animasyon türü: ayrık
Değerler
/* Keyword values */ aspect-ratio: auto; /* default */ /* Ratio values */ aspect-ratio: 1 / 1; /* width and height are equal proportion */ aspect-ratio: 2 / 1; /* width is twice the height*/ aspect-ratio: 1 / 2; /* width is half the height */ aspect-ratio: 16 / 9 /* typical video aspect ratio */ /* Global values */ aspect-ratio: inherit; aspect-ratio: initial; aspect-ratio: unset;
Değiştirilen ve değiştirilmeyen içerik üzerinde çalışır
"Uhm, evet, tarayıcı bunu bizim için resimlerde zaten yapmıyor mu?" cevap: kesinlikle . Tarayıcılar, görüntüler gibi değiştirilen içerik üzerinde bazı süslü en boy oranı hesaplamaları yapar . Dolayısıyla, bir görüntünün genişliği 500px ise, tarayıcı görüntünün içsel veya "doğal" boyutlarını korumak için CSS mizanpaj algoritmalarını esnetir. aspect-ratio
Özelliği, etkin şekilde doğal boyutları geçersiz kılmak için kullanılabilir.
Ancak değiştirilmeyen içeriğin doğal bir oranı yoktur. Bu, divs gibi çalıştığımız şeylerin çoğu. Öğenin doğal oranlarını korumaya çalışmak yerine, aspect-ratio
"tercih edilen" bir boyutlandırma ayarlar.
Şimdi, spesifikasyon şu anda eski CSS spesifikasyonlarının, özellikle CSS 2.1'in değiştirilen ve değiştirilmeyen içerik arasında net bir ayrım içermediğini belirtiyor. Bu, açıklamaya yardımcı olmak için spesifikasyona eklenen bazı ek özel durumları görebileceğimiz anlamına gelir. Şimdilik, tarayıcıların değiştirilen ve değiştirilmeyenlerde tercih edilen en boy oranlarını ayrı ayrı ayarlamak için destek sunduğunu görüyoruz; burada, deneysel bir bayrağın arkasında erken desteği olan bazı tarayıcılar yalnızca aspect-ratio
değiştirilmemiş içeriği destekleyebilir. Kesinlikle, geliştikçe tarayıcı desteğine göz atmaya değer.
Bir width
veya belirtmeden kendi başına çalışırheight
Yani, evet, bunu şöyle bir öğenin üzerine bırakabiliriz:
.element ( aspect-ratio: 16 / 9; )
… Ve öğenin varsayılanı width: auto
, öğenin boyutlarını ayarlamak için örtük olarak devreye girer.
Aynı öğede olduğunda width
veya olduğunda değişirheight
Diyelim ki genişliği 300px
ve bir aspect-ratio
olan bir elemanımız var 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Doğası gereği, aspect-ratio
öğenin boyutlarını kendi başına hesaplamak ister ve bunu, kullanıldığı bağlama göre yapar. Ancak bununla birlikte, width
en boy oranına 300px
, genişlik olarak kullanarak öğenin en boy oranı kutusunu hesaplamasını söyler . Sonuç olarak, az önce yazdığımız gibi:
.element ( height: 100px; width: 300px; )
Bu mantıklı! Unutmayın, belirtilmediğinde width
veya height
belirtildiğinde, tarayıcı bunların olduğunu varsayar auto
ve oradan devam eder. Açık width
ve height
değerler verdiğimizde , bunlar kullanılır.
Bazı durumlarda göz ardı edilir
Bu, işlerin biraz akıl almaz hale geldiği yerdir çünkü aspect-ratio
gözden kaçan veya hesaplamalarının diğer özelliklerden etkilendiği durumlar vardır . Şunları içerir:
Ne zaman hem width
ve height
eleman ilan edilir
Az önce width
veya height
on ve elementinin beyan edilmesinin hesaplamasını nasıl etkileyeceğini gördük aspect-ratio
. Eleman zaten hem bir sahipse Ama width
ve height
bu yerine alışması aspect-ratio
. Her iki özelliğin de geçersiz kılınmasını gerektirir aspect-ratio
; ya height
da width
tek başına ayarlamak öğenin en boy oranını bozmaz.
Senes yapar, değil mi? Hesaplamada bu değerden birini kullanmak width
veya bu değeri kullanmaya height
zorlarsa, aspect-ratio
mantıksal olarak her aspect-ratio
iki değer de zaten sağlandığı ve ayarlandığı için her ikisinin de kullanılması tamamen geçersiz kılınacaktır.
İçerik orandan çıktığında
Basitçe ifade etmek gerekirse, en boy oranına sahip bir öğeniz varsa ve içerik, öğeyi genişletmeye zorlayacak kadar uzunsa, öğe genişleyecektir. Ve eğer eleman genişlerse, boyutları değişir ve dolayısıyla artık en boy oranı olmaz. Spesifikasyonun mülkün "tercih edilen" en boy oranını ayarladığını söylemesinin nedeni budur. Tercih edilir, ancak reçete edilmemiştir.
Nasıl çalıştığını beğenmedin mi? min-height: 0;
Öğeyi ayarlamak , içeriğin genişletmek yerine tercih edilen en boy oranını aşmasına izin verecektir.
min-*
Ve max-*
mülkleri "kaybettiğinde"
Bunun nasıl çalıştığını gördük, değil mi? İçerik, kutunun boyutlarını aştığında, aspect-ratio
kutu içerikle birlikte genişlediği için etkili bir şekilde kaybolur. Bunu ile geçersiz kılabiliriz min-width: 0
.
Yani en tümü çünkü min-*
ve max-*
özellikleri genellikle savaş width
ve height
Kutu Modeli hesaplamalar üzerinde savaş üstünlük için. Örneğin:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Fakat:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
Bunun nedeni min-width
, ya width
belirli bir değerin altına inmeyi engellemesidir ya width
da öğeyi olması gereken minimum genişliğin ötesinde ayarladığı için göz ardı edilir . Aynı şey için de geçerli min-height
, max-width
ve max-height
.
Tüm bu noktada: biz de a ayarlarsanız min-*
veya max-*
aynı elementin mülk aspect-ratio
ve onlar üzerinde “kazan” width
ya height
, sonra bu geçersiz kılar aspect-ratio
. Biraz kafa karıştırıcı olduğunu söylemiştim. ?
Tarayıcı desteği
IE | Kenar | Firefox | Krom | Safari | Opera |
---|---|---|---|---|---|
Hayır | Hayır | 86 1.2,3 | 90 4 | TP 5 | Hayır |
Android Chrome | Android Firefox | Android Tarayıcı | iOS Safari | Opera Mobile |
---|---|---|---|---|
Hayır | Hayır | Hayır | Hayır | Hayır |
1 ayarlayarak etkin olması Can
layout.css.aspect-ratio.enabled
için true
.2 Firefox 81'de sunulan bloklar ve değiştirilen öğeler için destek .
3 Firefox 83'te sunulan esnek öğeler için destek.
4
#enable-experimental-web-platform-features
Etkin olarak ayarlanarak etkinleştirilebilir.5 Safari Teknoloji Önizlemesi 118'de mevcuttur.