J'ai l'extrait CSS et HTML suivant en cours de rendu.
textarea
{
border:1px solid #999999;
width:100%;
margin:5px 0;
padding:3px;
}
<div style="display: block;" id="rulesformitem" class="formitem">
<label for="rules" id="ruleslabel">Rules:</label>
<textarea cols="2" rows="10" id="rules"/>
</div>
Le problème est que la zone de texte finit par être 8px plus large (2px pour la bordure + 6px pour le remplissage) que le parent. Existe-t-il un moyen de continuer à utiliser la bordure et le remplissage, mais de limiter la taille totale de la textarea
à la largeur du parent?
html
css
stylesheet
Eric Schoonover
la source
la source
Réponses:
Pourquoi ne pas oublier les hacks et le faire avec CSS?
Celui que j'utilise fréquemment:
Voir le support du navigateur ici .
la source
La réponse à de nombreux problèmes de formatage CSS semble être "ajouter un autre <div>!"
Donc, dans cet esprit, avez-vous essayé d'ajouter une div wrapper à laquelle la bordure / le rembourrage sont appliqués, puis de mettre la zone de texte de 100% de largeur à l'intérieur de cela? Quelque chose comme (non testé):
la source
considérons la sortie finale rendue à l'utilisateur de ce que nous voulons réaliser: une zone de texte rembourrée avec une bordure et un rembourrage, dont les caractéristiques sont qu'en cliquant, elles passent le focus à notre zone de texte, et l'avantage d'une largeur automatique de 100% typique des éléments de bloc.
La meilleure approche à mon avis est d'utiliser autant que possible des solutions de bas niveau, pour atteindre le maximum de support des navigateurs. Dans ce cas, le seul HTML pourrait fonctionner correctement, en évitant l'utilisation de Javascript (que nous aimons de toute façon).
La balise LABEL vient dans notre aide car a un tel comportement et est autorisée à contenir les éléments d'entrée auxquels elle doit s'adresser. Son style par défaut est celui des éléments en ligne, donc, donnant à l'étiquette un style d'affichage de bloc, nous pouvons nous prévaloir de la largeur automatique de 100%, y compris le rembourrage et les bordures, tandis que la zone de texte intérieure n'a pas de bordure, pas de rembourrage et une largeur de 100% .
En examinant les spécificités du W3C, nous pouvons remarquer d'autres avantages:
Voir les spécificités du W3C pour des informations plus détaillées.
Exemple simple:
Le remplissage et la bordure des éléments .textareaContainer sont ceux que nous voulons donner à la zone de texte. Essayez de les modifier pour les styliser comme vous le souhaitez. J'ai donné un remplissage et des bordures larges et visibles à l'élément .textareaContainer pour vous permettre de voir leur comportement lorsque vous cliquez dessus.
la source
Si vous n'êtes pas trop gêné par la largeur du rembourrage, cette solution conservera également le rembourrage en pourcentages.
Pas parfait, mais vous obtiendrez un rembourrage et la largeur s'additionne à 100%, donc tout va bien
la source
Je suis tombé sur une autre solution ici qui est si simple: ajoutez padding-right au conteneur de la zone de texte. Cela conserve la marge, la bordure et le rembourrage de la zone de texte, ce qui évite le problème que Beck a signalé à propos de la mise en évidence de la mise au point que chrome et safari mettent autour de la zone de texte.
Le padding-right du conteneur doit être la somme de la marge, de la bordure et du padding effectifs des deux côtés de la zone de texte, plus tout padding que vous pourriez souhaiter pour le conteneur. Donc, pour le cas de la question d'origine:
la source
Ce code fonctionne pour moi avec IE8 et Firefox
la source
Vous pouvez utiliser la propriété box-sizing, elle est prise en charge par tous les principaux navigateurs conformes aux normes et IE8 +. Cependant, vous aurez toujours besoin d'une solution de contournement pour IE7. En savoir plus ici .
la source
Non, vous ne pouvez pas faire ça avec CSS. C'est la raison pour laquelle Microsoft a initialement introduit un autre modèle de boîte , et peut-être plus pratique . Le modèle de boîte qui a finalement gagné, rend impossible la combinaison de pourcentages et d'unités.
Je ne pense pas que ce soit OK avec vous d'exprimer le rembourrage et les largeurs de bordure en pourcentage du parent aussi.
la source
Je cherchais une solution de style en ligne au lieu d'une solution CSS, et c'est le mieux que je puisse faire pour une zone de texte réactive:
la source
Si vous le rembourrez et le décalez comme ceci:
le côté droit de la zone de texte s'aligne parfaitement avec le côté droit du conteneur, et le texte à l'intérieur de la zone de texte s'aligne parfaitement avec le corps du texte dans le conteneur ... et le côté gauche de la zone de texte `` ressort '' un peu. c'est parfois plus joli.
la source
Utilisez la propriété de dimensionnement de la boîte :
Ça va aider
la source
Pour les personnes qui utilisent Bootstrap, textarea.form-control peut également entraîner des problèmes de dimensionnement de la zone de texte. Chrome et Firefox semblent utiliser des hauteurs différentes avec le CSS Bootstrap suivant:
la source
Je règle souvent ce problème avec
calc()
. Vous donnez simplement à la zone de texte une largeur de 100% et une certaine quantité de remplissage, mais vous devez soustraire le remplissage total gauche et droit de la largeur de 100% que vous avez donné à la zone de texte:Ou si vous souhaitez donner une bordure à la zone de texte:
la source
Et les marges négatives?
la source
la source