Bootstrap4 导航栏:将项目截断为父级宽度

Bootstrap4 navbar : truncate item to parent width

我正在尝试使用一个居中文本元素的单行导航栏,该文本元素可以是任意长度,我需要将其截断以将 space 留给周围的其他元素。

这里是 fiddle.

我的看起来像

Back    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
[Button]                                                                              Yadda yadda

而我想要:

Back  [Button]        Lorem ipsum dolor sit amet, consectetur adipiscing...           Yadda yadda                                                                            

我试过 但它基于具有固定宽度的父容器,这里不是这种情况。

flexbox 存在最小宽度问题。 min-width: 0;

  • 请注意,我将 .flex-nowrap 添加到 navbar
  • 请注意,我将 .mw-100.text-truncate 添加到 .nav-item

.min-width-0 {
  min-width: 0;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>

<nav class="navbar navbar-expand-lg navbar-light bg-light flex-nowrap" id="navbar-top">
  <ul class="navbar-nav mr-auto no-expand">
    <li class="nav-item"><a class="nav-link" href="/" role="button">Back</a>
    </li>
    <li class="nav-item px-10">
      <a href="/" class="btn btn-secondary" role="button" hx-get={% url 'score_switch_compact' %} hx-swap="innerHTML" hx-target="#strips-container"><span class="material-icons md-24 vcenter">button</span></a>
    </li>

  </ul>

  <ul class="navbar-nav navbar-expand min-width-0">
    <li class="nav-item mw-100 text-truncate">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
    </li>
  </ul>
  <ul class="navbar-nav ml-auto no-expand">
    <li class="nav-item">
      <a class="nav-link" href="/" role="button">
       Yadda yadda
      </a>
    </li>

  </ul>
</nav>

为了使文本元素居中,您可以将两个 navbar-collapse 元素设置为 flex: 1 0 0%。这将使两端的元素均匀增长,使文本居中。要限制文本元素的 space 数量,您可以对 div 应用宽度(我在小屏幕上使用了 70%,这适用于低至 320px 宽的显示,之后切换器换行到下一行,在大屏幕上为 50%)。

.w-70 {
    width: 70%;
}

@media (min-width:992px) {
    .flex-lg-1-0-0 {
        flex: 1 0 0% !important;
    }

    .w-lg-50 {
        width: 50% !important;
    }
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="navbar-brand w-70 w-lg-50 text-center text-truncate order-lg-1">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
    </div>

    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbarSupportedContent" aria-controls="navbarSupportedContent1 navbarSupportedContent2" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>

    <div class="collapse navbar-collapse navbarSupportedContent flex-lg-1-0-0" id="navbarSupportedContent1">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link ml-2 ml-lg-0" href="#">Back</a>
            </li>
            <li class="nav-item" style="padding-top: 0.375rem">
                <button type="button" class="btn btn-secondary btn-sm">Button</button>
            </li>
        </ul>
    </div>
    
    <div class="collapse navbar-collapse navbarSupportedContent flex-lg-1-0-0 order-lg-2" id="navbarSupportedContent2">
        <ul class="navbar-nav ml-auto">
            <li class="nav-item">
                <a class="nav-link ml-2 ml-lg-0" href="#">Yadaa</a>
            </li>
            <li class="nav-item">
                <a class="nav-link ml-2 ml-lg-0" href="#">Yadaa</a>
            </li>
            <li class="nav-item">
                <a class="nav-link ml-2 ml-lg-0" href="#">Yadaa</a>
            </li>
        </ul>
    </div>
</nav>
<div class="container mt-5">
    <div class="row">
        <div class="col text-center">
            Center
        </div>
    </div>
</div>

我确实稍微修改了你的版本:

  • 我为较小的显示器添加了一个 navbar-toggler 按钮。您的 fiddle 使用了 navbar-expand-lg 但没有包含切换。
  • 文本元素的样式为 nav-item,但似乎没有任何好处,所以我将其更改为文本元素的样式为 navbar-brand。此外,我在小屏幕上从左侧开始文本项,然后在大屏幕上将其切换到中间。
  • 有一个 link 样式为按钮。如果它不会将用户带到不同的页面,则使用按钮最简单,而不是 link(更适合屏幕阅读器)。