Bootstrap下拉切断

时间:2013-01-23 06:32:42

标签: css twitter-bootstrap

我正在尝试将一个下拉设置菜单添加到我正在处理的项目中的评论部分。

下拉菜单似乎已经消失,我不确定为什么会这样。

我试过了overflow:visible and z-index:999。但它们似乎都不起作用。

这是一个基本的评论栏,我试图在

中包含一个下拉列表

这是我尝试实施的基本代码

<div class="media">
    <a class="pull-left" href="/user/{{shared_scribble.scribble.user.username}}/"><img class="media-object" src="/img.png/"></a>
    <div class="dropdown pull-right">
        <a class="btn dropdown-toggle" data-toggle="dropdown" href="#" style="font-size:10px;padding: 4px 8px;">
            <b data-icon="&#xe001;"></b> <b class="caret"></b>
        </a>
        <ul class="dropdown-menu">
            <li><a href="#"><i class="icon-pencil"></i> Edit</a></li>
            <li><a href="#"><i class="icon-trash"></i> Delete</a></li>
            <li><a href="#"><i class="icon-ban-circle"></i> Ban</a></li>
            <li class="divider"></li>
            <li><a href="#"><i class="i"></i> Make admin</a></li>
        </ul>
    </div>
    <div class="media-body">
        <h4 class="media-heading"><a class="username" href="/user/hi/">Test User</h4>
        <p>
            Main body of the comment
        </p>
    </div>
</div>

这就是我的下拉菜单结果为

的方式

ScreenShot

媒体CSS

.media,
.media-body {
  overflow: hidden;
  *overflow: visible;
  zoom: 1;
}
.media,
.media .media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media-object {
  display: block;
}
.media-heading {
  margin: 0 0 5px;
}
.media .pull-left {
  margin-right: 10px;
}
.media .pull-right {
  margin-left: 10px;
}
.media-list {
  margin-left: 0;
  list-style: none;
}

7 个答案:

答案 0 :(得分:18)

检查媒体类是否有overflow:hidden。如果是,请将其替换为overflow: autooverflow: visible

答案 1 :(得分:18)

这不是一个理想的解决方案,因为菜单不会与目标元素一起滚动,但我会在滚动数据表中这样做,作为最后的手段,直到找到替代方案:

(function() {                                             
  var dropdownMenu;                                     
  $(window).on('show.bs.dropdown', function(e) {        
    dropdownMenu = $(e.target).find('.dropdown-menu');
    $('body').append(dropdownMenu.detach());          
    dropdownMenu.css('display', 'block');             
    dropdownMenu.position({                           
      'my': 'right top',                            
      'at': 'right bottom',                         
      'of': $(e.relatedTarget)                      
    })                                                
  });                                                   
  $(window).on('hide.bs.dropdown', function(e) {        
    $(e.target).append(dropdownMenu.detach());        
    dropdownMenu.hide();                              
  });                                                   
})();                  

这会将菜单附加到正文并在隐藏处清理它。我使用jquery UI进行定位,但如果您不想添加重度依赖,则可以使用常规jquery定位替换它。如果您只想对有限的下拉菜单进行此操作,您可能还想更改$(window).on

答案 2 :(得分:7)

像这样写:

.media,
.media-body {
  overflow: visible;
}

.media:after,
.media-body:after{
 content:'';
 clear:both;
 display:block;
}

可能对你有帮助。

答案 3 :(得分:2)

我遇到了同样的问题。添加这些行后,我的下拉工作正如我预期的那样:

try{

   //Whatever could cause the exception

}catch(IndexOutOfBoundsException e){
   //Handle the exception
   //e.printStackTrace();
}

我找到了解决方案here

答案 4 :(得分:1)

新方法:

只需从媒体类中删除下拉菜单并使用负余量:

 <div class="dropdown pull-right" style="margin-left:-30px">
     ...
 </div>

 <div class="media">
     ...
 </div>

答案 5 :(得分:0)

经常在我继承的项目上得到这个;往往是具有

的父元素之一的情况

溢出:隐藏

一旦我删除它,它似乎按预期工作(只要您的设计不依赖于此属性)。

答案 6 :(得分:0)

基于@nick 的回答,这就是我在没有 Jquery UI 的 Bootstrap 3 中所做的。

        let dropdown_toggles = $('.my-table .dropdown-toggle');
        dropdown_toggles.each(function (index, elem) {
            let dropdownMenu;
            let dropdown_toggle = $(elem);
            dropdown_toggle.dropdown();
            dropdown_toggle.parent().on('show.bs.dropdown', function(e) {
                let $target = $(e.target);
                let $relatedTarget = $(e.relatedTarget).parent();
                dropdownMenu = $target.find('.dropdown-menu');
                dropdownMenu.css({
                    'position': 'absolute',
                    'z-index': 1,
                    'top': ($relatedTarget.offset().top + $relatedTarget.height()) + 'px',
                    /*'left': $relatedTarget.offset().left + 'px',*/ //from left
                    'left': ($relatedTarget.offset().left - dropdownMenu.width() + $relatedTarget.width()) + 'px', //from right
                });
                $('body').append(dropdownMenu.detach());
                dropdownMenu.css('display', 'block');
            });
            dropdown_toggle.parent().on('hide.bs.dropdown', function(e) {
                $(e.target).append(dropdownMenu.detach());
                dropdownMenu.hide();
            });
        });

这将允许您使用绝对位置从左或右设置。