Comment redimensionner une div automatiquement à la taille de son contenu lorsque le contenu de la div ont changé?
À l'instant, j'ai cette DIV avec un formulaire d'inscription centré sur la page. Le contenu de la DIV venir à partir d'un ascx-page. Cela se fait très bien l'affaire.
Maintenant, si l'utilisateur essaie de remplir un nom qui n'est pas unique, un message d'erreur est ajouté par certains jQuery à côté du champ nom d'utilisateur. Cela casse la mise en page de la DIV, depuis les matières sont plus larges que ce qu'ils utilisées pour être.
J'ai donc googlé mon chemin, mais je ne peux pas trouver une solution pour cela.
Quelqu'un peut-il m'aider à trouver une belle façon de le faire (pseudo-HTML/js):
<div id="myCenteredDiv" onChangeContents="resizeToNewSize()">
<!-- div contents -->
</div>
<script type="text/javascript">
function resizeToNewSize() {
$("#myCenteredDiv").animateToSize($("#myCenteredDiv").contentWidth,
$("#myCenteredDiv").contentHeight);
}
</script>
Je suis à la recherche de la "onChangeContents" méthode (et/ou de l'événement) et la "div.contentWidth de la propriété".
Merci beaucoup de m'aider!
mise à jour: essayer d'expliquer le problème plus clairement
Disons que j'ai de ce DIV:
<div id="myDiv">
<form ...>
Enter your name: <input id="txtYourName" type="text" name="YourName" value="" />
<span id="errorYourName"></span>
<input type="submit" ... />
</form>
</div>
Et disons que j'ai cet extrait de jQuery:
$(document).ready(function() {
$("#txtYourName").live("blur", function() {
if (validateInput($("#txtYourName").val())) {
$("#errorYourName").html("");
//entry 1
} else {
//entry 2
$("#errorYourName").html("This name is not valid.");
}
});
});
...où validateInput(value)
retourne true
pour une valeur valide.
Bien maintenant. Le SimpleModal plugin prend la div et le place au centre de la page, avec une certaine largeur et la hauteur de toute façon il lit le contenu de la div. De sorte que le div n'est pas plus large que la zone de saisie, car la plage est vide pour le moment.
Lorsque la boîte de saisie perd le focus, un message d'erreur est mis dans la durée. Ensuite, cela casse la mise en page de la div.
Je pourrais mettre le code dans entry 1
qui redimensionne le div de retour avec une animation d'une certaine taille lorsque le message d'erreur a été effacé, et le code dans entry 2
qui redimensionne la div pour une taille plus grande, de sorte que le message d'erreur sera adaptée.
Mais ce que j'aimerais le mieux est une façon de dire si le contenu à l'intérieur de la div ont changé, et s'adapter à la div en conséquence, d'animation et automatiquement.
Des idées? Merci encore.
Est-ce div délimitée par une autre div de largeur fixe?
Comment est la DIV style? Est-ce à l'aide de dimensions fixes?
Je suis à l'aide de la SimpleModal plugin jQuery. Vous ne savez pas s'il utilise un fixe div, mais je peux le redimensionner à l'aide animate() joliment.
Simplemodal plugin: ericmmartin.com/projects/simplemodal
OriginalL'auteur Simon | 2009-11-17
Vous devez vous connecter pour publier un commentaire.
Je n'ai jamais utilisé SimpleModal, mais à partir des exemples sur leur site, il semble que vous pouvez placer le récipient CSS. Si vous voulez la hauteur pour ajuster, essayez de régler la hauteur de
auto
Bien que l'exemple ne l'a pas, je pense que vous devez ajouter
px
après la hauteur et la largeur entre guillemets (par exemple,"450px"
).Ok, voici une autre idée. C'est peut-être trop, mais ajouter un champ caché:
puis attacher un changement de l'événement qui est déclenché en même temps de mettre à jour le message d'erreur.
Ce n'est pas testé et il est peut-être d'aller à la mer, mais je ne vois pas une fonction de mise à jour dans SimpleModal.
Mise à jour : Désolé, je pensais que le flou n'est pas pris en charge avec l'événement en direct. J'ai donc fait quelques tests supplémentaires et est venu avec un travail de démonstration. Je l'ai posté dans ce pastebin (ignorer le inclus simpleModal code en bas). Voici l'essentiel du code
CSS
HTML
Script
Dommage, il ne fonctionne pas. Il ne fait que la frontière bleue, et la div de très grande taille (Firebug me dit "auto" n'est pas défini...). Je vais mettre à jour la question et je vais essayer de faire plus clair ce que je veux. Mais merci quand même.
J'espère que la question est plus clair maintenant. garde les doigts croisés
Ok. Donc SimpleModal calcule de la hauteur/largeur de la div et met ces valeurs dans l'élément.style dur valeurs (par exemple, "largeur: comparativement à 366,5"). Ce que je fais maintenant, c'est "width: auto !important" dans mon fichier css. La div ne pas casser la mise en page lorsque le contenu est redimensionnée. Deux choses à faire: (1) animer le redimensionnement, et (2) centre de la div sur la page... (Pourquoi ce n'est pas "center: horizontale" une partie de la CSS standard? 🙂 )
Je sais ce que tu veux dire à propos de centrage, mais la fenêtre modale a une position fixe, de sorte que vous ne pouvez pas utiliser quelque chose de simple comme
margin: auto
. Alors, pourquoi avez-vous définir la largeur en automatique et pas à la hauteur, n'était pas à la hauteur de causer des problèmes?height: auto !important
. Est-il nécessaire pour l'animer?OriginalL'auteur Mottie
Jquery:
div:
aperçu
http://jbdes.net/dev/js/fontsize.html
OriginalL'auteur andreah
Ancienne tables sont (encore) grand au centrage des choses, rapide, fluide et sans code.
OriginalL'auteur T4NK3R