2014-09-05 1 views
8

Ho un codice che, fino a poco tempo fa, funzionava su tutti i browser che supportano le trasformazioni CSS. Si è rotto nel nuovissimo Chrome (37). Ho trovato il problema. La trasformazione dallo stile calcolato di un elemento non è accettata da altri elementi.Rotate (90deg) non applicato con .transform in Chrome 37

HTML

<div class="one">One</div> 
<div class="two">Two</div> 
<span></span> 

CSS

div { 
    width: 100px; 
    height: 100px 
} 

.one { 
    background-color: red; 
    transform: rotate(90deg); 
} 

.two { 
    background-color: blue 
} 

Javascript

var oneStyle = window.getComputedStyle(document.querySelector('.one')); 
var oneTransform = oneStyle.transform; 
document.querySelector('span').innerHTML = 'Tranform value is: ' + oneTransform; 
var twoStyle = document.querySelector('.two').style; 
twoStyle.transform = oneTransform; 

Ecco un violino: 0.123.

Il problema è che il secondo elemento (blu) non ruota come il primo (rosso) elemento anche se l'ho detto in javascript.

Questo mi sembra un insetto. È?

MODIFICA: Il mio codice effettivo funzionava in tutti i browser, ma il più recente Chrome, ma appare il mio codice di esempio in tutti i browser. Mi piacerebbe ancora capire perché il problema sopra si verifica.

EDIT 2: Ottenuto per rompere solo in Chrome 37 nuovamente. La mia ipotesi è che non gli piaccia la notazione scientifica; ma allora perché lo stile calcolato lo ha?

+1

Interessante - l'uso di un valore di 45 ° sembra funzionare. Un valore di 90 gradi non riesce: [esempio fiddle] (http://jsfiddle.net/0v8v2xd7/4/) – dc5

+0

BTW: il nuovo codice sopra non riesce su Safari versione 7.0.6 (9537.78.2) - è necessario utilizzare la proprietà 'webkitTransform' piuttosto che' transform' – dc5

+0

non cromato usa anche il webkit? –

risposta

1

Questo è un problema abbastanza comune, errori simili si verificano anche con versioni precedenti di Chrome e di altri fornitori.

La correzione abituale è, come Hashem mentioned in parte, a uno cambiare la rotazione a qualcosa come 89.9deg o forza rendering GPU facendo qualcosa di simile translateZ(1px) in aggiunta alla rotazione. Demo. In futuro possiamo probabile forzare anche questo utilizzando la proprietà will-change

Questo perché i browser hanno problemi di rendering certe cose e rendere gli elementi ruotati esattamente di 90 gradi è una di quelle cose. A volte hanno bisogno di un piccolo aiuto :)

+0

Puoi spiegare perché questo induce semplicemente il browser a rinunciare.Basandomi su ciò che hai detto, mi sarei aspettato di renderizzare con aliasing invece di non fare nulla. – acbabis

+0

E 'solo qualcosa che è comune con Chrome che non risolvono. Non c'è davvero un buon modo per spiegarlo senza vedere il codice sorgente molto probabilmente –