transform ne yapar
transform bir elementin nasıl çizildiğini değiştirir: taşınmış, ölçeklenmiş, döndürülmüş ya da eğilmiş. Aşağıdaki kesikli çerçeveler, her kutunun transform olmadan nerede olacağını gösteriyor:
translate(20px, 10px) mavi kutuyu 20px ileri ve 10px aşağı taşır. scale(1.3) yeşil olanı merkezi etrafında %30 büyütür. rotate(20deg) kehribar rengi olanı saat yönünde döndürür, skewX(-20deg) ise koyu olanı eğer. Her durumda kesikli yuva, yani elementin düzende kapladığı alan, tam olarak olduğu yerde kalır.
Transform fonksiyonları
| Fonksiyon | Ne yapar | Örnek |
|---|---|---|
translate(x, y) | taşır | translate(20px, -10px), translate(-50%, -50%) |
translateX(x) / translateY(y) | tek eksende taşır | translateY(-4px) |
scale(s) / scale(x, y) | yeniden boyutlandırır (1 = orijinal, 0.5 = yarı, negatif aynalar) | scale(1.1), scale(-1, 1) |
scaleX(s) / scaleY(s) | tek eksende yeniden boyutlandırır | scaleX(0.5) |
rotate(angle) | saat yönünde döndürür (negatif = saat yönünün tersine) | rotate(45deg), rotate(0.25turn) |
skew(x, y) / skewX(a) / skewY(a) | eğer | skewX(-15deg) |
matrix(a, b, c, d, e, f) | yukarıdakilerin hepsi tek bir matriste, çoğunlukla tarayıcının geri bildirdiği şey | |
none | transform yok |
translate() içindeki yüzdeler ebeveynin değil, elementin kendi boyutuna göredir. Döndürmenin dereceler, turlar ve dönmeyle birlikte kendi sayfası var: CSS döndürme.
Transform oyun alanı
Kaydırıcıları hareket ettir. İlk satır oluşturduğun transform değeri, ikincisi tarayıcının ondan hesapladığı matris; getComputedStyle her transform için bunu döndürür:
Transform'lar düzeni kaydırmaz
Transform uygulanmış bir element başka bir yere çizilir, ama sayfa transform uygulanmamış gibi yerleştirilir. Komşuları konumlarını korur. Transform'ları hover efektleri ve animasyon için iyi yapan budur: çevrelerindeki hiçbir şey yeniden yerleşmez.
Ortadaki iki kutu da 1,5 kat büyük görünüyor. Ölçeklenen, komşularıyla çakışıyor ve C yerinde kalıyor; width ve height ile büyütülen ise C'yi 40px ileri itiyor.
Birden fazla transform ve sıraları
Birkaç fonksiyonu boşlukla ayırarak tek bir transform içine koy. Sıra sonucu değiştirir, çünkü soldan sağa okunduğunda her fonksiyon kendinden öncekilerin bıraktığı koordinat sisteminde çalışır:
Mavi kutu 120px dümdüz ilerledi ve sonra yerinde döndürüldü. Yeşil kutu önce döndürüldü, bu yüzden "x ekseni" çapraz gösteriyor ve translateX(120px) onu köşegen boyunca aşağı taşıyor. Aynı fonksiyonlar, farklı yer.
Diğer tuzak: ikinci bir transform bildirimi ilkinin yerini alır. Bir kartta transform: rotate(-2deg) varsa ve hover kuralı transform: scale(1.05) diyorsa, hover'da döndürme kaybolur. İkisini de tekrarla (rotate(-2deg) scale(1.05)) ya da aşağıdaki ayrı özellikleri kullan.
transform-origin
Ölçekleme, döndürme ve eğme varsayılan olarak merkez olan sabit bir noktanın, transform origin'in etrafında gerçekleşir. Onu anahtar kelimelerle, uzunluklarla ya da yüzdelerle değiştir:
Üç kutu da 25 derece dönüyor. İlki ortası üzerinde dönüyor, ikincisi sol üst köşesini yuvanın köşesine sabit tutuyor, üçüncüsü sağ alt köşesini. Butonundan büyüyerek açılan bir açılır menü scale() ile transform-origin: top kullanır.
translate, scale ve rotate özellikleri
Modern tarayıcılarda fonksiyonlarla aynı işi yapan ama bağımsız olarak ayarlanıp canlandırılabilen üç ayrı özellik de var:
.card {
rotate: -2deg;
transition: scale 0.2s ease-out;
}
.card:hover {
scale: 1.05; /* the rotation stays, because it is a different property */
}
Onları hangi sırada bildirirsen bildir, her zaman herhangi bir transform değerinin önünde transform: translate(...) rotate(...) scale(...) yazılmış gibi birleşirler. Söz dizimine dikkat et: translate: 10px 20px ve scale: 1.2 fonksiyon parantezleri olmadan değer alır.
translate(-50%, -50%) ile ortalamak
translate() yüzdeleri elementin kendi boyutuna göre olduğu için top: 50%; left: 50%; transform: translate(-50%, -50%), her boyuttaki absolute konumlu bir elementi ebeveyninde ortalar. Div ortalama sayfası bunu flexbox ve grid ile karşılaştırıyor.
Sık yapılan hatalar
- İki
transformbildirimi. Sonraki tamamen kazanır. Fonksiyonları birleştir ya darotate,scalevetranslateözelliklerini kullan. - Satır içi bir elemente transform uygulamak. Düz bir
<span>ya da<a>,transform'u yok sayar. Onuinline-blockyap. - Komşuların kaymasını beklemek. Transform'lar düzeni asla değiştirmez. Yer açmak için
width,marginya dagapdeğiştir. - Yanlış fonksiyon sırası.
translate()'ten önce gelenrotate()döndürülmüş eksen boyunca taşır. position: fixedçocuklarla sürprizler. Transform uygulanmış bir element, fixed konumlu torunları için kapsayıcı blok olur, bu yüzden içindeki sabit bir başlık onunla birlikte kayar. Ayrıcaz-indexiçin yeni bir stacking context oluşturur.
Sıkça Sorulan Sorular
CSS'te transform ne işe yarar?
Bir elementin nasıl çizildiğini değiştirir: taşınmış (translate), yeniden boyutlandırılmış (scale), döndürülmüş (rotate) ya da eğilmiş (skew). Element düzendeki orijinal yerini korur, bu yüzden çevresindeki elementler kıpırdamaz.
CSS'te birden fazla transform nasıl uygulanır?
Onları tek bir transform değerinde boşlukla ayırarak listele: transform: translateX(50px) rotate(20deg) scale(1.2);. İkinci bir transform bildirimi yazmak ilkine eklenmez, onun yerini alır.
transform fonksiyonlarının sırası önemli mi?
Evet. Soldan sağa okunduğunda her fonksiyon öncekilerin bıraktığı eksenlerde çalışır, bu yüzden rotate(45deg) translateX(100px) elementi döndürülmüş bir eksen boyunca taşır, translateX(100px) rotate(45deg) ise onu düz taşır ve sonra döndürür.
transform-origin nedir?
Ölçekleme, döndürme ve eğmenin etrafında gerçekleştiği sabit noktadır. Varsayılan merkezdir (50% 50%). transform-origin: top left bir elementin sol üst köşesinden büyümesini ya da onun etrafında dönmesini sağlar.
transform span'imde neden çalışmıyor?
Transform'lar düz bir <span> ya da <a> gibi değiştirilmemiş satır içi elementlere uygulanmaz. Elemente display: inline-block ya da block ver, transform çalışır.