【问题标题】:Bootstrap lists with links don't line up with lists in navbar带有链接的引导列表不与导航栏中的列表对齐
【发布时间】:2018-09-05 23:09:02
【问题描述】:

我有一个从 CDN 加载 Bootstrap 的 base.html 文件,然后我在 base.css 中有一些自定义 css 样式。但是,在导航栏中,我有一些奇怪的垂直对齐方式,其中一种元素 .navbar-nav > li.navbar-nav > li > a 相比位于导航栏的顶部。我的 django html 模板如下所示:

<nav class="navbar navbar-default">
  <div class="container-fluid">
    <div class="navbar-header">
        <div class="navbar-brand">
            <a href="#"><img style="margin-top: -10px;" src={% static "classroom/images/vsb-logo.png" %}></a>
        </div>
    </div>
    <ul class="nav navbar-nav navbar-right">
        <li><a href={% url 'admin:index' %}>Admin</a></li>
        <li><a href={% url 'classroom:blocklist' %}>Classlist</a></li>
        <li><a href={% url 'classroom:random' %}>Randomize</a></li>
        <li>{{request.user.username}}</li>
        <li><a href={% url 'account_logout' %}>Log out</a></li>
    </ul>
  </div><!-- /.container-fluid -->
</nav>

我有 base.css 取代了引导 css。但是,我找不到使&lt;li&gt;{{request.user.username}}&lt;/li&gt; 样式高于带有锚标记的链接的样式属性,例如&lt;li&gt;&lt;a href={% url 'admin:index' %}&gt;Admin&lt;/a&gt;&lt;/li&gt;

我已经为这两个选择器提供了以下样式,并且我在浏览器开发者工具中检查了这两个样式是相同的:

.navbar-default .navbar-nav li,
.navbar-default .navbar-nav li a {
    padding-top: 15px;
    padding-bottom: 15px;
    margin: 0px;
    position: relative;
    display: block;
    box-sizing: border-box;
}

我可以破解这个并将我的用户名行更改为:

<li><a href="#">{{request.user.username}}</a></li>

但我想找出导致这种错位的原因。 Here is a live page with the problem

【问题讨论】:

  • 将情况发布在实时服务器上,以便有人可以通过开发人员工具帮助您进行调试。除此之外......我们都在猜测。
  • 原始问题经过编辑以包含链接。

标签: css twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

简短回答

您的文本“Doug W”看起来高于其兄弟对应部分(锚链接)的原因是因为您在 base.css 中复合了 padding-top:15px 值。

base.css 第 20 行

.navbar-default .navbar-nav li, 
.navbar-default .navbar-nav li a {
    padding-top: 15px;
    ...
}

在这里,您实际上是在说,让您的每个 nav-bar li 元素都有一个 15px 的 padding-top,如果其中有一个锚链接,请再次复合该规则......但这次是在锚链接也是。

Sense“Doug W”没有围绕它的锚链接,它没有跟随两个 padding-top 调整。它仅受padding-top:15px.navbar-default .navbar-nav li 的影响,.navbar-default .navbar-nav li a。这就是“Doug W”脱颖而出的原因。

长答案

您有 3 个文件来控制导航栏项目的上边距比率:

navbar.less 在第 266 行 - 来自 CDN

.navbar-nav>li>a {
    padding-top:10px
    ...
}

第 23 行的 navs.less - 来自 CDN

.nav>li>a {
    ...
    padding:10px 15px;
}

base.css at line 20 - 你的自定义样式表

.navbar-default .navbar-nav li, .navbar-default .navbar-nav li a {
    padding-top: 15px;
    ...
}

根据您提供的链接,您似乎担心Doug W 高于其他同级链接。尝试将文本 Doug W 包装在锚元素中,如下所示...

<a href="#">Doug W</a> 

或者像这样将它包裹在一个&lt;p&gt;元素中......

<p>Doug W</p>

如果您决定将其包装在 &lt;p&gt; 元素中,则将以下 CSS 规则集添加到您的样式表中:

.navbar-default .navbar-nav li p {
    padding-top: 15px;
    padding-bottom: 15px;
    margin: 0px;
    position: relative;
    display: block;
    box-sizing: border-box;
}

或者只是这样做......

.navbar-default .navbar-nav li,
.navbar-default .navbar-nav li a,
.navbar-default .navbar-nav li p {
    padding-top: 15px;
    padding-bottom: 15px;
    margin: 0px;
    position: relative;
    display: block;
    box-sizing: border-box;
}

总之,当涉及到元素、锚链接和文本字段的放置和位置时,使用 CSS 来控制这一切。不要留下任何未包装或未获得的东西。

  • 明白,我刚刚更新了我的答案以帮助了解正在发生的事情
  • 好的,我想我知道了。不仅它们都具有相同的填充,还在于用 包裹行为其提供了额外的元素和额外的填充。
  • 是的,你是正确的。这适用于我们放在这个位置的任何元素。
  • 【解决方案2】:

    您的错位问题是由.navbar-nav&gt;li&gt;a css 规则引起的。它有一个padding: 15px,它不适用于您的第四个元素,因为它不是锚标记。 您可以尝试移动该 css 规则以应用于所有列表项,例如 .navbar-nav&gt;li

    【讨论】:

    • 在线移动文件时忘记上传css文件。我现在有css。 li 和 li>a 项现在具有相同的填充,但 li 项更高。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签