Sans Bootstrap :
Nous aborderons Bootstrap dans une seconde, mais voici les concepts CSS fondamentaux en jeu pour réaliser cette opération vous-même. Comme la barbe de la proie souligne Pour ce faire, vous pouvez utiliser une feuille de style CSS en positionnant l'icône à l'intérieur de l'élément de saisie. Ajoutez ensuite un remplissage de chaque côté pour que le texte ne chevauche pas l'icône.
Ainsi pour le HTML suivant :
<div class="inner-addon left-addon">
<i class="glyphicon glyphicon-user"></i>
<input type="text" class="form-control" />
</div>
Vous pouvez utiliser le CSS suivant pour aligner les glyphes à gauche et à droite :
/* enable absolute positioning */
.inner-addon {
position: relative;
}
/* style icon */
.inner-addon .glyphicon {
position: absolute;
padding: 10px;
pointer-events: none;
}
/* align icon */
.left-addon .glyphicon { left: 0px;}
.right-addon .glyphicon { right: 0px;}
/* add padding */
.left-addon input { padding-left: 30px; }
.right-addon input { padding-right: 30px; }
Note : Cela suppose que vous utilisez glyphicons mais fonctionne aussi bien avec font-awesome .
Pour FA, il suffit de remplacer .glyphicon
avec .fa
Avec Bootstrap :
Comme buffer fait remarquer il est possible de le faire nativement dans Bootstrap en utilisant États de validation avec icônes facultatives . Cela se fait en donnant à l .form-group
élément la classe de .has-feedback
et l'icône la classe de .form-control-feedback
.
L'exemple le plus simple serait quelque chose comme ceci :
<div class="form-group has-feedback">
<label class="control-label">Username</label>
<input type="text" class="form-control" placeholder="Username" />
<i class="glyphicon glyphicon-user form-control-feedback"></i>
</div>
Pour :
- Prise en charge de différents types de formulaires (de base, horizontaux, en ligne).
- Comprend la prise en charge de différentes tailles de contrôle (par défaut, petit, grand).
Cons :
- N'inclut pas le support pour gauche alignement des icônes
Pour surmonter les inconvénients, j'ai mis en place ce demande de tirage au sort avec des changements pour supporter les icônes alignées à gauche. Comme il s'agit d'un changement relativement important, il a été reporté à une prochaine version, mais si vous avez besoin de ces fonctionnalités aujourd'hui Voici un guide de mise en œuvre simple :
Il suffit d'inclure le ces changements de formulaire en css (également inlined via le snippet de la pile cachée en bas)
<strong>*LESS </strong>: alternativement, si vous êtes <a href="http://less2css.org/" rel="noreferrer">construire par moins </a>voici le <a href="https://run.plnkr.co/plunks/ZrnnkFR3Yv9HGQHrRMiW/formChanges.less" rel="noreferrer">les changements de forme en moins</a>
Ensuite, tout ce que vous avez à faire est d'inclure la classe .has-feedback-left
sur tout groupe qui a la classe .has-feedback
afin d'aligner l'icône à gauche.
Comme il y a beaucoup de configurations html possibles sur différents types de formulaires, différentes tailles de contrôles, différents jeux d'icônes et différentes visibilités des étiquettes, j'ai créé une page de test qui montre l'ensemble correct de HTML pour chaque permutation ainsi qu'une démonstration en direct.
P.S. suggestion de frizi d'ajouter pointer-events: none;
a été ajouté à bootstrap
Vous n'avez pas trouvé ce que vous cherchiez. ? Essayez ces questions similaires :
Ajout d'un CSS pour les icônes de rétroaction alignées à gauche
.has-feedback .form-control {
padding-right: 34px;
}
.has-feedback .form-control.input-sm,
.has-feedback.form-group-sm .form-control {
padding-right: 30px;
}
.has-feedback .form-control.input-lg,
.has-feedback.form-group-lg .form-control {
padding-right: 46px;
}
.has-feedback-left .form-control {
padding-right: 12px;
padding-left: 34px;
}
.has-feedback-left .form-control.input-sm,
.has-feedback-left.form-group-sm .form-control {
padding-left: 30px;
}
.has-feedback-left .form-control.input-lg,
.has-feedback-left.form-group-lg .form-control {
padding-left: 46px;
}
.has-feedback-left .form-control-feedback {
left: 0;
}
.form-control-feedback {
line-height: 34px !important;
}
.input-sm + .form-control-feedback,
.form-horizontal .form-group-sm .form-control-feedback {
width: 30px;
height: 30px;
line-height: 30px !important;
}
.input-lg + .form-control-feedback,
.form-horizontal .form-group-lg .form-control-feedback {
width: 46px;
height: 46px;
line-height: 46px !important;
}
.has-feedback label.sr-only ~ .form-control-feedback,
.has-feedback label.sr-only ~ div .form-control-feedback {
top: 0;
}
@media (min-width: 768px) {
.form-inline .inline-feedback {
position: relative;
display: inline-block;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
}
.form-horizontal .has-feedback-left .form-control-feedback {
left: 15px;
}
6 votes
Voici ma solution alternative (pour 2014) JSFiddle [ jsfiddle.net/rcotrina94/cyCFS/272 ]
1 votes
J'utilise uniquement bootstrap pour obtenir cet effet, et pour changer la couleur et la bordure, j'utilise deux lignes de css. Cela résout les autres problèmes qui ont été discutés dans la section réponse. stackoverflow.com/a/40945821/2914407