CSS3 Transform Özelliği ile 3B Tasarımlar Nasıl Oluşturulur

Yayınlanan: 2023-03-16

CSS3 dönüştürme özelliğine gelince, 2B ve 3B olmak üzere iki boyut vardır. Animasyon yaparken, bir öğeyi bir durumdan diğerine değiştirmek için dönüşümler kullanılır. Bu öğretici, 2B animasyonlarla ilgili bu kılavuzun bir uzantısı olarak hizmet vermektedir. 3B tasarım ve bu temel kavramları birleştirerek harika animasyonları nasıl oluşturabileceğiniz hakkında biraz fikir vereceğim.

3B dönüşümler oldukça ayrıntılı olabilir ve bir çok farklı parça birleştirilirse karmaşık hale gelebilir, bu nedenle temel yapı taşlarıyla başlamak faydalıdır. Bu kavramlardan bazıları tanıdık gelecektir, ancak "z", 3B'de çalışırken yeni görünecek bir şeydir. 3B dönüşümler, 2B CSS dönüşümlerini z eksenini içerecek şekilde genişleterek DOM öğelerinin 3B dönüşümlerine izin verir.

Z Ekseni nedir?

Z eksenine çok fazla referans olacaktır. Bunu, bir şeyin size olan veya sizden olan uzaklığının ölçüm mesafesi olarak düşünmek kolaydır. Pozitif bir değer ise size daha yakındır. Negatif bir değer ise, sizden daha uzaktadır.

X, Y ve Z eksenlerini temsil eden çizim

3B Dönüşüm Örnekleri

3B dönüşümün temel özellikleri translate3d , scale3d , rotateX , rotateY , rotateZ , perspective ve matrix3d . x,y ve z için bağımsız değişkenler aldıkları için translate3d , scale3d ve matrix3d daha fazla bağımsız değişken dahil edilmiştir. Scale özelliği bir açı için bir değer alır ve perspektif de tek bir değer alır.

Çevirmek

çeviriZ()

Bu, yalnızca z ekseni değerini kullanarak bir 3B çeviriyi tanımlar. 2D çeviriden x ve y çevirisini hatırlayabilirsiniz. Fikir translateX() , translateY() ve translateZ() ile aynıdır çünkü her biri öğeyi doğru eksen boyunca belirtilen mesafe kadar hareket ettiren bir uzunluk değeri alır.

3d-tasarım-çeviri-z

Bu örnekte translateZ(-20px) , öğeyi görüntüleyiciden 20 piksel uzağa taşır.

İşte bu örneği oluşturmak için kod parçacığı:

 -webkit-transform: translateZ(-20px); -ms-transform: translateZ(-20px); transform: translateZ(-20px);

çeviri3d()

translate3d() işlevi, öğenin konumunu 3B alanda taşımak için kullanılır. Bu dönüşüm, her yönde ne kadar hareket ettiğini tanımlayan koordinatlar belirtilerek oluşturulur.

İşlev transform: translate3d(20px, -15px, 70px); görüntüyü pozitif x ekseni boyunca 20 piksel, negatif y ekseni üzerinde 15 piksel ve ardından pozitif z ekseni boyunca 70 piksel hareket ettirir.

3d-tasarım-çeviri-3d

İşte bir translate3d örneği:

 -webkit-transform: translate3d(20px, -15px, 70px); -ms-transform: translate3d(20px, -15px, 70px); transform: translate3d(20px, -15px, 70px);

Devam eden ikinci karenin bir miktar örtüşmesi olduğu oldukça açık. Beklendiği kadar dramatik görünmeyebilir, ancak perspektif özelliğinin eklenmesi (bu eğitimin ilerleyen kısımlarında) yardımcı olacaktır.

3d-tasarım-çeviri-3d-perspektif
Perspektif özelliği bu örneğe eklendi.

Döndür

rotate3d() işlevi, öğeyi 3B alanda eksen etrafında belirtilen açı kadar döndürür. Bu, rotate(x, y, z, angle) olarak yazılabilir.

X döndürmek()

Piksel değerleri burada çalışmaz, derece cinsinden olması gerekir. rotateX() yöntemi, bir öğeyi x ekseni etrafında belirli bir derecede döndürür. Dikdörtgenin nasıl daha kısa olduğunu görüyor musunuz? X ekseni boyunca döndürülüyor. Bu örnek, dönüşü 55 derecede göstermektedir.

3d-tasarım-x döndürme
 -ms-transform: rotateX(55deg); /* IE 9 */ -webkit-transform: rotateX(55deg); /* Safari */ transform: rotateX(55deg);

döndürmeY()

rotateY() yöntemi, bir öğeyi y ekseni etrafında döndürür. Alttaki dikdörtgenin üstteki kadar geniş olmadığına dikkat ettiniz mi? 60 derece döndürüldüğü için yukarıdaki dikdörtgen kadar geniş görünmeyecek şekilde döndürülür.

3d-tasarım-döndürme
 -ms-transform: rotateY(60deg); /* IE 9 */ -webkit-transform: rotateY(60deg); /* Safari */ transform: rotateY(60deg);

döndürmeZ()

rotateZ() yöntemi, bir öğeyi z ekseni etrafında belirli bir derece döndürür. Bu durumda değer 120 derecedir.

3d-tasarım-döndürme-z
 -ms-transform: rotateZ(120deg); /* IE 9 */ -webkit-transform: rotateZ(120deg); /* Safari */ transform: rotateZ(120deg);

döndürme3d()

rotate3d(1, -1, 1, 45deg) işlevi, görüntüyü y ekseni boyunca 45 derecelik bir açıyla döndürür. Öğeyi ters yönde döndürmek için negatif değerler kullanabileceğinize dikkat etmek önemlidir.

3d-tasarım-döndürme-3d

Bu, tek eksen belirtimlerinden daha karmaşık olduğu için, rotate3d şu şekilde bölünebilir: rotate3d(x,y,z,angle) .

Bunu biçimlendiren kod şöyle görünür:

 -ms-transform: rotate3d(1, -1, 1, 45deg); /* IE 9 */ -webkit-transform: rotate3d(1, -1, 1, 45deg); /* Safari */ transform: rotate3d(1, -1, 1, 45deg);

Temelleri Test Etme

X ekseni boyunca saat yönünde 45 derece.

döndürme-3d-saat yönünde-x ekseni-45-derece
 transform: rotate3d(1, 0, 0, 45deg);

Y ekseni boyunca 45 derece saat yönünde.

y ekseni boyunca saat yönünde 45 derece döndürme
 transform: rotate3d(0, 1, 0, 45deg);

Z ekseni boyunca 45 derece saat yönünde.

3d-tasarım-saat yönünde-z-ekseni-45-derece
 transform: rotate3d(0, 0, 1, 45deg);

Belirtilen değerlere bağlı olarak, bazen bir dönüşün fark edilmeyeceğini belirtmekte fayda var; örneğin, bu fark edilmeyecektir: transform: rotate3d(0, 0, 0, 50deg);

Perspektif

Bu muhtemelen en “boyutsal” dönüşümdür. Kelimenin tam anlamıyla perspektif kazanacağınız yer burasıdır. Perspektifi ayarlamadan bir öğeye 3B dönüşümler uygularsanız, ortaya çıkan efekt üç boyutlu olarak görünmez. Bu, yukarıdaki özelliklere de eklenebilecek bir şeydir.

3B alanı etkinleştirmek için bir öğenin perspektife ihtiyacı vardır. Bu, iki şekilde uygulanabilir: transform özelliği veya perspective özelliği kullanılarak.

transform özelliği şöyle görünecektir: transform: perspective(600px); ve perspektif özelliği şöyle görünecektir: perspective: 600px; .

Aşağıdaki örnekler, ikisi arasında onu değiştirecek, bu yüzden koda yakından baktığınızdan emin olun.

perspective değeri, 3B efektinin ne kadar yoğun olduğunu belirler. Büyük bir nesneye baktığınızda nasıl hissettirdiği gibi, düşük bir değeri gerçekten fark edilebilir olarak düşünün. Daha büyük bir değer olduğunda, etki daha az yoğundur.

Ufuk noktasının konumu da özelleştirilebilir. CSS perspektifiyle ilgili olduğu için bahsetmeye ve birçok deney yapmaya değer. Varsayılan olarak, bir 3B alan için ufuk noktası merkezde konumlandırılır. Ufuk noktasının konumunu değiştirmek için perspektif-orijin özelliğini kullanın. Şuna benzer bir şey olurdu: perspective-origin: 15% 55% .

3 boyutlu tasarım perspektifi
Soldaki örnek yaklaşık 800 piksele ayarlandı. Sağ taraftaki perspektif çok daha sert, 200px'e ayarlandı.

Ölçek

ölçekZ()

Bu, z ekseni için bir değer vererek bir 3B ölçekli dönüşümü tanımlar. Yalnızca z ekseni boyunca ölçeklendiği için, ölçeklendirme etkisini göstermek için başka işlevlere ihtiyaç vardır. Dikdörtgenin izleyiciye nasıl baktığını ve gerçekten perspektifi nasıl gösterdiğini gördünüz mü?

Ölçeği(Z) tam olarak anlamak için, değerle oynayın ve daha büyük değerlerle perspektifin "daha keskin" olduğunu göreceksiniz.

3d-tasarım-ölçekli-z
Soldaki örneğin değeri 2 ve sağdaki örneğin değeri 8'dir.

ölçek3d(x,y,z)

scale3d() işlevi, bir öğenin boyutunu değiştirir ve scale(x, y, z) olarak yazılır. scaleZ gibi, perspective ile birlikte kullanılmadıkça perspektifin tam olarak neye benzediği belli değildir.

3d-tasarım-ölçekli-3d

Bu örnek şunu kullanır:

 -ms-transform: perspective(500px) scale3d(0.8, 2, 0.2); /* IE 9 */ -webkit-transform: perspective(500px) scale3d(0.8, 2, 0.2); /* Safari */ transform: perspective(500px) scale3d(0.8, 2, 0.2);

Hızlı bir not: Vektörün üç koordinatı da eşitse, ölçeklendirme tek tiptir ve gözle görülür bir fark olmayacaktır.

 transform: scale3d(1, 1, 1); /* unchanged */ transform: scale3d(2, 2, 2); /* twice the original size */

Matrix3d()

2B matris altı değer alırken, 3B matris 16 (4×4 matris) alır! Tüm detaylar ele alınsaydı çok uzun bir yazı olurdu, bu yüzden bu kavramı daha fazla keşfetmek istiyorsanız, Codepen'de bu etkileşimli matrix3d ​​deneyini şiddetle tavsiye ederim.

3 boyutlu matris

İşte matrix3d ​​için temel matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1)

Nasıl oluşturulurum
3D Dönüşümlü Animasyonlar

Artık temel bilgiler ele alındığına göre, etkileşimli animasyonlar oluşturmak bir sonraki adımdır. CSS3 dönüşümlerini ve geçişlerini kullanarak öğeler, döndürerek, ölçekleyerek veya perspektif ekleyerek bir durumdan diğerine değişir.

CSS animasyonlarında yeniyseniz, bir geçiş olmadan dönüştürülmekte olan bir öğenin aniden bir durumdan diğerine değişeceğini bilmek önemlidir. Bunu önlemek için, değişikliği kontrol edebilmeniz ve daha yumuşak bir görünüm verebilmeniz için bir geçiş eklenebilir.

Kart Çevirme Nasıl Oluşturulur

Kim kart oynamayı sevmez? Bu örnekte çift taraflı bir kart bulunmaktadır ve bir dönüşümle çevirerek her iki tarafı da görebilirsiniz. body etiketine bir göz atarsanız, efektin çoğu perspective özelliğinden gelir. 500px olarak ayarlanmıştır. 100 piksel gibi daha düşük bir değer çok "çarpık" görünür.

İşte başlangıç ​​HTML'si:

 <div class="wrapper"> div class="side-one"></div> <div class="side-two"></div> </div>

Bunun gerçekleşmesini sağlayan şey CSS'dir:

 body { -webkit-perspective: 500px; perspective: 500px; } .wrapper { -webkit-transition: all 1s ease-in; transition: all 1s ease-in; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; position: relative; margin: 100px auto; width: 250px; height: 250px; cursor: pointer; } .wrapper div { position: absolute; -webkit-backface-visibility: hidden; backface-visibility: hidden; width: 100%; height: 100%; border-radius: 10px; background-position: 50% 50%; background-size: 150px; background-repeat: no-repeat; box-shadow: inset 0 0 45px rgba(255,255,255,.3), 0 12px 20px -10px rgba(0,0,0,.4); color: #FFF; text-align: center; text-shadow: 0 1px rgba(0,0,0,.3); } .side-one { z-index: 400; background: #50c6db url(image.png); } .side-two { -webkit-transform: rotateY(-180deg); transform: rotateY(-180deg); background: #ef4e65 url(image.png); } .wrapper:hover { -webkit-transform: rotateY(-1turn); transform: rotateY(-1turn); }
3d-tasarım-animasyon-bir-örnek

Bu, Codepen'de bulunabilir.

Dönüşümler konusunda yeniyseniz, bu size ilginç gelebilir: transform: rotate(1turn); Bu birim, kartımız için mükemmel çünkü bir "dönüş" birimi tam olarak göründüğü gibi, yani bir tam daire.

Ayrıca özel bir döndürme yöntemi yapmak için biraz yumuşatma kullandım. Bu transition: all 1s ease-in; .

Parçacıktaki başka bir 3B özelliği transform-style: preserve-3d; . Bunu dahil ederek, öğenin ana öğede kalmak yerine üç boyutlu uzayda “sallanmasına” izin verir.

3B Efektli Metin Nasıl Oluşturulur

Bu örnek eski bir film afişinden esinlenmiştir. Harika CSS stillerini kullanabilen pek çok farklı yazı tipi var, bu nedenle benzersiz yazı efektleri kesinlikle mümkün. Bu metin, benzersiz bir dönüşüm sağlamak için rotate3d ve transform3d kullanıyor.

3d metin efekti

HTML oldukça basittir:

 <div class="container"> <div class="text-wrapper"> <div class="text">New York City</div> </div> </div>

İşte temel CSS:

 .container{ -webkit-perspective: 600; } .text { transform: rotate3d(2, 2, .5, 22deg)translate3d(100px, 0px, 0px); }

Daha ayrıntılı CSS ve örnek Codepen'de bulunabilir.

Umarız CSS 3D dönüşümleri tasarımlarınıza yeni bir boyut getirir. Perspektif kullanmak, öğelerin daha boyutlu görünmesini sağlamanın harika bir yoludur. Geçişlerle birleştiğinde, animasyon oluştururken birçok olasılık vardır.