2010-01-20 6 views
3

J'ai le code HTML similaire àRedimensionner un ensemble d'éléments HTML

<div id="resizeThis"> 
<div style="background: url(...)">...text...images...</div> 
... 
</div> 

Je veux redimensionner la div avec tout son contenu à la taille arbitraire. Par exemple, je pourrais utiliser JavaScript pour obtenir la largeur div puis redimensionner tous les éléments en conséquence, mais quelle est la manière la plus simple de le faire? Je peux utiliser jQuery, j'ai essayé:

$("#resizeThis > *").css('width', '64px').css('height', '64px'); 

mais il ne Shrinked les #resizeThis et non ses enfants. Et que puis-je faire à propos des arrière-plans, du texte, etc?

Je veux faire ceci afin que je puisse générer des miniatures (généralement 25% de la taille d'origine).

+2

Ça fait de mauvaises photos. Générez des vignettes du côté serveur. (par exemple: avec imagemagick) – erenon

+0

Je ne peux pas faire ça ... J'ai besoin de faire ça côté client, et d'étirer le HTML dynamique, pas seulement les images ... Je ne peux pas demander à l'utilisateur de prendre des screenshots et de les redimensionner toutes les 5 secondes – Tower

+1

@erenon: Les nouveaux navigateurs semblent utiliser le rééchantillonnage bicubique lors du redimensionnement. Cependant, un meilleur argument pour générer le côté serveur des miniatures est pour le chargement plus rapide des images. Plusieurs jpeg à 1024x768 chargeraient beaucoup plus lentement que ceux à 25% de cette taille. –

Répondre

1

J'ai trouvé une solution parfaite!

Je fais juste:

$('#resizeThis').css('-webkit-transform', 'scale(0.5)'); 

et redimensionne tous les éléments sous correctement! :)

Il existe également une version Gecko pour cela. Cela convient parfaitement à mes besoins. Ne pas utiliser votre navigateur pour redimensionner des images.

+0

Eh bien, ce n'est pas une "solution complète", car cela ne fonctionnerait pas dans Firefox et IE – Zwik

0

Vous ne pouvez pas modifier la largeur des éléments en ligne (p et travée par exemple). Vous ne pouvez définir la largeur que pour les éléments de bloc (affichage: bloc). Bien sûr, vous pouvez modifier la propriété d'affichage pour les éléments en ligne, mais cela causera plus de problèmes.

La seule chose que vous pouvez faire avec les éléments de texte est de changer la taille de la police. Cependant, il est impossible de définir une largeur absolue pour les éléments contenant du texte. Le texte devra soit déborder, soit une barre de défilement apparaîtra.

2

Essayez cette

$("#resizeThis *").css('width', '64px').css('height', '64px'); 

L'opérateur > sélectionne uniquement les enfants immédiats.

La commande ci-dessus sélectionnera tous les enfants de #resizeThis, mais vous voulez aussi la div. Essayez:

$("#resizeThis").find("*").andSelf().css('width', '64px').css('height', '64px'); 

Aussi, avez-vous pensé à utiliser une classe CSS au lieu de plusieurs appels à .css().

E.g.

$("#resizeThis *").find("*").andSelf().addClass("MyCssClass"); 
+0

Merci, ça m'a fait démarrer! Maintenant, j'ai besoin de redimensionner le texte avec une logique intelligente. – Tower

Questions connexes