【问题标题】:bootstrap fixed navbar vertical alignment issuebootstrap 修复了导航栏垂直对齐问题
【发布时间】:2015-01-28 01:59:27
【问题描述】:

我在我的 ASP.net 项目母版页中添加了一个 Bootstrap 固定底部导航栏,它有一个徽标和版权文本(为了简单起见,我借用了 Microsoft 徽标)。 我希望它们排成一行,所以我将 .navbar-left 样式应用于它们的 parent ,工作,但是,我发现文本是顶部对齐的,我希望它具有垂直居中对齐,如何实现?谢谢。

<div class="navbar navbar-default navbar-fixed-bottom" id="footer">
<ul class="nav navbar-nav navbar-left">
    <li><img src="http://c.s-microsoft.com/en-us/CMSImages/mslogo.png?version=856673f8-e6be-0476-6669-d5bf2300391d" alt="MSTF Logo"/></li>
    <li><p>&copy; 2015 Microsoft. All rights reserved</p></li>
</ul>

http://jsfiddle.net/tz783rkn/5/

【问题讨论】:

    标签: twitter-bootstrap alignment


    【解决方案1】:

    在img标签内添加这段代码:

    style="float:left; margin-right:7px;"

    例如:

    <img style="float:left; margin-right:7px;" 
    src="http://c.s-microsoft.com/en-us/CMSImages/
    mslogo.png?version=856673f8-e6be-0476-6669-d5bf2300391d" 
    alt="MSTF Logo"/>
    

    看到这个:http://jsfiddle.net/tz783rkn/7/ 从那里您可以设置第二个 &lt;li&gt; 的 margin-top 以使其看起来很漂亮

    更新: http://jsfiddle.net/tz783rkn/9/

    【讨论】:

    • 谢谢@gkol。我认为 key 不是 的内联样式,因为 .navbar-left 已经定义了“float:left”,key 是文本的 margin-top。
    • 有什么不同吗?我更喜欢不使用内联样式。而且这个硬编码的margin-top解决方案不是很完美:在我的实际项目中,标志图片不是那么大,如果我设置为8px,文本看起来居中但它也会增加整个导航栏的高度,如果我设置为4px不增加导航栏的高度,文本不再居中。
    • 我使用 class="text-center" 来处理这个问题。在最后一个链接中,我使用了类。
    【解决方案2】:

    有几种不同的方法可以完成您正在尝试做的事情:

    首先:如果您的徽标大小是预先确定的,那么您可以在包含文本的列表元素中添加一个类,我们称之为“copyright-text”。然后我们可以设置元素的样式,并在顶部(和左侧)给它一些边距,让它看起来位于中心。

    .copyright-text {
        margin-top: px;
        margin-left: 10px;
    }
    

    这是一个展示这种方法的小提琴:http://jsfiddle.net/tz783rkn/8/

    第二种:第二种方法将周围容器的显示设置为“table”,然后创建一个内部“div”元素,显示设置为“table-cell”。这允许您使用“vertical-align” CSS 属性,该属性允许您将元素定位在父元素的中间,类似于在表格中的方式。这需要稍微重构您的 HTML 并添加一些额外的类或内联样式:

    HTML:

    <div class="navbar navbar-default navbar-fixed-bottom" id="footer">
    <ul class="nav navbar-nav navbar-left">
        <li class="table-container">
            <div class="tabel-cell-container">
                <img src="http://c.s-microsoft.com/en-us/CMSImages/mslogo.png?version=856673f8-e6be-0476-6669-d5bf2300391d" alt="MSTF Logo"/>
                <p class="copyright-text">&copy; 2015 Microsoft. All rights reserved</p>
            </div>
        </li>
    </ul>
    

    CSS:

    .navbar {
        min-height: auto;
    }
    li.table-container {
        display: table;
    }
    .tabel-cell-container {
        display: table-cell;
        vertical-align: middle;
    }
    .copyright-text {
        display: inline-block;
        margin-left: 10px;
    }
    

    这是一个使用表格显示方法的小提琴:http://jsfiddle.net/tz783rkn/16/

    这么小的面积很难看到结果,所以你可以夸大列表项的高度,看看它是如何将子元素定位在父元素中间的,如图here

    希望对你有帮助。

    【讨论】:

    • 谢谢乔希!您的第二个解决方案看起来很棒!但仍有一个小缺陷。我已经更新了徽标图片以反映我实际项目中徽标的真实尺寸。如您所见,版权文本实际上不是真正垂直居中的,即使您已经指定vertical-align to middle,这是什么根本原因?是因为字体的基线和体面吗?附言这是我的第二个解决方案的更新版本:jsfiddle.net/tz783rkn/24
    • 它看起来不居中的原因是因为图像中的文本没有在图像中间居中。这会导致垂直对齐的“外观”看起来不像预期的那样工作。解决这个问题的唯一方法是为文本添加额外的填充,但由于我们设置垂直对齐属性的方式,我们必须将文本向右浮动,然后添加大约 8px 的顶部填充或边距让文本正确排列。这是一个更新的解决方案:jsfiddle.net/tz783rkn/26
    • 请注意,除了能够垂直对齐父容器中的其他元素(包括图像)之外,使用更新的解决方案并没有真正比我的答案中的第一个解决方案提供任何好处。
    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2014-09-20
    • 2012-08-16
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多