2012-01-20 13 views
10

Czy jest możliwe określenie początku w lewym górnym rogu (0%, 0%) dla skalowania i innego początku (środka) dla obrotu w CSS3? Pracuję tylko z webkitem, jeśli to pomaga.Przekształcenia CSS3: wiele początków?

Obecnie używam listę transformacji (tj -webkit-transform: scale (newScale) obracają (newRotate)

ale wydaje się, że nie jest możliwe, aby zmienić źródło w przejściach między nimi istnieje. Lepiej to teraz przejrzeć? Obecnie, jeśli przeskaluję obiekt i obrócę go o początek w domyślnym środku, pozycja elementu jest teraz wyłączona, więc po przeciągnięciu elementu kursor nadal znajduje się w lewym górnym rogu Zmiana środka na środek, aby to skalować, naprawia to, ale przedstawia nowe problemy związane z obrotem i odbiciem

Odpowiedz

10

Znaleziono dobre rozwiązanie problemu ... poprzez tworzenie relacji nadrzędny/podrzędny w następujący sposób:

<div class="container"> 
    <img src="" /> 
</div> 

mogę teraz konfiguracji dwie klasy w następujący sposób:

.container { 
    -webkit-transform-origin: 0% 0%; 
    -webkit-transform: scale(0.5); 
} 

.container img { 
    -webkit-transform-origin: 50% 50%; 
    -webkit-transform: rotate(45deg); 
} 

to zrobi dokładnie to, czego chcę: skalowanie z początkiem w lewym górnym rogu, a następnie obracanie z początkiem w środku. Voila!

+1

+1 dla rozwiązania -1 dla niepotrzebnego znacznika. Wydaje się, że jest to problem z projektowaniem tych reguł przez webkit. – arkanciscan

+4

Twój komentarz nie pomaga nikomu Arkanciscan. Odpowiada na pytanie w sposób, w jaki jest obecnie wdrażany. Czy masz inną sugestię, aby wnieść swój wkład? –

+0

To była moja jedyna nadzieja, ale nadal nie obraca się prawidłowo. – JacopKane

0
+1

To cholernie dobry pomysł, ale wydaje się, że uruchamia tylko ostatnią z dwóch transformacji. Jeśli uderzysz skalar do wartości 2.0+, więc naprawdę możesz to zobaczyć, zauważysz, że nie wydaje się skalować. Jeśli zmienisz kolejność, aby skala była wykonywana jako druga, nie będzie się obracać. Czy czegoś brakuje? – David

0

Zamiast myśleć o skalowaniu z początkiem (0,0) jako skalowanie + tłumaczenie z centrum początkowym. W izolacji, co następuje:

-webkit-transform-origin: top left; 
-webkit-transform: scale(1.5); 

jest taka sama, jak:

-webkit-transform-origin: center; 
-webkit-transform: scale(1.5) translate3d(16.66%, 16.66%, 0); 

Teoretycznie rotacja centrum pochodzenie należy pozostawić rogi wystające przez sqrt(1/2)-0.5 wymagające nam przenieść pochodzenie dół iw prawo przez 20.71%, ale z jakiegoś powodu algorytm transformacji webkita przenosi dla nas rzeczy (ale nie dość) i skaluje dla nas pochodzenie (znowu nie całkiem). Zatem musimy przesunąć w prawo przez 50% i dokonać pewnych korekt do tego dziwne zachowanie:

-webkit-transform-origin: center; 
-webkit-transform: scale(1.5) rotate(45deg) translate3d(52.5%, 0.5%, 0); 
-webkit-transition: all 2s ease-in; 

Uwaga: mój oryginalny odpowiedź używał div z width:100px; i height100px; która wymaga translate3d(54px, 0, 0).

+0

Brett, jestem zaznajomiony z tłumaczeniem, aby przenieść pochodzenie, skalowanie, a następnie tłumaczenie z powrotem, ale ten jest dla mnie nowy. Jak tłumaczy się na końcu pracy? Czy 54px służy jako przykład szerokości/2 zasobu? Przepraszam, próbuję pracować przez to ... – David

+0

Zauważ, jak skalowanie z początkiem (0,0) przesuwa środek obiektu podczas jego skalowania? To jest to samo, co skalowanie z początkiem (50%, 50%) przy równoczesnym tłumaczeniu obiektu. –