CSS, comment créer une étiquette largeur de la plus longue contenant le texte?
J'ai un tableau avec deux colonnes, comme ceci:
Firstname: Jeff
Où la première colonne est une étiquette et la seconde est une entrée. Maintenant, je suis réglage de la largeur de l'étiquette à 180px, mais si là, je n'ai plus de texte (un mot de plus de 180px), il n'est pas montré complètement.
J'ai essayé de mettre dans le css de la largeur des étiquettes, comme "auto", mais je ne veux pas, en différentes largeurs d'étiquettes dans la même colonne.
Le résultat doit ressembler à ceci:
Firstname: Jeff
Enciclopedia: Yes
Town: Tokyo
Comment puis-je résoudre ce problème avec le Css?
Merci beaucoup,
Jeff
Vous devez vous connecter pour publier un commentaire.
Vous devez envelopper chaque étiquette d'entrée, la combinaison d'un élément, puis les envelopper cet élément dans certains conteneur. Ce conteneur doit avoir un
min-width
, etdisplay: inline-block;
.Ensuite, vous laissez tous les éléments d'entrée flotter à droite, et vous avez terminé.
Ce qui en résulte est très simple, propre et balisage sémantique avec eqaully propre et maintenable CSS, et pas d'exigences pour JavaScript, jQuery, ou d'autres trucs de fantaisie.
Vous pourriez faire quelque chose comme:
avec le css
Ici vous pouvez voir à quoi ça ressemble.
Clairement, vous pouvez définir le style de votre forme avec des marges, des remplissages etc.
Et, de plus, si vous voulez avoir un wrapper qui est sémantiquement plus précis, vous pouvez utiliser une liste ordonnée. Vous pouvez ensuite le style comme tout ce que vous voulez, et ont même une belle supplémentaires wrapper (le
<ol>
) que vous pouvez utiliser sans ajouter de la sémantique des ordures.Un exemple serait:
de style par
entraînerait ce point de vue. Vous pouvez même jouer avec elle sur ce violon: http://jsfiddle.net/ramsesoriginal/b6Taa/
MODIFIER pour montrer que ce n'ajoute pas de balisage
Avec le code html suivant:
et le code CSS suivant:
Vous obtenez l'effet que vous voulez. Vous pouvez jouer avec elle ici. Mais l'ajout de
<fieldsets>
avec<legend>
s n'est pas d'ajouter inutile de balisage, au contraire: il vous permet de regrouper les entrées. Et l'ajout d'un<ol>
est sémantiquement correct aussi, depuis l'étiquette d'entrée/de combinaisons sont sémantique des unités et de la forme est une liste de champs qui doivent être remplis dans un ordre logique.Encore une fois, vous pouvez éviter les balises html fieldsets, les listes, et de tout faire et d'atteindre l'effet désiré, mais du point de vue sémantique, il serait bon d'avoir au moins le fieldset avec une étiquette..
EDIT2: c'est un "vrai" formulaire d'inscription avec un bon balisage sémantique peut ressembler à:
et le style:
J'ai inclus quelques informations supplémentaires, afin de vous montrer comment il viennent tous ensemble pour une entité logique. De même, on pourrait inclure des erreurs et tout ce que vous souhaitez inclure. C'est juste un exemple rapide, j'ai jeté ensemble, mais il doit montrer que l'on peut réaliser des choses intéressantes avec cette technique. Une chose que j'ai également changé, c'est que j'ai mis la
<ol>
directement sous la forme, de sorte que vous n'avez pas à répéter pour chaque fieldset. Personnellement, je trouve cela d'une certaine manière.. rébarbatif, mais puisque vous voulez pour avoir un minimum de balisage, cela fonctionne assez bien et serait très accessible. Encore une fois, lisez cet article si vous n'avez pas. Il donne une grande perspicacité dans le marquage correctement un formulaire.Oh, et la "vraie vie" exemple est visible ici: http://fiddle.jshell.net/ramsesoriginal/b6Taa/9/show/
Et vous pouvez jouer avec lui ici:
http://jsfiddle.net/ramsesoriginal/b6Taa/9/
EDIT: j'ai mis à jour le dernier exemple
Il y avait une erreur dans mon code. L'élément wrapper (le
<li>
dans le deuxième et dans le dernier exemple, la<label>
dans le minimum de l'un et de l'<p>
dans le premier on devrait avoir au moins 1 pixel de la marge en bas, ou bien certains navigateurs voir les champs de saisie du chevauchement et de ne pas les faire flotter correctement. J'ai mis à jour le dernier exemple pour que ça fonctionne, partout ailleurs vous devez garder cela à l'esprit.<ol>
s et<li>
s. Je trouve qu'ils ont grandement réduire la flexibilité dans le code HTML. Où avez-vous mis des erreurs, des conseils et d'autres contenus? Dépend de la nature exacte du projet à portée de main, mais en général, je trouve cela d'avoir des problèmes similaires à l'aide de tableaux.<ol>
et<li>
de sens. Surtout si vous voulez mettre des erreurs, des conseils et d'autres contenus dans le formulaire: l'erreur pour une entrée donnée devraient être regroupées avec l'entrée en quelque sorte, de même que des conseils pour l'entrée ou à du contenu supplémentaire. Les balises html fieldsets et listes de représenter la structure logique de la forme, pas le mode graphique.<fieldset>
balises à l'intérieur de<ol>
/<ul>
tags? TIL, et je suis vraiment choqué. J'ai pensé<li>
était la SEULE solution acceptable balise à l'intérieur d'un<ol>
ou<ul>
? developer.mozilla.org/en-US/docs/Web/HTML/Element/ol dit "Zéro ou plus <li> éléments" pour "Permis de contenu". Ce qui est correct?Le plus simple serait de choisir une taille fixe assez grand.
Si vous voulez vraiment pour simuler le comportement exact d'une table, vous avez deux choix:
simuler table avec CSS:
Avec le code HTML suivant:
Je ne pense pas qu'il existe une autre façon de traiter cette question.
Si vraiment vous ne voulez pas changer votre code HTML, votre seul espoir peut-être d'utiliser le javascript.
table
fait naturellement sur chaque navigateur web depuis l'aube des temps, et toujours aller de l'avant.solution simple serait de fixer la longueur de l'étiquette qui permettrait d'accueillir le plus grand lable (ajouter un peu de 50px supplémentaire de sorte que vous pouvez centrer) et l'utilisation
text-align:center
Ici un violon pour le même.. http://jsfiddle.net/mvivekc/4P58S/
espère que cela aide.
Définir une largeur minimale qui est la largeur de la caractéristique la plus large de l'étiquette. Ensuite, l'utilisation de JavaScript pour faire face pour les cas limites. Si l'utilisateur ne dispose pas de JavaScript, vous pouvez revenir à une " OK " de la conception.
Obtenir le plus large étiquette en forme à l'aide de la fonction de cette réponse, puis de définir les largeurs de toutes les étiquettes de cette valeur.
C'est très semblable à la configuration de cette réponse bien que l'on est
<li>
s au lieu de<label>
s.Coup et essayer de voir quelle est la plus grande étiquette de l'occupant. Attribuer que la largeur de toutes les autres étiquettes. Vous recommandons de placer des virgules dans une colonne séparée. Il a l'air propre.
essayer