Animations Flash à l'échelle en CSS
Par NiKo le mardi 22 novembre 2005, 01:18 - Dev
- Lien permanent -
13 commentaires -
Tags :
Peut-être cette astuce est-elle archi connue, mais je ne l'ai jamais vue auparavant.
Peut-être avez-vous déjà voulu réaliser un modèle de mise en page scalable [1] en CSS contenant des animations Flash. Et peut-être avez-vous pesté contre l'impossibilité apparente de gérer en valeurs relatives la taille desdits objets, puisque les attributs width et height d'une balise <object> sont par définition exprimées en pixels, la largeur et la hauteur restant alors desespéremment fixes lors de l'augmentation de la taille du texte et des éléments de mise en page...
Pour remédier à ce problème, ma solution réside dans l'application de valeurs proportionnelles (exprimées en em) à l'objet Flash via CSS.
Prenons par exemple ce code XHTML affichant une animation Flash de 320px par 240px:
<object id="swf_banner" type="application/x-shockwave-flash" data="swf/ban_home.swf" width="320" height="240"> <param name="movie" value="swf/ban_home.swf" /> <img id="img_banner" src="swf/alt/ban_home.jpg" alt="banner" /> </object>
En appliquant les règles CSS suivantes au corps du document et à l'objet, la taille de ce dernier devient fluide !
body { font-size: 100%; /* Autorise le redimensionnement de texte pour MSIE */ } html > body { font-size: 16px; /* Pour les autres navigateurs */ } #swf_banner { width: 20em; height: 15em; }
Et voila, en jouant des combinaisons de touches <Ctrl> + "+" et <Ctrl> + "-" dans Firefox [2], votre objet flash est maintenant redimensionné à l'échelle, au même titre que le reste des éléments du document dont les dimensions sont exprimées en valeurs proportionnelles.
Conversion des valeurs px en em
Mais - allez-vous me dire - comment convertir mes valeurs de taille d'objet Flash, exprimées en pixels, en valeurs proportionnelles (em) ? Pour cela, il existe une astuce consistant à définir une taille par défaut de la police de caractère du document courant, et de lui appliquer un ratio multiplicateur pour en obtenir les valeurs proportionnelles correspondantes.
Dans notre exemple, l'objet Flash fait 320 par 240 pixels. Fixons la taille de police par défaut de notre document à 16px.
body { font-size: 100%; /* Autorise le redimensionnement de texte pour MSIE */ } html > body { font-size: 16px; /* Pour les autres navigateurs */ }
Pour calculer la hauteur de notre objet Flash en em, on effectue une simple opération :
<taille_en_pixels_du_flash> / <taille_de_police_du_body_en_pixels> = <valeur_en_em>
Soit pour la largeur :
320 / 16 = 20em
Et pour la hauteur :
240 / 16 = 15em
Note : MSIE ne permet pas par défaut le redimensionnement de police ; il faut pour cela utiliser un subterfuge, sous cette forme :
body { font-size: 100%; /* Autorise le redimensionnement de texte pour MSIE */ }
Opera quand à lui propose en natif le zoom à l'échelle, quelles que soient les métriques utilisées.
Pour finir, voila un exemple concret.

13 commentaires (Ajouter un commentaire)
Archi connu mais je connaissais pas
Merci
Absolument indispensable, mais je connaissais pas non plus ^^ Je garde le lien au chaud
Peut-être archi connu, mais pas par moi. Voilà qui ouvre la porte à des sites flash+html extensibles, une perspective sympa ...
connaissais pas non plus mais d'un coté, soit je fais full flash, soit aucun les flash de présentation/démonstration à taille fixe ne comptent pas bien sûr
Joli
merci je ne connaissais pas .. le flash
Scalable : réglable / adaptable
Splendide !!!
Nico > Huhuhu
Question: est-ce que la fluidité reste la même, disons pour une animation plus lourde que ton exemple? Enfin en même temps j'ai pas d'exemple précis dans lequel j'irais faire un gros zoom sur une anim Flash...
Pour scalable je dirais "mise en page à taille variable" ou "extensible"
Fabien > Les performances lors du redimensionnement d'une animation Flash embarquée sont étroitement lié à la puissance de la machine client, des performances du plugin disponible pour le navigateur et de la qualité du code desdites animations.
Cela fait un petit peu beaucoup de paramètres à prendre en compte pour donner une réponse pertinente
Il ne te reste plus qu'à tester
Merci
j'connaissais pas non plus, hop bookmarké
pfff, ça m'en bouche un coin. Fallait y penser. Merci, je vais de ce pas l'utiliser.
Vraiment trés sympa, en revanche on est bien d'accord, cela ne fonctionne pas avec IE. J'ai essayé avec le test et impossible de changer la taille.
ccclaerhout > Si si ça marche sous IE, il faut jouer avec la taille du texte, il y a un bouton pour ça je crois