Je conçois une page à l'aide de Bootstrap 3. J'essaie d'utiliser un popover avec placement: right
sur un élément d'entrée. Le nouveau Bootstrap garantit que, si vous utilisez form-control
, vous avez essentiellement un élément d’entrée pleine largeur.
Le code HTML ressemble à ceci:
<div class="row">
<div class="col-md-6">
<label for="name">Name:</label>
<input id="name" class="form-control" type="text"
data-toggle="popover" data-trigger="hover"
data-content="My popover content.My popover content.My popover content.My popover content." />
</div>
</div>
La largeur des popovers est trop faible, à mon avis, car il ne leur reste plus aucune largeur dans la division .. Je veux le formulaire de saisie du côté gauche et un large popover du côté droit.
La plupart du temps, je recherche une solution qui évite de remplacer Bootstrap.
Le JsFiddle attaché. La deuxième option de saisie. Je n'ai pas beaucoup utilisé jsfiddle, alors je ne sais pas, mais essayez d'augmenter la taille de la boîte de sortie pour afficher les résultats. Sur des écrans plus petits, vous ne la verrez même pas . http://jsfiddle.net/Rqx8T/
<div class="row" data-toggle="popover" data-trigger="hover"
data-content="My popover content.My popover content.My popover content.My popover content.">
<div class="col-md-6">
<label for="name">Name:</label>
<input id="name" class="form-control" type="text" />
</div>
</div>
Fondamentalement, j'ai mis le code popover dans la ligne div, au lieu de l'entrée div. Résolu le problème.
Vous pouvez utiliser CSS pour augmenter la largeur de votre popover, comme ceci:
/* The max width is dependant on the container (more info below) */
.popover{
max-width: 100%; /* Max Width of the popover (depending on the container!) */
}
Si cela ne fonctionne pas, vous voulez probablement la solution ci-dessous et modifiez votre élément container
. ( Voir le JSFiddle )
Si cela ne fonctionne pas, vous devrez probablement spécifier le conteneur:
// Contain the popover within the body NOT the element it was called in.
$('[data-toggle="popover"]').popover({
container: 'body'
});
Le popover est contenu dans l'élément dans lequel il est déclenché. Pour l'étendre "pleine largeur" - spécifiez le conteneur
// Contain the popover within the body NOT the element it was called in.
$('[data-toggle="popover"]').popover({
container: 'body'
});
Regardez le JSFiddle pour l'essayer.
J'avais aussi besoin d'un popover plus large pour un champ de texte de recherche. Je suis venu avec cette solution Javascript (ici dans Coffee ):
$(".product-search-trigger")
.click(-> false) # cancel click on <a> tag
.popover
container: "body"
html: true
placement: "left"
title: "<strong>Product search</strong> enter number or name"
.on("show.bs.popover", -> $(this).data("bs.popover").tip().css(maxWidth: "600px"))
La solution de contournement est dans la dernière ligne. Avant que le popover ne soit affiché, l'option max-width est définie sur une valeur personnalisée. Vous pouvez également ajouter une classe personnalisée à l'élément tip.
J'ai eu le même problème. J'ai passé pas mal de temps à chercher une réponse et à trouver ma propre solution: Ajouter le texte suivant en tête:
<style type="text/css"> .popover{ max-width:600px; } </style>
Pour changer la largeur, vous pouvez utiliser css
Pour une taille fixe voulue
.popover{
width:200px;
height:250px;
}
Pour la largeur maximale souhaitée:
.popover{
max-width:200px;
height:250px;
}
jsfiddle: http://jsfiddle.net/Rqx8T/2/
Pour changer la largeur du popover, vous pouvez remplacer le modèle:
$('#name').popover({
template: '<div class="popover" role="tooltip" style="width: 500px;"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"><div class="data-content"></div></div></div>'
})
Avec l'aide de ce que @EML a décrit ci-dessus concernant le popover sur les fenêtres modales et le code affiché par @ 2called-chaos, voici comment j'ai résolu le problème.
J'ai une icône sur le modal qui, lorsqu'on clique dessus, devrait apparaître dans le popup
Mon HTML
<i title="" class="glyphicon glyphicon-info-sign" rel="popover" data-title="Several Lines" data-content="A - First line<br />B - Second line - Long line <br />C - Third Line - Long Long Long Line"></i>
Mon script
$('[rel=popover]').popover({
placement: 'bottom',
html: 'true',
container: '#name-of-modal-window .modal-body'
}).on("show.bs.popover", function () { $(this).data("bs.popover").tip().css("max-width", "600px"); });
Pas de solution finale ici:/Juste quelques idées pour résoudre ce problème "proprement" ...
Version mise à jour (jQuery 1.11 + Bootstrap 3.1.1 + class = "col-xs-" au lieu de class = "col-md-") de votre JSFiddle d'origine: http://jsfiddle.net/tkrotoff/N99h7/
Maintenant, le même JSFiddle avec votre solution proposée : http://jsfiddle.net/tkrotoff/N99h7/8/
Cela ne fonctionne pas: le popover est positionné par rapport au <div class="col-*">
+ imaginons que vous avez plusieurs entrées pour le même <div class="col-*">
...
Donc, si nous voulons garder le popover sur les entrées (sémantiquement mieux):
.popover { position: fixed; }
: mais chaque fois que vous faites défiler la page, le popover ne suivra pas le défilement.popover { width: 100%; }
: pas très bon puisque vous dépendez toujours de la largeur du parent (i.e <div class="col-*">
.popover-content { white-space: nowrap; }
: bon seulement si le texte à l'intérieur du popover est plus court que max-width
Voir http://jsfiddle.net/tkrotoff/N99h7/11/
Avec des navigateurs très récents, les nouvelles valeurs de largeur CSS peuvent peut-être résoudre le problème. Je n'ai pas essayé.
container: 'body'
fait normalement l'affaire (voir la réponse de JustAnil ci-dessus), mais il existe un problème si votre popover est en mode modal. Le z-index
le place derrière le modal lorsque le popover est attaché à body
. Cela semble être lié à BS2 numéro 5014 , mais je l’ai sous 3.1.1. Vous n'êtes pas censé utiliser une container
de body
, mais si vous corrigez le code à
$('#fubar').popover({
trigger : 'hover',
html : true,
dataContainer : '.modal-body',
...etc });
vous résolvez ensuite le problème z-index
, mais la largeur de popover est toujours incorrecte.
Le seul correctif que je peux trouver est d'utiliser container: 'body'
et d'ajouter des CSS supplémentaires:
.popover {
max-width : 400px;
z-index : 1060;
}
Notez que les solutions CSS ne fonctionneront pas toutes seules.
Voici le moyen de le faire sans-café avec survol:
$(".product-search-trigger").popover({
trigger: "hover",
container: "body",
html: true,
placement: "left"
}).on("show.bs.popover", function() {
return $(this).data("bs.popover").tip().css({
maxWidth: "300px"
});
});
});
Vous pouvez utiliser attribut data-container = "body" dans popover
<i class="fa fa-info-circle" data-container="body" data-toggle="popover"
data-placement="right" data-trigger="hover" title="Title"
data-content="Your content"></i>
Vous pouvez ajuster la largeur du popover avec les méthodes indiquées ci-dessus, mais la meilleure chose à faire est de définir la largeur du contenu avant que Bootstrap ne voit et ne fasse son calcul. Par exemple, j'avais une table, je définissais sa largeur, puis bootstrap construisait un popover à sa convenance. (Parfois, Bootstrap a du mal à déterminer la largeur, et vous devez intervenir et tenir sa main)
Pour ceux qui préfèrent la solution JavaScript . Dans Bootstrap 4 tip () est devenu getTipElement () et renvoie un objet no jQuery. Donc, pour changer la largeur du popover dans Bootstrap 4, vous pouvez utiliser:
}).on("show.bs.popover", function() {
$($(this).data("bs.popover").getTipElement()).css("max-width", "405px");
});
vous pouvez également ajouter le conteneur de données = "body" qui devrait faire le travail:
<div class="row">
<div class="col-md-6">
<label for="name">Name:</label>
<input id="name" class="form-control" type="text"
data-toggle="popover" data-trigger="hover"
data-container="body"
data-content="My popover content.My popover content.My popover content.My popover content." />
</div>
</div>
<label id="txtLbl">Overview</label> <a tabindex="0" class="btn btn-default" role="button" data-toggle="popover" data-placement="right" id="Pops" ></a>
<div id="popover-content" class="hide">
<div class="popovermenu">
Your content
</div>
</div>
Je finis par mettre la largeur de "popover-content" sur le nombre que je veux. (Les autres identifiants ou la classe ne fonctionneront pas .....) Bonne chance!
#popover-content{
width: 600px;
}
Je l'ai utilisé (fonctionne bien):
.popover{
background-color:#b94a48;
border:none;
border-radius:unset;
min-width:100px;
width:100%;
max-width:400px;
overflow-wrap:break-Word;
}
Une solution testée pour Bootstrap 4 beta:
.popover {
min-width: 30em !important;
}
En même temps que l'instruction jQuery:
$('[data-toggle="popover"]').popover({
container: 'body',
trigger: 'focus',
html: true,
placement: 'top'
})
La note latérale, data-container="body"
ou container: "body"
au format HTML ou comme une variable option
à l'objet popover({})
n'a pas vraiment fonctionné [peut-être que le travail fonctionne mais uniquement avec l'instruction CSS];
De plus, rappelez-vous que Bootstrap 4 beta repose sur popper.js pour son positionnement dans la popover et les info-bulles (auparavant, c’était tether.js)
Pour un composant TypeScript:
@Component({
selector: "your-component",
templateUrl: "your-template.component.html",
styles: [`
:Host >>> .popover {
max-width: 100%;
}
`]
})