CSS'de birden çok dönüşüm nasıl uygulanır?


603

CSS kullanarak, birden fazla uygulamayı nasıl uygulayabilirim transform?

Örnek: Aşağıda, döndürme değil yalnızca çeviri uygulanır.

li:nth-child(2) {
    transform: rotate(15deg);
    transform: translate(-20px,0px);        
}

Yanıtlar:


994

Onları böyle bir satıra koymalısınız:

li:nth-child(2) {
    transform: rotate(15deg) translate(-20px,0px);
}

Birden çok dönüşüm yönergesine sahip olduğunuzda, yalnızca sonuncusu uygulanır. Diğer herhangi bir CSS kuralı gibi.


Sağdan sola birden çok dönüştürme tek satır yönergesinin uygulandığını unutmayın .

Bu: transform: scale(1,1.5) rotate(90deg);
ve:transform: rotate(90deg) scale(1,1.5);

olacak değil aynı sonucu üretmek:

.orderOne, .orderTwo {
  font-family: sans-serif;
  font-size: 22px;
  color: #000;
  display: inline-block;
}

.orderOne {
  transform: scale(1, 1.5) rotate(90deg);
}

.orderTwo {
  transform: rotate(90deg) scale(1, 1.5);
}
<div class="orderOne">
  A
</div>

<div class="orderTwo">
  A
</div>


55
Onları bir "gölgeyle" ayırmayı denedim. Teşekkür ederim.
Ben

2
bir dönüşümü diğerinden önce uygulamak mümkün mü ... döndürmeden önce eğriltme gibi. Benim için ne yaparsam yapayım, önce eleman döndürülür ve sonra eğrilir, bu da istediğim olmayan bir şeyle sonuçlanır.
Muhammed Umer

2
Şimdi bunları birden çok satıra bölmek
aWebDeveloper

2
dönüşüm: tercüme (100px, 100px) döndürme (45deg) tercüme (100px, 100px) döndürme (45deg); eşittir dönüşüm: translate (200px, 200px) rotate (90deg), sonuncusu ekleyecektir
bigCat

3
@ jave.web, Sağdan sola mı demek istediniz, değil mi? Çünkü transform: scale(1,1.5) rotate(90deg);döndürme ölçekden önce olur.
Jargs

43

Bu cevabı yardımcı olacağı için değil, doğru olduğu için ekliyorum.

Zincirleme yapılarak birden fazla çeviri yapmayı açıklayan mevcut cevapları kullanmaya ek olarak , 4x4 matrisini kendiniz de oluşturabilirsiniz.

Googling sırasında döndürdüğüm matrisleri gösteren bazı rastgele sitelerden aşağıdaki resmi yakaladım :

X ekseni etrafında dönme: X ekseni etrafında dönme
y ekseni Y ekseni etrafında dönme
etrafında dönme: z ekseni etrafında dönme:Z ekseni etrafında dönme

Çeviri için iyi bir örnek bulamadım, bu yüzden doğru hatırladığımı / anladığımı varsayarak, çeviri:

[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[x y z 1]

Dönüşümle ilgili Wikipedia makalesinin yanı sıra , oldukça iyi açıklayan Pragamatic CSS3 eğitiminde daha fazlasını görün . Keyfi rotasyon matrislerini açıklayan başka bir kılavuz da Egon Rath'ın matrislerle ilgili notları

Matris çarpımı elbette bu 4x4 matrisleri arasında çalışır, bu nedenle bir dönüş ve ardından bir çeviri gerçekleştirmek için uygun dönüş matrisini yapar ve çeviri matrisi ile çarparsınız.

Bu size doğru olanı elde etmek için biraz daha özgürlük verebilir ve ayrıca beş dakika içinde siz de dahil olmak üzere herkesin ne yaptığını anlamasını neredeyse imkansız hale getirecektir.

Ama biliyorsunuz, işe yarıyor.

Düzenleme: Ben sadece bu arada, işler biraz daha mantıklı olacak JavaScript aracılığıyla aşamalı olarak karmaşık 3D dönüşümleri oluşturmak için, muhtemelen en önemli ve pratik kullanım söz bahsetti özledim.


3
Mines.edu "rastgele sitesi" ne yazık ki şimdi ölü bir bağlantıdır.
Matt Sach

1
9 element bağlantısı olduğu gibi :(
Matt Sach

1
@MattSach Tamam, görünüşe göre "bugünkü" benim için "altı ay sonra" anlamına geliyor, ancak en azından 9 elemanlar bağlantısı düzeltildi (başka biri rastgele sitelerin Wayback ile bağlantısını düzeltti ve ben onların yolunu takip ettim.)
Jeff

1
Ben de yapılan bu onları anlamalarına yardımcı olmak.
alex

6
bu konuya tam olarak uymuyor
user151496

24

Ayrıca, fazladan bir biçimlendirme katmanı kullanarak birden çok dönüşüm uygulayabilirsiniz, örneğin:

<h3 class="rotated-heading">
    <span class="scaled-up">Hey!</span>
</h3>
<style type="text/css">
.rotated-heading
{
    transform: rotate(10deg);
}

.scaled-up
{
    transform: scale(1.5);
}
</style>

Bu, Javascript kullanarak dönüşümleri olan öğeleri canlandırırken gerçekten yararlı olabilir.


Sizin unutmadantransform-style: preserve-3d
Jack Giffin

İç içe 2d dönüşümleri için gerekli değildir - istenen sonuca bağlıdır. Dönüşüm kaynağı büyük olasılıkla kullanışlı olacaktır.
richtelford

21

Bunun gibi birden fazla dönüşüm uygulayabilirsiniz:

li:nth-of-type(2){
    transform : translate(-20px, 0px) rotate(15deg);
}

2

Gelecekte, böyle yazabiliriz:

li:nth-child(2) {
    rotate: 15deg;
    translate:-20px 0px;        
}

Bir öğeye ayrı ayrı sınıflar uygulanırken bu özellikle yararlı olacaktır:

<div class="teaser important"></div>

.teaser{rotate:10deg;}
.important{scale:1.5 1.5;}

Bu sözdizimi, devam eden CSS Dönüşümleri Düzey 2 spesifikasyonunda tanımlanır , ancak mevcut tarayıcı desteği hakkında krom kanarya dışında bir şey bulamaz. Umarım bir gün geri geleceğim ve burada tarayıcı desteğini güncelleyeceğim;)

Bu makalede , geçerli tarayıcılar için geçici çözümlerle ilgili olarak kontrol etmek isteyebileceğiniz bilgileri bulundu .


1

Oradan başlayın, CSS'de , 2 veya daha fazla değeri tekrarlarsanız, !importantetiket kullanmadıkça her zaman sonuncusu uygulanır , ancak aynı zamanda !importantolabildiğince fazla kullanmaktan kaçının , böylece durumunuzda sorun, yani ikincisi dönüşüm bu durumda ilkini geçersiz kılar ...

Öyleyse ne istersen onu nasıl yapabilirsin? ...

Endişelenmeyin , transform aynı anda birden fazla değeri kabul eder ... Bu nedenle aşağıdaki kod işe yarayacaktır:

li:nth-child(2) {
  transform: rotate(15deg) translate(-20px, 0px); //multiple
}

Dönüştürme ile oynamak isterseniz, aşağıdaki MDN'den iframe'i çalıştırın :

<iframe src="https://interactive-examples.mdn.mozilla.net/pages/css/transform.html" class="interactive  " width="100%" frameborder="0" height="250"></iframe>

Daha fazla bilgi için aşağıdaki bağlantıya bakın:

<< CSS dönüşümü >>


0

Dönüş Rotate ve Translate tek satır css: -Nasıl?

div.className{
    transform : rotate(270deg) translate(-50%, 0);    
    -webkit-transform: rotate(270deg) translate(-50%, -50%);    
    -moz-transform: rotate(270deg) translate(-50%, -50%);    
    -ms-transform: rotate(270deg) translate(-50%, -50%);    
    -o-transform: rotate(270deg) translate(-50%, -50%); 
    float:left;
    position:absolute;
    top:50%;
    left:50%;
    }
<html>
<head>
</head>
<body>
<div class="className">
  <span style="font-size:50px">A</span>
</div>
</body>
</html>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.