Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force breadcrumbs to stay on one line with text truncation with Bootstrap 5

Bootstrap 5 docs suggest the following code for breadcrumbs:

<nav aria-label="breadcrumb">
  <ol class="breadcrumb">
    <li class="breadcrumb-item"><a href="#">Home</a></li>
    <li class="breadcrumb-item"><a href="#">Library</a></li>
    <li class="breadcrumb-item active" aria-current="page">Data</li>
  </ol>
</nav>

In another section, they recommend using the .text-truncate class to auto truncate text with ellipsis, but unfortunately, this doesn't seem to work when applied to breadcrumbs. Is there a way to achieve one line breadcrumbs in BS5?

like image 420
Abram Avatar asked Nov 06 '25 17:11

Abram


2 Answers

.text-truncate only works on display: block or inline-block elements, and .breadcrumb uses flex, see: Text truncation

A solution would be setting your ol.breadcrumb element to display block by using the bootstrap .d-block class and applying the .text-truncate class to it, and finaly applying a display: inline-block to all li's using the class .d-inline-block.

<nav aria-label="breadcrumb">
 <ol class="breadcrumb d-block text-truncate">
  <li class="breadcrumb-item d-inline-block"><a href="#">Home</a></li>
  <li class="breadcrumb-item d-inline-block"><a href="#">Child 1 Page Name</a> </li>
  <li class="breadcrumb-item d-inline-block"><a href="#">Child 2 Page Name</a></li>
  <li class="breadcrumb-item d-inline-block"><a href="#">Child 3 Page Name</a></li>
  <li class="breadcrumb-item d-inline-block active" aria-current="page">Data of a long named page</li>
 </ol>
</nav>

I've also write a suggestion just for fun... :)

/*JUST A SUGGESTION*/
.sugg ol.breadcrumb {
  flex-wrap: unset;
  white-space: nowrap;
}

.sugg ol.breadcrumb > li:not(:first-child):not(:last-child){
  overflow: hidden;
  text-overflow: ellipsis;
}
/* breakdown to hide it on small devices */
@media (max-width: 576px) { 
  .sugg ol.breadcrumb > li:not(:first-child):not(:last-child){
    visibility: hidden;
    width: 0;
    padding: 0;
    
  }
  .sugg ol.breadcrumb > li:last-child:before {
    content: var(--bs-breadcrumb-divider, "/ ... /");
  }
   .sugg ol.breadcrumb > li:last-child {
    overflow: hidden;
    text-overflow: ellipsis;
  }
}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>

Solution
<nav aria-label="breadcrumb">
  <ol class="breadcrumb d-block text-truncate">
    <li class="breadcrumb-item d-inline-block"><a href="#">Home</a></li>
    <li class="breadcrumb-item d-inline-block"><a href="#">Child 1 Page Name</a></li>
    <li class="breadcrumb-item d-inline-block"><a href="#">Child 2 Page Name</a></li>
    <li class="breadcrumb-item d-inline-block"><a href="#">Child 3 Page Name</a></li>
    <li class="breadcrumb-item d-inline-block active" aria-current="page">Data of a long named page</li>
  </ol>
</nav>

Different Solution (suggestion)
<nav aria-label="breadcrumb" class="sugg">
  <ol class="breadcrumb">
    <li class="breadcrumb-item"><a href="#">Home</a></li>
    <li class="breadcrumb-item"><a href="#">Child 1 Page Name</a></li>
    <li class="breadcrumb-item"><a href="#">Child 2 Page Name</a></li>
    <li class="breadcrumb-item"><a href="#">Child 3 Page Name</a></li>
    <li class="breadcrumb-item active" aria-current="page">Data of a long named page</li>
  </ol>
</nav>
like image 140
caiovisk Avatar answered Nov 09 '25 19:11

caiovisk


Bootstrap breadcrumbs are display:flex. You can use flex-nowrap and then text-truncate on the items...

    <nav>
        <ol class="breadcrumb flex-nowrap">
            <li class="breadcrumb-item text-truncate"><a href="#">Home</a></li>
            <li class="breadcrumb-item text-truncate"><a href="#">Library</a></li>
            <li class="breadcrumb-item text-truncate"><a href="#">Longer text</a></li>
            <li class="breadcrumb-item text-truncate active" aria-current="page">Data</li>
        </ol>
    </nav>

Demo

like image 30
Zim Avatar answered Nov 09 '25 20:11

Zim



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!