【问题标题】:bootstrap dropdown menu going behind content on small screens引导下拉菜单落后于小屏幕上的内容
【发布时间】:2015-10-28 18:49:55
【问题描述】:

我用引导程序做了一个下拉菜单,但是当我将屏幕调整为小尺寸时,它看起来真的很糟糕,它正常工作,但是当下拉菜单很小时,它开始隐藏在其他内容后面

无论如何,它是否可以放在其他内容之上?

相关的html

<div class="container-fluid no-padding">
  <div class="row">
    <div class="col-xs-12">
      <nav class="navbar navbar-inverse nav-row">
        <a class="navbar-brand" href="#">Locket</a>
        <ul class="nav navbar-nav navbar-right">
          <li class="dropdown">
            <a href="#" class="dropdown-toggle dropdown-display" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{currentUser}}</a>

            <ul class="dropdown-menu">
              <li><a href="#">Action</a></li>
              <li><a href="#">Another action</a></li>
              <li><a href="#">Something else here</a></li>
              <li role="separator" class="divider"></li>
              <li><a href="#">Separated link</a></li>
              <li role="separator" class="divider"></li>
              <li ng-click="logout()"><a href="#">Log Out</a></li>
            </ul>
          </li>
        </ul>
      </nav>
    </div>
  </div>

  <div class="row">

    <div class="col-xs-4 friendListWindow">
      <p class="windowTitle text-center">Friends List</p>
      <form class='form-control-inline' ng-submit='addFriend(newFriendUsername)' name='addFriendForm'>
        <div class='form-group'>
          <input autocomplete='off' class='form-control input-display' type='text' name='newFriendUsername' ng-model='newFriendUsername' required/>
          <button class='btn btn-default button-display form-control' type='submit' ng-disabled='!addFriendForm.$valid'><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
        </div>
      </form>

      <span ng-if='sentRequest' class="friendReqSent">{{friendReqMsg}}</span>
      <p class="friendHeaders">Friend Requests</p>
      <div class="friendRequests">
        <ul class="friendList">
          <li class="friendRequest" ng-repeat='friend in friendRequests track by $index'>
            <div class='form-control-inline'>
              <span>New friend request from: {{friend}}</span>
              <div class="friendRequestOptions">
                <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-ok vertical-center' aria-hidden='true' ng-click='acceptFriendRequest(friend)'></span></button>
                <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-remove vertical-center' aria-hidden='true' ng-click='ignoreFriendRequest(friend)'></span></button>
              </div>
            </div>
          </li>
        </ul>
        <div class="acceptedfriendRequests">
          <ul class="friendList">
            <li class="friendRequest" ng-repeat='friend in acceptedfriendRequests track by $index'>
              <span>{{friend}} accepted your friend request</span>
              <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-ok vertical-center' aria-hidden='true' ng-click='acknowledgeFriendRequest(friend)'></span></button>
            </li>
          </ul>
        </div>
      </div>

css:

html, body {
  height: 100%;
  font: 300 16px/22px "Roboto", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}

p {
  margin-left: 10px;
}

ul {
  margin: 0;
}

img {
  width: 100%;
}

.icon {
  max-width: 20px;
  margin: 0;
}

.form-group {
  margin-bottom: 0;
}

.messages {
  padding-bottom: 5px;
}

.message-right {
  text-align: right;
}

.message-left {
  text-align: left;
}

.messageText {
  border-color: transparent;
  border-radius: 15px;
  display: inline-block;
  padding: 6px;
}

.wrapMessage {
  width: 300px;
  word-break: break-word;
  text-align: left;
}

.messageTextFrom {
  background-color: aliceblue;
}

.messageTextTo {
  background-color: beige;
}

.chatWindow {
  height: 95vh;
  padding-left: 0;
}

.friendHeaders {
  font-size: 18px;
  padding-top: 10px;
  margin-left: 10px;
}

.friendSearch {
  width: 60%;
  display: inline;
  vertical-align: middle;
  float:right;
  margin: 8px 13px 5px 5px;
  max-height: 26px;
}

.friendRequests {
  border-bottom: 1px solid lightgray;
}

.friendRequest {
  border-top: 1px solid lightgray;
  padding: 10px;
}

.friendRequestOptions {
  display: inline;
}

.friendListWindow {
  height: 95vh;
  border-right: 1px solid lightgray;
  padding-right: 0;
}

.friendList {
  list-style: none;
  padding-left: 0;
}

.friendPanel {
  border-left: 0px;
  border-right: 0px;
  border-radius: 0px;
  padding: 10px 10px 10px 10px;
  margin-bottom: 0px;
}

.activeFriendPanel {
  background-color: #bfd4d9;
}

.friendArrow {
  float: right;
  color: #ddd;
}

.friendReqSent {
  display: inline-block;
  float: right;
  font-size: 16px;
  padding: 10px;
}

.friendButton {
  display: inline;
  padding: 0 10px 0 10px;
  float: right;
}

.messageList {
  height: 82.5vh;
  overflow: auto;
}

.friendScroll {
  height: 70vh;
  overflow: auto;
}

.dropdown-toggle {
  margin-right: 34px;
  color: #bfd4d9 !important;
}

.navbar {
  position:relative;
  z-index: 1000;
}


.navbar-brand {
  font-family: "Roboto", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: bold;
  color: #bfd4d9 !important;
  text-transform: uppercase;
  margin-left: 13px !important;
  font-size: 28px;
}

.unreadMessage {
  display: inline-block;
  background-color: lavender;
  border-radius: 10px;
  padding: 5px;
  color: black;
}

.loginFailed {
  float: left;
  color: white;
  margin-top: 3px;
  margin-right: 8px;
}

img {
  margin-top: 30px;
  margin-left: 24px;
}

.no-padding {
  padding: 0 !important;
  margin: 0 !important;
}

.nav-row {
  margin-bottom: 0px;
  height: 5vh;
  background-color: #252839;
  border-color: #252839;
  border-radius: 0;
}

.form-control-inline {
  min-width: 0;
  width: auto;
  display: inline;
  vertical-align: middle;
  position: relative;
}

.input-display {
  width: 90%;
  display: inline;
  vertical-align: middle;
}

.button-display {
  width: 8%;
  display: inline;
  vertical-align: middle;
  text-align: center;
  border: none;
}

.windowTitle {
  border-bottom: 1px solid lightgray;
  padding: 5px 0px 5px 0px;
  font-size: 18px;
  font-weight: bold;
  margin-left: 0;
}

.btn {
  font-family: "Roboto", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}

.navbar-right {
  margin-right: 0;
  position:relative;
}

.dropdown-display {
  margin-right: 13px;
}

.vertical-center {
  vertical-align: middle;
}

.friendButton {
  width: 8%;
  float: right;
  border: none;
  margin-left: 10px;
  padding-bottom: 5px;
}

.encryptionIndicator {
  display: inline-block;
  float: right;
  padding-right: 10px;
  cursor: pointer;
  font-size: 16px;
}

.encryptionOn {
  color: green;
}

.encryptionOff {
  color: red;
}

【问题讨论】:

  • 如果你能在这里或JSFiddle创建一个类似的演示就更好了。
  • 我们也能看到一些 CSS 吗?或者更好的是,JSFiddle 的演示! :)
  • css 乱七八糟,不知道如何在 jsFiddle 中加载 angular 和 bootstrap
  • @WinchenzoMagnifico 您可以点击左侧的“外部资源”添加框架文件。

标签: javascript html css twitter-bootstrap


【解决方案1】:

您的问题是,在 Bootstrap 中,导航栏上使用的默认下拉菜单在 980 像素以下的屏幕上具有 position: static

您可以使用 CSS 覆盖样式(并将 no-collapse 类添加到您的 .dropdown-menu

CSS:

.navbar .dropdown-menu.no-collapse:before {
  left: auto;
  right: 12px;
}
.navbar .dropdown-menu.no-collapse:after {
  left: auto;
  right: 13px;
}
@media (max-width: 979px) {
  .navbar .dropdown-menu.no-collapse {
    background-color: #ffffff;
    border-color: rgba(0, 0, 0, 0.2);
    border-radius: 4px;
    border-style: solid;
    border-width: 1px;
    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    float: left;
    margin: 0;
    padding: 4px 0;
    position: absolute;
    top: 100%;
  }
  .navbar .dropdown-menu.no-collapse:before,
  .navbar .dropdown-menu.no-collapse:after {
    display: block;
  }
  .navbar .dropdown-menu.no-collapse li + li a {
    margin-bottom: 0;
  }
  .navbar .dropdown-menu.no-collapse .divider {
    display: list-item;
  }
  .navbar .dropdown-menu.no-collapse a {
    border-radius: 0;
    color: #333333;
    font-weight: normal;
    padding: 3px 15px;
  }
  .navbar .dropdown-menu.no-collapse a:hover,
  .navbar .dropdown-menu.no-collapse .active a,
  .navbar .dropdown-menu.no-collapse .active a:hover {
    background-color: #0088cc;
    color: #ffffff;
  }
  .btn-group.open .dropdown-menu.no-collapse {
    display: block;
    margin-top: 1px;
    border-radius: 5px;
  }
}

CODEPEN

【讨论】:

    【解决方案2】:

    因为如果看起来您想让下拉列表在所有视口中可见,您可以在 navbar-header 类中设置下拉列表/链接,然后使用带有navbar-btn 类的按钮下拉列表,这将处理很多框.

    .navbar.navbar-custom .navbar-upper {
        position: absolute;
        right: 0px;
    }
    .navbar.navbar-custom .navbar-upper .dropdown-menu {
        right: 0;
        left: auto;
    }
    

    如果您希望它始终位于右侧,您只需要设置一个位置,这样下拉菜单就会在正确的一侧打开,其他一切都只是样式。

    /*NEW CSS RULES*/
    
    .navbar.navbar-custom {
      padding-top: 5px;
      padding-bottom: 0;
    }
    .navbar.navbar-custom .navbar-upper {
      position: absolute;
      right: 0;
    }
    .navbar.navbar-custom .navbar-upper .dropdown-menu {
      right: 0;
      left: auto;
    }
    .navbar.navbar-custom .navbar-upper .navbar-btn.btn-drop {
      background: none;
      border: none;
      color: #bfd4d9;
    }
    .navbar.navbar-custom .navbar-brand {
      font-family: "Roboto", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
      font-weight: bold;
      color: #bfd4d9;
      text-transform: uppercase;
      font-size: 28px;
    }
    /*Original CSS Starts Here*/
    
    html,
    body {
      height: 100%;
      font: 300 16px/22px"Roboto", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    p {
      margin-left: 10px;
    }
    ul {
      margin: 0;
    }
    img {
      width: 100%;
    }
    .icon {
      max-width: 20px;
      margin: 0;
    }
    .form-group {
      margin-bottom: 0;
    }
    .messages {
      padding-bottom: 5px;
    }
    .message-right {
      text-align: right;
    }
    .message-left {
      text-align: left;
    }
    .messageText {
      border-color: transparent;
      border-radius: 15px;
      display: inline-block;
      padding: 6px;
    }
    .wrapMessage {
      width: 300px;
      word-break: break-word;
      text-align: left;
    }
    .messageTextFrom {
      background-color: aliceblue;
    }
    .messageTextTo {
      background-color: beige;
    }
    .chatWindow {
      height: 95vh;
      padding-left: 0;
    }
    .friendHeaders {
      font-size: 18px;
      padding-top: 10px;
      margin-left: 10px;
    }
    .friendSearch {
      width: 60%;
      display: inline;
      vertical-align: middle;
      float: right;
      margin: 8px 13px 5px 5px;
      max-height: 26px;
    }
    .friendRequests {
      border-bottom: 1px solid lightgray;
    }
    .friendRequest {
      border-top: 1px solid lightgray;
      padding: 10px;
    }
    .friendRequestOptions {
      display: inline;
    }
    .friendListWindow {
      height: 95vh;
      border-right: 1px solid lightgray;
      padding-right: 0;
    }
    .friendList {
      list-style: none;
      padding-left: 0;
    }
    .friendPanel {
      border-left: 0px;
      border-right: 0px;
      border-radius: 0px;
      padding: 10px 10px 10px 10px;
      margin-bottom: 0px;
    }
    .activeFriendPanel {
      background-color: #bfd4d9;
    }
    .friendArrow {
      float: right;
      color: #ddd;
    }
    .friendReqSent {
      display: inline-block;
      float: right;
      font-size: 16px;
      padding: 10px;
    }
    .friendButton {
      display: inline;
      padding: 0 10px 0 10px;
      float: right;
    }
    .messageList {
      height: 82.5vh;
      overflow: auto;
    }
    .friendScroll {
      height: 70vh;
      overflow: auto;
    }
    .unreadMessage {
      display: inline-block;
      background-color: lavender;
      border-radius: 10px;
      padding: 5px;
      color: black;
    }
    .loginFailed {
      float: left;
      color: white;
      margin-top: 3px;
      margin-right: 8px;
    }
    img {
      margin-top: 30px;
      margin-left: 24px;
    }
    .no-padding {
      padding: 0 !important;
      margin: 0 !important;
    }
    .form-control-inline {
      min-width: 0;
      width: auto;
      display: inline;
      vertical-align: middle;
      position: relative;
    }
    .input-display {
      width: 90%;
      display: inline;
      vertical-align: middle;
    }
    .button-display {
      width: 8%;
      display: inline;
      vertical-align: middle;
      text-align: center;
      border: none;
    }
    .windowTitle {
      border-bottom: 1px solid lightgray;
      padding: 5px 0px 5px 0px;
      font-size: 18px;
      font-weight: bold;
      margin-left: 0;
    }
    .btn {
      font-family: "Roboto", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    .vertical-center {
      vertical-align: middle;
    }
    .friendButton {
      width: 8%;
      float: right;
      border: none;
      margin-left: 10px;
      padding-bottom: 5px;
    }
    .encryptionIndicator {
      display: inline-block;
      float: right;
      padding-right: 10px;
      cursor: pointer;
      font-size: 16px;
    }
    .encryptionOn {
      color: green;
    }
    .encryptionOff {
      color: red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
    <nav class="navbar navbar-inverse navbar-static-top navbar-custom">
      <div class="container-fluid">
        <div class="navbar-header"> <a class="navbar-brand" href="#">Locket</a>
    
          <div class="navbar-upper">
            <div class="btn-group">
              <button type="button" class="btn navbar-btn btn-drop dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{currentUser}}</button>
              <ul class="dropdown-menu">
                <li><a href="#">Action</a>
    
                </li>
                <li><a href="#">Another action</a>
    
                </li>
                <li><a href="#">Something else here</a>
    
                </li>
                <li role="separator" class="divider"></li>
                <li><a href="#">Separated link</a>
    
                </li>
                <li role="separator" class="divider"></li>
                <li ng-click="logout()"><a href="#">Log Out</a>
    
                </li>
              </ul>
            </div>
          </div>
        </div>
      </div>
    </nav>
    <div class="container">
      <div class="row">
        <div class="col-sm-12 friendListWindow">
          <p class="windowTitle text-center">Friends List</p>
          <form class='form-control-inline' ng-submit='addFriend(newFriendUsername)' name='addFriendForm'>
            <div class='form-group'>
              <input autocomplete='off' class='form-control input-display' type='text' name='newFriendUsername' ng-model='newFriendUsername' required/>
              <button class='btn btn-default button-display form-control' type='submit' ng-disabled='!addFriendForm.$valid'><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
    
              </button>
            </div>
          </form> <span ng-if='sentRequest' class="friendReqSent">{{friendReqMsg}}</span>
    
          <p class="friendHeaders">Friend Requests</p>
          <div class="friendRequests">
            <ul class="friendList">
              <li class="friendRequest" ng-repeat='friend in friendRequests track by $index'>
                <div class='form-control-inline'> <span>New friend request from: {{friend}}</span>
    
                  <div class="friendRequestOptions">
                    <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-ok vertical-center' aria-hidden='true' ng-click='acceptFriendRequest(friend)'></span>
    
                    </button>
                    <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-remove vertical-center' aria-hidden='true' ng-click='ignoreFriendRequest(friend)'></span>
    
                    </button>
                  </div>
                </div>
              </li>
            </ul>
            <div class="acceptedfriendRequests">
              <ul class="friendList">
                <li class="friendRequest" ng-repeat='friend in acceptedfriendRequests track by $index'> <span>{{friend}} accepted your friend request</span>
    
                  <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-ok vertical-center' aria-hidden='true' ng-click='acknowledgeFriendRequest(friend)'></span>
    
                  </button>
                </li>
              </ul>
            </div>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2014-02-09
      • 2016-10-15
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多