2012-01-16 32 views
10

mi piacerebbe recuperare la dimensione di un div che ho applicato un CSS3 trasformare a.Ottenere la dimensione di un elemento di CSS3 trasformato

-webkit-transform: scale3d(0.3, 0.3, 1); 

Così, effettivamente ho reso l'elemento il 30% della sua dimensione originale. Tuttavia, quando interrogo gli elementi width/height, riporta la dimensione dell'elemento prima dell'applicazione della trasformazione.

Capisco che questo è in realtà il comportamento corretto e che l'elemento non modifica dimensioni, ma il suo contenuto fa. Ma, e la ragione per cui mi sto chiedendo qui, se faccio un click destro sull'elemento e selezionare "Inspect Element" dal menu a comparsa (sto usando Safari su un Mac solo ora) l'elemento viene evidenziato e la dimensione del rendering è presentata nel tooltip del browser collegato all'elemento.

Quindi, questo suggerisce che il browser 'conosce' la dimensione reso ma non ho trovato il modo di questo tipo di informazione ancora. Qualcuno può aiutarmi?

+0

Correlato: http://stackoverflow.com/questions/7565542/width-height-after-transform/30157405#30157405 – abernier

risposta

7

Wow, questo è stato più difficile di quanto mi aspettassi. Sono sorpreso quanto te che non c'è un modo semplice.

Here is a proof of concept.

Ecco il JS:

$('div').each(function() { 
    var matrix = window.getComputedStyle(this).webkitTransform, 
     data; 
    if (matrix != 'none') { 
     data = matrix.split('(')[1].split(')')[0].split(','); 
    } else { 
     data = [1,null,null,1]; 
    } 
    $(this).text($(this).width() * data[0] + 'x' + $(this).height() * data[3]); 
}); 

La chiave è la funzione che restituisce getComputedStyle() obnoxiously una matrice come una stringa che deve essere analizzato in un array prima che sia utile. Tuttavia contiene i rapporti di trasformazione resi che possono essere moltiplicati dalle dimensioni CSS per ottenere le dimensioni del rendering.

Riferimento: CSS Tricks

+0

Questa è davvero una buona risposta. Grazie mille per quello! – swervo

7

È possibile utilizzare il metodo getBoundingClientRect() su elementi per ottenere le dimensioni. Prende in considerazione la matrice di trasformazione (quindi non è necessario fare alcuna matematica da soli).

var elementDimensions = element.getBoundingClientRect(); 

jsFiddle.

+0

Grazie a @alex. Non lo sapevo. Rende la vita molto più facile. – swervo

+0

Questo metodo è migliore - tiene conto della rotazione - prova a ruotareX (45 gradi). Se si applica la rotazione sull'utilizzo di anstosa poi si arriva ad un'altezza di 0 – WebsterDevelopine

+0

@WebsterDevelopine Credo che sia perché usereste un'equazione diversa sulla matrice di trasformazione per determinarla. – alex

Problemi correlati