Search code examples
bootstrap-4zendesk

How to have one div aligned to the left in a bootstrap navbar


I'm new to bootstrap and I am trying to create a navbar for a zendesk help portal. Zendesk uses their own templating language called Handlebars . Handlebars is a simple templating engine that lets you insert or manipulate content on a page at render-time rather than at design-time (pretty much like Moustache if you are familiar with it). While all elements in this navbar are aligned to the right, I want only the search bar to be aligned to the left <div class="search-container">. Is there a bootstrap class that will let me "float left" next to the logo this search container while keeping everything else intact and responsive as before?

    <nav class="navbar navbar-expand-lg navbar-light">
        <div class="logo">
            {{#link 'help_center'}}
            <img src="{{settings.logo}}" alt="{{t 'home_page' name=help_center.name}}">
            {{/link}}
        </div>

        <button type="button" class="navbar-toggler second-button" data-toggle="collapse" data-target="#navbarCollapse"
            aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
            <div class="animated-icon2"><span></span><span></span><span></span><span></span></div>
        </button>



        <div class="collapse navbar-collapse" id="navbarCollapse">
            <div class="navbar-nav ml-auto">
                <div class="search-container">
                    <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" focusable="false" viewBox="0 0 12 12"
                        class="search-icon">
                        <circle cx="4.5" cy="4.5" r="4" fill="none" stroke="currentColor" />
                        <path stroke="currentColor" stroke-linecap="round" d="M11 11L7.5 7.5" />
                    </svg>
                    {{search scoped=settings.scoped_kb_search submit=false}}
                </div>


                <a href="https://" class="nav-item nav-link">Help Portal</a>
                {{#if alternative_locales}}
                <div class="nav-item dropdown">
                    <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">{{current_locale.name}}</a>
                    <div class="dropdown-menu">
                        {{#each alternative_locales}}
                        <a href="{{url}}" class="dropdown-item" dir="{{direction}}" rel="nofollow"
                            role="menuitem">{{name}}</a>{{/each}}
                    </div>
                </div>{{/if}}
                {{#if signed_in}}
                <div class="dropdown">
                    <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton"
                        data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        {{user_avatar class="user-avatar"}}
                        {{user_name}}
                    </button>
                    <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                        <a href="#" class="dropdown-item">{{link "my_activities" role="menuitem"}}</a>
                        <a href="#" class="dropdown-item">{{my_profile role="menuitem"}}</a>
                        <a href="#" class="dropdown-item password-item">{{change_password role="menuitem"}}</a>
                        <a href="#" class="dropdown-item">{{link "sign_out" role="menuitem"}}</a>
                    </div>
                </div>

                {{else}}
                <div class="sign-in-div">
                    {{#link "sign_in" class="sign-in"}}
                    {{t 'sign_in'}}
                    {{/link}}
                </div>
                {{/if}}


            </div>

        </div>


    </nav>


</div> ```

 

 

Solution

  • You have to move your <div class="search-container"> outside the <div class="navbar-nav ml-auto">, because ml-auto will force the navbar elements to be aligned on the right. Read more about navbar-nav's behavior here: https://getbootstrap.com/docs/4.5/components/navbar/#supported-content

    For the navbar, it seems to be enough to place this element inside <div class="collapse navbar-collapse" id="navbarCollapse">.

    Your code should afterwards look like this:

    <nav class="navbar navbar-expand-lg navbar-light">
        <div class="logo">
            {{#link 'help_center'}}
            <img src="{{settings.logo}}" alt="{{t 'home_page' name=help_center.name}}">
            {{/link}}
        </div>
    
        <button type="button" class="navbar-toggler second-button" data-toggle="collapse" data-target="#navbarCollapse"
            aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
            <div class="animated-icon2"><span></span><span></span><span></span><span></span></div>
        </button>
    
    
    
        <div class="collapse navbar-collapse" id="navbarCollapse">
            <div class="search-container">
                <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" focusable="false" viewBox="0 0 12 12"
                        class="search-icon">
                    <circle cx="4.5" cy="4.5" r="4" fill="none" stroke="currentColor" />
                    <path stroke="currentColor" stroke-linecap="round" d="M11 11L7.5 7.5" />
                </svg>
                {{search scoped=settings.scoped_kb_search submit=false}}
            </div>
            <div class="navbar-nav ml-auto">
    
                <a href="https://" class="nav-item nav-link">Help Portal</a>
                {{#if alternative_locales}}
                <div class="nav-item dropdown">
                    <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">{{current_locale.name}}</a>
                    <div class="dropdown-menu">
                        {{#each alternative_locales}}
                        <a href="{{url}}" class="dropdown-item" dir="{{direction}}" rel="nofollow"
                            role="menuitem">{{name}}</a>{{/each}}
                    </div>
                </div>{{/if}}
                {{#if signed_in}}
                <div class="dropdown">
                    <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton"
                        data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        {{user_avatar class="user-avatar"}}
                        {{user_name}}
                    </button>
                    <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                        <a href="#" class="dropdown-item">{{link "my_activities" role="menuitem"}}</a>
                        <a href="#" class="dropdown-item">{{my_profile role="menuitem"}}</a>
                        <a href="#" class="dropdown-item password-item">{{change_password role="menuitem"}}</a>
                        <a href="#" class="dropdown-item">{{link "sign_out" role="menuitem"}}</a>
                    </div>
                </div>
    
                {{else}}
                <div class="sign-in-div">
                    {{#link "sign_in" class="sign-in"}}
                    {{t 'sign_in'}}
                    {{/link}}
                </div>
                {{/if}}
    
    
            </div>
    
        </div>
    
    
    </nav>
    

    I also created a running fiddle to visualize the solution:

    Solution with left aligned search

    Showing that the navbar still works:

    Solution showing the responsiveness

    Good luck!