【问题标题】:Flex justify content end bootstrap nav itemsFlex 对齐内容结束引导导航项
【发布时间】:2019-04-12 17:32:00
【问题描述】:

Codepen -> https://codepen.io/SubSul/pen/LgWzVw.

我修改了 bootstrap 4 导航栏组件,在右上角包含一个用于登录的固定按钮下拉菜单。我现在正试图将导航项与登录按钮对齐,但 justify-content: flex-end 似乎没有将其推到右侧。

我尝试在导航项中添加 margin-left,但无济于事。

在桌面上我正在尝试实现这一点 -

在移动设备上,我正在尝试使徽标中心对齐并将登录按钮固定在右侧。我可以使用margin-right 将徽标移动到中心,但是单击汉堡包时的过渡将徽标向左移动了一点,如何将其固定在中心 -

<html>
<head>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
        integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>

<div class="main">
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar Logo</a>
    <div class="collapse navbar-collapse justify-content-end" id="navbarText">
      <ul class="navbar-nav">
        <li class="nav-item active">
          <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Features</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Pricing</a>
        </li>
      </ul>
    </div>
  </nav>
  <div class="login-widget">
    <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      Log In
    </button>
    <div class="dropdown-menu dropdown-menu-right">
      <form class="px-4 py-3">
        <div class="form-group">
          <label for="exampleDropdownFormEmail1">Email address</label>
          <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
        </div>
        <div class="form-group">
          <label for="exampleDropdownFormPassword1">Password</label>
          <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
        </div>
        <div class="form-check">
          <input type="checkbox" class="form-check-input" id="dropdownCheck">
          <label class="form-check-label" for="dropdownCheck">
            Remember me
          </label>
        </div>
        <button type="submit" class="btn btn-primary">Sign in</button>
      </form>
      <div class="dropdown-divider"></div>
      <a class="dropdown-item" href="#">New around here? Sign up</a>
      <a class="dropdown-item" href="#">Forgot password?</a>
    </div>
  </div>

</div>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
        integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
        crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
        integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
        crossorigin="anonymous"></script>
</body>
</html>

样式

.main {
  display: flex;
  justify-content: space-between;
}
.dropdown-menu {
  margin-top: 15px;
}
.navbar-collapse {
  /* margin-left: 100%; */
}
.login-widget {
  /* margin-left: 320px; */
}

【问题讨论】:

  • 对于负数选民,是否愿意发表评论以证明您的投票是正确的?
  • 将您的代码添加到您的问题中。
  • 问题末尾有一个codepen链接。甚至在完全阅读问题之前就减去选票,荒谬!
  • 是的,我可以看到您有一个 codepen 链接。问题是,如果您更改链接的 codepen 上的代码,或完全删除 codepen,这个 StackOverflow 问题(以及有关它的任何答案、讨论)将变得毫无用处。
  • 明白了,谢谢你的理由。

标签: html css flexbox bootstrap-4


【解决方案1】:

我想出了一个解决方案,它不是我做的最干净的,但也许它对你有用,我没有使用 flexbox 来做,所以你可以删除 .main css,首先你需要将 .login-widget div 移动到 nav 标签内,这样它看起来就像你想要的桌面一样。

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar Logo</a>
    <div class="collapse navbar-collapse justify-content-end" id="navbarText">
    <ul class="navbar-nav">
        <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Pricing</a>
        </li>
    </ul>
    </div>

    <div class="login-widget">
            <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Log In
            </button>
            <div class="dropdown-menu dropdown-menu-right">
            <form class="px-4 py-3">
                <div class="form-group">
                <label for="exampleDropdownFormEmail1">Email address</label>
                <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
                </div>
                <div class="form-group">
                <label for="exampleDropdownFormPassword1">Password</label>
                <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
                </div>
                <div class="form-check">
                <input type="checkbox" class="form-check-input" id="dropdownCheck">
                <label class="form-check-label" for="dropdownCheck">
                    Remember me
                </label>
                </div>
                <button type="submit" class="btn btn-primary">Sign in</button>
            </form>
            <div class="dropdown-divider"></div>
            <a class="dropdown-item" href="#">New around here? Sign up</a>
            <a class="dropdown-item" href="#">Forgot password?</a>
            </div>
        </div>

</nav>

但是我们在移动设备上会遇到一个问题,当你点击汉堡菜单的 .login-widget div 时,它会与菜单的其他导航项对齐, 打破你的布局,所以我要解决这个问题,它给 .login-widget 一个绝对位置

.login-widget{
    position: absolute;
    right: 16px;
    top: 4px;
}

这可以解决 .login-widget 的问题,但现在我们遇到了另一个问题 .navbar-brand 没有居中,所以我要修复它的方法是再次使用绝对位置

.navbar-brand{
    position: absolute;
    top: 8px;
    right: calc(109px + 16px);
    left: calc(56px + 16px);
    text-align: center;
}

最后,您必须将这些类包装在媒体查询中以重置桌面的值。

@media only screen and (min-width: 992px){
    .login-widget{
        position: static;
        right: auto;
        top: auto;
    }

    .navbar-brand{
        position: static;
        top: auto;
        right: auto;
        left: auto;
        text-align: left;
    }
}

Here你有一个codepen,如果你想测试它,请告诉我这是否是你正在寻找的解决方案!

【讨论】:

  • 在这里非常感谢您的帮助。作为一名服务器端开发人员,我确实从您的帖子中学到了很多 CSS 定位。谢谢。 +1 并接受答案。
  • 您能告诉我您是如何达到 109px 和 56px 以使徽标居中对齐的吗?只是想在这里学习这些概念。
  • 您好!很高兴为您提供帮助!徽标位于汉堡按钮和登录按钮之间;默认情况下,引导程序对 .navbar 类使用 16px 填充,但徽标位于绝对位置,这意味着它不会尊重这一点,所以我在那里使用 css calc 函数将 16px 添加到右侧和左侧加上两个元素的宽度,109px是登录按钮的宽度,56px是汉堡包按钮的宽度。
  • 知道了,谢谢哥们。
猜你喜欢
  • 1970-01-01
  • 2019-01-29
  • 2016-12-31
  • 2019-03-09
  • 2020-06-03
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多