2

This is a question similar to this one, but it is for Bootstrap 4.

I am not able to add right-justified entries on the BS4 navbar that stay visible both when collapsed and not collapsed. I spent one full afternoon without success.

This is my goal:

enter image description here

Here my current code (that works only when not collapsed):

<nav class="navbar navbar-light navbar-expand-xl border-bottom mainmenu sticky-top">
    <a class="navbar-brand text-capitalize text-blur" href="/">
        <img class="mr-1" src="/images/logo/favicon-32x32.png" alt="Logo">
        <span class="">Portami in Pista</span>
    </a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#myTopMenu"
        aria-controls="collapsableTopMen" aria-expanded="false" aria-label="[Menu]">
        <span class="sr-only">[Menu]</span>
        <span class="navbar-toggler-icon" title="[Menu]"/>
    </button>

    <div class="collapse navbar-collapse" id="collapsableTopMen">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item">
                <a class="nav-link" href="/Schools/">
                    <i class="fa fa-motorcycle fa-rotate-315 text-danger" aria-hidden="true"/>
                    <span class="text-blur-danger">PiP Reparto Corse</span>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="/Tracks/">
                    <i class="fa fa-flag-checkered text-primary" aria-hidden="true"/>
                    <span>Piste</span>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="/Blog/le-guide-del-giovedi/">
                    <i class="fa fa-mortar-board text-primary" aria-hidden="true"/>
                    <span>Le guide del gioved&#236;</span>
                </a>
            </li>
        </ul>
        <ul class="navbar-nav ml-auto">
            <!- START of section should be always visible -->
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownLang" role="button"
               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    <i class="famfamfam-flags it" title="Italiano"/>
                    <span class="d-inline d-xl-none">Italiano</span>
                </a>
                <div class="dropdown-menu" aria-labelledby="navbarDropdownLang">
                    <a class="dropdown-item" href="/AbpLocalization/ChangeCulture?cultureName=en&returnUrl=/">
                        <i class="famfamfam-flags gb" aria-hidden="true"/>
                        <span class="">English</span>
                    </a>
                </div>
            </li>
            <!- END of section should be always visible -->

            <li class="nav-item">
                <a class="nav-link" href="/Account/Login"><i class="fa fa-sign-in"/> Log in</a>
            </li>
        </ul>
    </div>
</nav>
Gianpiero
  • 3,349
  • 1
  • 29
  • 42

2 Answers2

1

Since you're using Bootstrap 4, this answer is more relevant to your question:
https://stackoverflow.com/a/41513784/171456 (see the last part)

The part that you always want to keep visible needs to be separate from any of the collapsible parts. Then use the order-* classes to position the items as desired:

Demo: https://codeply.com/p/ylDhhZtpiH

<nav class="navbar navbar-light navbar-expand-xl border-bottom mainmenu sticky-top justify-content-start">
    <a class="navbar-brand text-capitalize text-blur" href="/">
        <img class="mr-1" src="//placehold.it/32" alt="Logo">
        <span class="">Portami in Pista</span>
    </a>
    <button class="navbar-toggler order-2 ml-1" type="button" data-toggle="collapse" data-target=".collapsable" aria-controls="collapsableTopMen" aria-expanded="false" aria-label="[Menu]">
        <span class="sr-only">[Menu]</span>
        <span class="navbar-toggler-icon" title="[Menu]"></span>
    </button>
    <!-- 1st collapse menu -->
    <div class="collapse navbar-collapse collapsable flex-grow-0 flex-xl-grow-1 order-last" id="collapsableTopMen">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item">
                <a class="nav-link" href="/Schools/">
                    <i class="fa fa-motorcycle fa-rotate-315 text-danger" aria-hidden="true"></i>
                    <span class="text-blur-danger">PiP Reparto Corse</span>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="/Tracks/">
                    <i class="fa fa-flag-checkered text-primary" aria-hidden="true"></i>
                    <span>Piste</span>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="/Blog/le-guide-del-giovedi/">
                    <i class="fa fa-mortar-board text-primary" aria-hidden="true"></i>
                    <span>Le guide del gioved&#236;</span>
                </a>
            </li>
        </ul>
    </div>
    <!-- always visible portion -->
    <ul class="navbar-nav order-1 order-xl-last ml-auto">
        <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownLang" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                <i class="fas fa-flag it" title="Italiano"></i>
                <span class="d-inline d-xl-none">Italiano</span>
            </a>
            <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownLang">
                <a class="dropdown-item" href="#">
                    <i class="fas fa-flag-usa gb" aria-hidden="true"></i>
                    <span class="">English</span>
                </a>
            </div>
        </li>
    </ul>
    <!-- 2nd collapse menu -->
    <div class="collapse navbar-collapse collapsable flex-grow-0 order-last">
        <ul class="navbar-nav">
            <li class="nav-item">
                <a class="nav-link" href="/Account/Login"><i class="fa fa-sign-in"></i> Log in</a>
            </li>
        </ul>
    </div>
</nav>

https://codeply.com/p/ylDhhZtpiH

Carol Skelly
  • 351,302
  • 90
  • 710
  • 624
  • Wow! Your a real master of bootstrap 4! Thank you! – Gianpiero Mar 11 '20 at 17:53
  • I did a small important fix to your very nice code: the" always visible" portion of the menu did not overlap the whole menu when it is collapsed. So I added a `.navbar-always-overlapped` class to fix it. See https://www.codeply.com/p/9deLYTGblZ I'd suggest you to EDIT your the answer – Gianpiero Mar 12 '20 at 09:47
0

I did a small important fix to the good answer from Zim.

I fixed the "always visible" portion of the menu as he did not overlap the whole menu when it was collapsed.

Adding a custom .navbar-always-overlapped class, fixed it.

<nav class="navbar navbar-light navbar-expand-lg border-bottom mainmenu sticky-top justify-content-start">
    <!-- same code from Zim here>
    ...

    <!-- always visible portion. Note the 'navbar-always-overlapped' -->
    <ul class="navbar-nav navbar-always-overlapped order-1 order-lg-last ml-auto">
        <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownLang" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                <i class="fas fa-flag it" title="Italiano"></i>
                <span class="d-inline d-lg-none">Italiano</span>
            </a>
            <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownLang">
                <a class="dropdown-item" href="#">
                    <i class="fas fa-flag-usa gb" aria-hidden="true"></i>
                    <span class="">English</span>
                </a>
            </div>
        </li>
    </ul>
    <!-- 2nd collapse menu -->
    <div class="collapse navbar-collapse collapsable flex-grow-0 order-last">
        <ul class="navbar-nav">
            <li class="nav-item">
                <a class="nav-link" href="/Account/Login"><i class="fa fa-sign-in"></i> Log in</a>
            </li>
        </ul>
    </div>
</nav>

and the code for .navbar-always-overlapped:

.navbar-always-overlapped .dropdown-menu {
    position: absolute !important;
}

See https://codeply.com/p/9deLYTGblZ

Gianpiero
  • 3,349
  • 1
  • 29
  • 42