À l’aide de bootstrap, j’ai un menu déroulant (s) à l’intérieur de div
avec overflow:hidden
, ce qui est nécessaire pour être comme ça. Cela a entraîné le découpage des listes déroulantes par le conteneur.
Ma question, comment puis-je résoudre ce problème de découpage, par exemple changer le conteneur de toutes les listes déroulantes de mon projet pour qu'il soit body
, avec le coût le plus bas possible?
voici un exemple de code: http://jsfiddle.net/0y3rk8xz/
si quelqu'un souhaite une solution de contournement, la liste déroulante d'amorçage comporte un événement show.bs.dropdown que vous pouvez utiliser pour déplacer l'élément déroulant en dehors du conteneur overflow:hidden
.
$('.dropdown').on('show.bs.dropdown', function() {
$('body').append($('.dropdown').css({
position: 'absolute',
left: $('.dropdown').offset().left,
top: $('.dropdown').offset().top
}).detach());
});
il existe également un événement hidden.bs.dropdown si vous préférez déplacer l'élément à son emplacement d'origine une fois la liste déroulante fermée:
$('.dropdown').on('hidden.bs.dropdown', function() {
$('.bs-example').append($('.dropdown').css({
position: false,
left: false,
top: false
}).detach());
});
Voici un exemple de travail:
Définissez la propriété div sur overflow:visible;
ou Définissez Position:absolute;
sur la classe .dropdown de la manière suivante:
.bs-example .dropdown{position:absolute;}
Voir le code de travail: http://jsfiddle.net/guruWork/3x1f8ng5/
Ma solution consistait à utiliser le positionnement statique dans la liste déroulante. J'ai eu la liste déroulante à l'intérieur d'une table d'amorçage avec débordement caché.
<div class="table" style="overflow: hidden;">
<div class="dropdown" style="position: static;">
<div class="dropdown-menu">...</div>
</div>
</div>
Cela n'a pas fonctionné avec votre violon, cependant. Je ne suis donc pas sûr que ma solution ait quelque chose à voir avec les tables bootstrap. Quoi qu’il en soit, cela donnera peut-être à quelqu'un quelque chose de nouveau à essayer.
Je faisais face au même problème et après des heures de recherche. J'ai créé un gestionnaire d'événements pour intercepter le menu déroulant, obtenir les positions et l'attacher de manière dynamique. afin qu'il ne soit pas coupé.
Voici le code simple que j'ai utilisé. Essayez si cela aide.
$('.dropdown-toggle').click(function (){
dropDownFixPosition($('button'),$('.dropdown-menu'));
});
function dropDownFixPosition(button,dropdown){
var dropDownTop = button.offset().top + button.outerHeight();
dropdown.css('top', dropDownTop + "px");
dropdown.css('left', button.offset().left + "px");
}
J'ai eu une sorte de problème de défilement avec la plupart des solutions dans cette question et d'autres que j'ai vu sur SO. Ce qui a bien fonctionné pour moi, c’était de faire la position déroulante inherit
:
.dropdown {
position: inherit;
}
Et définissez ensuite la position dropdown-menu
à l'aide de JavaScript:
$(document).on("show.bs.dropdown", function () {
var dropdownToggle = $(this).find(".dropdown-toggle");
var dropdownMenu = $(this).find(".dropdown-menu");
dropdownMenu.css({
"top": (dropdownToggle.position().top + dropdownToggle.outerHeight()) + "px",
"left": dropdownToggle.position().left + "px"
});
});
Voici un exemple de travail: http://jsfiddle.net/ck66ee9q/
Vous pouvez aussi essayer celui-ci en remplaçant yourDivId par l'id de votre div.
$('.dropdown').on('show.bs.dropdown', function() {
$('#yourDivId').css('overflow-x', 'visible');
});
$('.dropdown').on('hidden.bs.dropdown', function() {
$('#yourDivId').css('overflow-x', 'hidden');
});
J'ai rencontré le même problème, avec le besoin d'avoir overflow:hidden
défini, mais que le menu déroulant ne soit pas tronqué.
Cependant, ma situation impliquait le Bootstrap Carousel , alors j’ai décidé qu’une solution valide rendrait le débordement visible uniquement lorsque le menu déroulant est ouvert et qu’il se ferme, le débordement peut redevenir masqué. Cette solution pourrait fonctionner pour d'autres, alors je la partage.
$('.dropdown-toggle').click(function() {
var $container = $(this).parent('.carousel-inner');
$container.css('overflow','visible');
$(document).one('click', function() {
$container.css('overflow','');
});
});
Notez que cela ne vérifie pas que la clé Esc
est utilisée pour fermer la liste déroulante, mais dans mon cas, ce n'était pas un problème. Ma propre version utilise une classe pour appliquer le style que certains développeurs préfèrent au lieu de modifier le CSS en ligne.
Toutes les suggestions qui ont été faites ici manquent en quelque sorte et je ne pourrais pas les faire fonctionner correctement. Donc, j'ai fait celui-ci basé sur toutes les suggestions et fonctionne très bien pour moi.
J'ai utilisé une autre classe ici pour faire la différence avec les éléments de liste déroulante habituels que je pourrais vouloir faire fonctionner de manière classique.
$(document).on("show.bs.dropdown", ".dropdown.my-body-dropdown", function () {
//original dropdown element
var thisDropdown = $(this);
//make a deep clone
var thisDropdownCopy = thisDropdown.clone(true, true);
//append to the body with a different class which is my-modified-dropdown here
//and open which will make dropdown menu show up
$("body").append( thisDropdownCopy.addClass("my-modified-dropdown open").css({ "position": "absolute", "left": thisDropdown.offset().left, "top": thisDropdown.offset().top }).detach() );
//hide the original dropdown element
$(this).hide();
})
.on("hidden.bs.dropdown", ".dropdown.my-body-dropdown", function() {
//remove modified dropdowns
$(".dropdown.my-body-dropdown.my-modified-dropdown").remove();
//show original dropdowns
$(".dropdown.my-body-dropdown").show();
});
J'avais un élément div
avec une classe Bootstrap panel
contenant DevExpress ComboBoxes
contenu dans des éléments div
avec des classes Bootstrap col-lg
.
J'ai eu un problème de couleur de fond panel
ou de couleur de bordure se fondant au div
ci-dessus. Pour résoudre ce problème, j’ai ajouté overflow:hidden;
à la panel
, mais cela a entraîné la fermeture du menu déroulant de la ComboBox. J'ai ajouté style="position: inherit"
à ces éléments div dans la panel
contenant les ComboBox et cela a résolu le problème.
<div class="col-sm-12" style="position: inherit">
<div class="col-sm-4" style="position: inherit">
<dx:aspxComboBox></dx:aspxComboBox>
</div>
</div>
Cette solution, j'ai trouvé ici .