J'ai un problème simple - élément d'entrée de texte qui a spécifié 2 attributs CSS, voir code ci-dessous:
<input type="text" style="resize:horizontal; width:200px" />
Lorsque seul l'attribut resize
est spécifié, la variable input
peut être redimensionnée à n'importe quelle largeur. Cependant, si j'ai width
spécifié, l'élément input
ne peut être redimensionné que plus large que 200px
, pas plus court.
Existe-t-il un moyen de spécifier la largeur par défaut tout en ayant un élément d’entrée redimensionnable à n’importe quelle largeur? Plus large ou plus court que celui défini par l'attribut width
?
Merci d'avance pour toute aide!
EDIT - clarification: j'ai besoin que l’élément d’entrée soit redimensionnable librement - sur n’importe quelle largeur - plus que 200px
et moins que 200px
EDIT 2 - Je recherche de préférence une solution CSS pure si cela est possible.
C'est assez proche de réalisable. Vous devez définir size="1"
en tant qu'attribut sur le <input>
pour redimensionner très petit. Le redimensionnement est contrôlé par input:active
, qui remplace la classe de base par width: auto;
. input:focus
l'empêche de se réduire lorsque vous tapez dessus.
Problèmes potentiels: input:focus
force le <input>
à un min-size
spécifique, qui peut être plus volumineux que ce à quoi il a été redimensionné. Vous pouvez utiliser min-width: 100%
pour en faire une "fonctionnalité" au lieu d'un problème, en donnant à l'utilisateur plus d'espace pour taper. Si le <input>
a le focus, le redimensionnement est toujours limité par le min-width
, mais le redimensionnement est généralement effectué après la focalisation (et aussi, principalement pour agrandir quelque chose).
Démo: http://jsfiddle.net/ThinkingStiff/jNnCW/
HTML (avec les styles en ligne que vous avez demandé):
<input id="text" type="text" size="1"/>
<style>
input {
resize: horizontal;
width: 200px;
}
input:active {
width: auto;
}
input:focus {
min-width: 200px;
}
</style>
Voici un exemple d'utilisation de div avec flexbox & contenteditable = true au lieu de input. Seulement CSS + HTML. Je l'ai trouvé utile si aucune balise 'form' n'est requise.
#flex {
display: flex;
display: -webkit-flex;
line-height: 30px;
}
#inner {
padding: 0 20px;
min-width: 100px;
height:30px;
line-height:30px;
outline:none;
background-color: #dfd4d7;
}
<div id="flex">Type some text here:
<div id="inner" contenteditable="true" spellcheck="false"><div>
</div>
Tout ce que je lis en ligne (voir ci-dessous) indique que la propriété resize
ne fonctionne que sur les éléments de niveau bloc qui ne possèdent pas ont overflow: visible
défini et sur les éléments textarea
. Cela ne fonctionne même pas techniquement pour les éléments input
(qui ne sont ni l'un ni l'autre, et même si défini sur display: block
, je ne pouvais pas obtenir que resize
soit reconnu par Firefox).
Liens: https://developer.mozilla.org/en/CSS/resize et http://www.css3.info/preview/resize/ et http: //www.w3 .org/TR/css3-ui/# redimensionner
Le moyen le plus simple de redimensionner librement input
consiste à lui attribuer la valeur width: 100%
, puis de le placer dans un conteneur inline-block
avec un min-width
(min-width
définit la largeur par défaut de input
). Redimensionnez le conteneur pour redimensionner la input
.