【问题标题】:Bootstrap drop down cutting off引导下拉菜单切断
【发布时间】:2013-01-06 13:57:10
【问题描述】:

我正在尝试将下拉设置菜单添加到我一直在从事的项目中的 cmets 部分。

下拉菜单似乎会自动关闭,我不知道为什么会这样。

我试过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>

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

媒体 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;
}

【问题讨论】:

  • @sandeep 我也添加了媒体 css

标签: css twitter-bootstrap


【解决方案1】:

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

【讨论】:

  • 在某些情况下,overflow:hidden 是与设计相关的,@Nick Perez 的回答可以在这些情况下提供帮助。
  • 同意@RoyShoa,这通常是不可能的。在这里找到解决方法:stackoverflow.com/questions/31829312/…
【解决方案2】:

这样写:

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

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

也许对你有帮助。

【讨论】:

    【解决方案3】:

    新方法:

    只需将下拉菜单带出媒体类并使用负边距:

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

    【讨论】:

      【解决方案4】:

      这不是一个理想的解决方案,因为菜单不会随目标元素一起滚动,但我在找到替代方案之前,我会为滚动数据表执行此操作:

      (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

      【讨论】:

      • 感谢尼克的回答。对我来说效果很好。我没有能够改变隐身溢出的奢侈(需要固定的高度/宽度)
      • 很乐意看到这个答案更新以处理表格滚动
      • 效果很好,谢谢!只需将'my': 'left top', 'at': 'left bottom' 上的right 更改为left,否则菜单会以错误的方向打开。
      【解决方案5】:

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

      的父元素之一的情况
      overflow:hidden
      

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

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题。添加此行后,我的下拉菜单按预期工作:

        @media (max-width: 767px) {
            .table-responsive .dropdown-menu {
                position: static !important;
            }
        }
        
        @media (min-width: 768px) {
            .table-responsive {
                overflow: visible;
            }
        }
        

        我找到了解决方案here

        【讨论】:

        • 谢谢!它适用于台式机和平板电脑,但在 iPhone 6+ 上定位有点奇怪,我更改了 max-width 767px 以注释掉位置并使用 left: -100px; ... 是的,hacky,但它有效。
        【解决方案7】:

        根据@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();
                    });
                });
        

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

        【讨论】:

          猜你喜欢
          • 2019-01-27
          • 1970-01-01
          • 2014-07-16
          • 1970-01-01
          • 2015-08-30
          • 2015-08-08
          • 2012-07-05
          • 1970-01-01
          相关资源
          最近更新 更多