Ho le seguenti regole css:Metodo cross-browser per utilizzare la proprietà transform: scale css?
-webkit-transform: scale(0.5); /* Saf3.1+, Chrome */
-moz-transform: scale(0.5); /* FF3.5+ */
-ms-transform: scale(0.5); /* IE9 */
-o-transform: scale(0.5); /* Opera 10.5+ */
transform: scale(0.5);
che intendo applicare a un div per scalarla, compresi tutti i suoi contenuti, immagini, ecc, al 50% la sua dimensione, mantenendo lo stesso centro. Come probabilmente sai, le regole che ho elencato fanno esattamente questo, tranne per IE7-8.
Secondo this site, l'equivalente, regola di proprietà MS sarebbe:
/* IE8+ - must be on one line, unfortunately */
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.5, M12=0, M21=0, M22=0.5, SizingMethod='auto expand')";
/* IE6 and 7 */
filter: progid:DXImageTransform.Microsoft.Matrix(
M11=0.5,
M12=0,
M21=0,
M22=0.5,
SizingMethod='auto expand');
Tuttavia, questi non sembrano ridimensionare in realtà il contenuto del div, sembra spostare la sua posizione, ma questo è tutto.
CSS3Please.com riporta diversi valori della matrice per essere l'equivalente per la scala (0,5):
filter: progid:DXImageTransform.Microsoft.Matrix(/* IE6–IE9 */
M11=0.9999619230641713, M12=-0.008726535498373935, M21=0.008726535498373935, M22=0.9999619230641713,SizingMethod='auto expand');
ho testato questi entrava, ma l'effetto era lo stesso; il div sembrava cambiare la sua posizione, ma la dimensione effettiva del suo contenuto rimaneva invariata.
Infine ho provato transformie.js, che calcola la matrice tramite sylvester.js automaticamente si assegna la proprietà transform, ma il risultato finale era ancora:
M11=0.5, M12=0, M21=0, M22=0.5
Esattamente come quella che ho provato prima, che apparentemente non ha fatto altro che spostare la posizione del div.
io avrei provare cssSandpaper.js, ma sembra piuttosto gonfio per quello che intendo fare, in più c'è nessuna porta jQuery e non mi sento come l'aggiunta di cssQuery al progetto solo per questo. Le probabilità sono che i risultati sarebbero gli stessi di ciò che genera però transformie.js, perché sembra utilizzare anche sylvester.js.
Edit: Ho anche provato this che sembra provenire direttamente da Microsoft, e suggerisce il seguente metodo di calcolo matriciale:
function resizeUsingFilters(obj, flMultiplier) {
// If you don't do this at least once then you will get an error
obj.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingmethod='auto expand')";
// Resize
obj.filters.item(0).M11 *= flMultiplier;
obj.filters.item(0).M12 *= flMultiplier;
obj.filters.item(0).M21 *= flMultiplier;
obj.filters.item(0).M22 *= flMultiplier;
}
Purtroppo questo non scala il contenuto del div esso stesso. Sembra che questo non sia possibile, ma:
Come si può simulare il moderno transform: scale
in IE8-7, in modo da ridimensionare effettivamente anche il contenuto div interno?
Forse sto cercando qualcosa che non esiste, ma volevo essere sicuro. Tutti i test sono stati fatti usando IE9 in modalità compatibilità per IE8 e IE7 (finora ha sempre fatto il lavoro, non credo sia inaffidabile, ma sentiti libero di correggermi se pensi diversamente)
[Modernizr] (http://modernizr.com/) supporta questo? [Forse] (http://modernizr.com/docs/#csstransforms)? –
@JaredFarrish Afaik (ma qualcuno potrebbe correggermi se ho torto, perché non l'ho ancora usato) tutto ciò che Modernizr fa è provare se il supporto per le trasformazioni è lì e farti sapere, ma cosa fare se manca il supporto è fino all'utente. – Mahn
Non ho usato Modernizr, ma da quello che ho capito, non sembra il caso d'uso. Qual è il punto di questo? –