CSS 3D Dönüşümler
Optional Advanced az önce işaretçi, caret ve yerel kromu ayarladı. Bu son isteğe bağlı ders başka bir kutu: 3D dönüşümler. Karta kaçış noktası verir, derinlikte eğer. 2D translate / scale hover dersini yeniden yazmazsınız; imleç veya resize tutacağı da seçmezsiniz.
Doğrudan yanıt
CSS 3D dönüşümler 2D’deki aynı transform özelliğidir, artı derinlik. perspectiveyi ebeveyne koyun ki çocuklar ortak kaçış noktası paylaşsın (perspective-origin o noktayı kaydırır). rotateX ve rotateY yatay ve dikey eksende eğer; rotateZ bildiğiniz düz dönüştür. translateZ izleyiciye yaklaşır veya uzaklaşır. transform-style: preserve-3d çocukları bir sahnede tutar, düzleştirmez. backface-visibility: hidden yüz arkaya dönünce gizler — iki yüzlü kart için işe yarar. Yerleşim yuvası 2D’deki gibi durur. Açıları küçük tutun. prefers-reduced-motiona uyun.
Neden 2D hareket veya UI kromu değil
2D dönüşüm dersi düzlem hareketini öğretti: translate, rotate, scale, skew ve menteşe olarak transform-origin. Hâlâ geçerli. 3D kamera gibi perspective ve ekstra eksen ekler. Kullanıcı arayüzü CSS etkileşim kromuydu (cursor, resize, caret-color, appearance). Dönen karta yalancı el gerekmez; textarea tutacağı kaçış noktası değildir. Sadece 2px kaldırma istiyorsanız 2D’de kalın.
Perspective — kamerayı ebeveyne koyun
perspective bir uzunluktur: küçük değerler daha yakın ve dramatik; büyükler daha yassı. Sahneye koyun, her yüze değil, kardeşler tek kaçış noktası paylaşsın.
.stage {
perspective: 800px;
perspective-origin: 50% 40%;
}
.card-3d {
transform: rotateY(18deg);
transform-origin: center;
}
Tek öğeye transform: perspective(800px) rotateY(18deg) de yazabilirsiniz. O kamera yalnız o kutuya aittir. Küp veya kiremit sırası için ebeveyn perspective daha sakindir. perspective-origin, transform-originın kaçış noktası kuzenidir — dönen yüzün pivotunu değiştirmez.
Eksenler — rotateX, rotateY, rotateZ
Bir kitap düşünün. rotateY kapağı sol–sağ açar. rotateX size doğru veya uzağa eğer. rotateZ sayfada döner — bildiğiniz 2D rotate().
.tile-y {
transform: rotateY(-22deg);
}
.tile-x {
transform: rotateX(12deg);
}
.tile-z {
transform: rotateZ(8deg);
}
Gerekince 2D işlevlerle zincirleyin: rotateY(16deg) translateZ(24px). Sıra önemli — sonrakiler öncekilerin yerel uzayında çalışır. Tek transform listesi yeter, 2D dersindeki gibi. Tüm makalede rotateX(80deg) panayırdır, arayüz değil.
translateZ — mesafe, yerleşim itişi değil
Perspective ile pozitif translateZ çoğu zaman izleyiciye doğru gelir. Belgedeki komşular yer açmaz; yalnızca boya kayar, 2D translate gibi.
.stage {
perspective: 900px;
}
.pop-face {
transform: translateZ(40px) rotateY(-8deg);
}
.back-face {
transform: translateZ(-28px);
}
translateZ sahne yüzlerini ayırır; margin veya günlük z-index taklidi değildir. z-index hâlâ 2D yerleşimde örtüşen kutuları sıralar; 3D mesafe başka bir düğmedir. İş «çipi 2px kaldır» ise 2D dersindeki translateY yeter.
preserve-3d — sahneyi koruyun, yassılaştırmayın
Varsayılan olarak ebeveyn dönüşmüş çocukları yassılaştırır (transform-style: flat). 3D ilişki kaybolur. Küp, yığılmış kapak veya iki yüzlü kart için dönen sarmalayıcıya preserve-3d koyun.
.scene {
perspective: 700px;
}
.rig {
transform-style: preserve-3d;
transition: transform 0.45s ease;
}
.rig.is-flipped {
transform: rotateY(180deg);
}
.face {
position: absolute;
inset: 0;
backface-visibility: hidden;
}
Derinliği tutması gereken her ata preserve-3d ister — unutulmuş flat ebeveyn küpü afişe basar. Yaygın ayrım: dış sahnede perspective, iç iskelette preserve-3d: kamera dışarıda, eklemler içeride.
backface-visibility — tersi gizle
Yüz 90°yi geçince ayna görünür. backface-visibility: hidden o arkayı düşürür. İki yüz: ön rotateY(0), arka rotateY(180deg), ikisi de aynı iskelette position: absolute.
.card-rig {
position: relative;
transform-style: preserve-3d;
}
.card-front,
.card-back {
position: absolute;
inset: 0;
backface-visibility: hidden;
}
.card-back {
transform: rotateY(180deg);
}
Gizli arka olmadan önden bir hayalet sızar. Bu user-select: none değil, appearance: none da değil. 3D’de boyalı bir yüzü gizliyorsunuz; onay kutusunun derisini soymuyorsunuz.
3D’ye karşı 2D transform’a karşı UI kromu
📊 3D vs 2D transform vs UI chrome
| Tool | Job | Poor fit |
|---|---|---|
perspective + rotateX / rotateY / translateZ |
Derinlik sahnesi: eğim, mesafe, ortak kaçış noktası | Günlük 2px hover kaldırma; işaretçi şekli |
2D translate / rotate / scale / skew |
Düzlemde hareket; origin menteşesi | preserve-3d olmadan küp |
transform-style / backface-visibility |
İç içe 3D yüzler; tersi gizleme | Caret rengi; textarea resize |
UI (cursor, resize, appearance…) |
Kontrollerde etkileşim kromu | Kaçış noktaları; kart çevirme |
Optional Advanced zaten kontrolleri stillendirdi. Effects & Motion 2D eşlemeyi öğretti. Bu ders transform üzerindeki derinlik katmanı. Başlıkta rotateY var diye cursor: pointer onu 3D yapmaz. Giriş formunda perspective, not alanındaki resizein yerini tutmaz.
Sakin alışkanlıklar
UI kartları için perspective’i yüzlerce piksellerde tutun (600px–1200px sağlıklı bant). bodyye perspective: 40px koymayın. :hover veya sınıfı kısa transition ile transforma bağlayın — 2D’deki gibi. Süsü prefers-reduced-motion: reduce ile kesin (none veya küçük 2D dürtme). Klavye odağı hâlâ görünür halka ister; çevirme odak stili değildir.
.preview {
perspective: 1000px;
}
.preview .plate {
transition: transform 0.3s ease;
}
.preview:hover .plate {
transform: rotateY(-10deg) rotateX(4deg);
}
@media (prefers-reduced-motion: reduce) {
.preview .plate,
.preview:hover .plate {
transition: none;
transform: none;
}
}
Bu hover bir eğimdir; 2D çip kaldırması translateY(-0.15rem) değil, alanda resize: vertical da değil. Az hareket isteyenler durağan kart istiyorsa inanın.
Kendin dene
- Kartı
.stage { perspective: 800px; }içine sarın, çocuğarotateY(20deg)verin — sonraperspectivei çocuğuntransformuna taşıyıp kardeş kiremitleri karşılaştırın. - İki yüzlü kart: iskelette
preserve-3d, her iki yüzdebackface-visibility: hidden, arkadarotateY(180deg). - Ön düzleme
translateZ(32px)ekleyin; yerleşim komşularının kaymadığını görün. - Sınıf +
transition: transformile çevirin — sonraprefers-reduced-motionile yassılaştırın. - Bunu
cursor,resizeveya yalnızca 2DtranslateYhover ile çözmeyin.
Sık hatalar
- Tüm sayfa eğrilsin diye
bodydeperspective: 50px - Sarmalayıcıda
preserve-3dunutup küpün yassı kalmasına şaşmak - 2D çip kaldırmasını (
translateY) 3D dersi sanmak - UI kromunu (
cursor,resize,appearance) derinlik yerine kullanmak backface-visibilityi sahnede, yüzlerde değil- Büyük
rotateYçevirmelerindeprefers-reduced-motionu yok saymak - 3D’nin belge akışını
margingibi değiştirmesini beklemek
Özet
- 3D dönüşümler
transforma derinlik katar: perspective,rotateX/rotateY,translateZ - perspective ebeveyn sahnede; preserve-3d iç içe yüzlerin o uzayda kalması için
- backface-visibility: hidden arkaya dönmüş yüzü gizler
- Ne 2D hover kaldırma dersi ne kullanıcı arayüzü kromu
- Küçük açılar; azaltılmış harekete saygı
- Bu kursun son CSS dersi — Optional Advanced burada biter; haritada başka CSS slug yok
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek