Disons que j'ai un extrait html comme celui-ci:
<div style="width:300px;">
<label for="MyInput">label text</label>
<input type="text" id="MyInput" />
</div>
Ce n'est pas mon code exact, mais l'important est qu'il y ait une étiquette et une entrée de texte sur la même ligne dans un conteneur à largeur fixe. Comment puis-je styliser l'entrée pour remplir la largeur restante du conteneur sans emballage et sans connaître la taille de l'étiquette?
Réponses:
autant que tout le monde déteste les tableaux pour la mise en page, ils aident avec des trucs comme celui-ci, soit en utilisant des balises de tableau explicites, soit en utilisant display: table-cell
la source
Voici une solution simple et propre sans utiliser de hacks JavaScript ou de disposition de table. Il est similaire à cette réponse: saisie de la largeur automatique du texte de saisie à 100% avec d'autres éléments flottants
Il est important d'envelopper le champ de saisie avec une plage qui est
display:block
. La prochaine chose est que le bouton doit venir en premier et le champ de saisie en second.Ensuite, vous pouvez faire flotter le bouton vers la droite et le champ de saisie remplit l'espace restant.
Un simple violon: http://jsfiddle.net/v7YTT/90/
Mise à jour 1: Si votre site Web est destiné uniquement aux navigateurs modernes, je suggère d'utiliser des boîtes flexibles . Ici vous pouvez voir le support actuel .
Mise à jour 2: Cela fonctionne même avec plusieurs boutons ou autres éléments qui partagent pleinement avec le champ de saisie. Voici un exemple .
la source
Je suggère d'utiliser Flexbox:
Assurez-vous cependant d'ajouter les préfixes de fournisseur appropriés!
la source
label
? Je serais particulièrement intéressé par la façon dont le code HTML de la question d'origine pourrait être mis en page en utilisantborder-box
...flex: 2
et nonflex: 1
?Veuillez utiliser flexbox pour cela. Vous avez un conteneur qui va plier ses enfants en ligne. Le premier enfant prend son espace au besoin. Le second fléchit pour prendre tout l'espace restant:
la source
row
par défaut, vous n'avez pas besoin de le spécifier.Le moyen le plus simple d'y parvenir serait:
CSS:
HTML:
Ressemble à: http://jsfiddle.net/JwfRX/
la source
L'astuce très simple consiste à utiliser une
CSS calc
formule. Tous les navigateurs modernes, IE9, une large gamme de navigateurs mobiles devraient prendre en charge cela.la source
vous pouvez essayer ceci:
la source
Si vous utilisez Bootstrap 4:
Mieux encore, utilisez ce qui est intégré à Bootstrap:
https://jsfiddle.net/nap1ykbr/
la source