Search code examples
cssblazorsidebar

how to make body shifted to left when toggle button clicked in blazor


In blazor app When I click toggle button nav menu in sidebar, it only collapse sidebar and main body stays there. I want to make sidebar invisible and main body shifted left. So I wrote code in mainlayout.layzor as follows:

@inherits LayoutComponentBase
    @code {
      private bool collapseNavMenu = true;

      private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

      private void ToggleNavMenu() {
          collapseNavMenu = !collapseNavMenu;
      }
    }
<div class="page">
    <div class="sidebar">
        <div class="pos-f-t">           
            <nav class="navbar navbar-dark bg-blue top-row px-4">
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation" @onclick="ToggleNavMenu">
                    <span class="navbar-toggler-icon"></span>
                </button>
            </nav>

            <div class="@NavMenuCssClass">
                <ul class="nav flex-column">
                    <li class="nav-item px-3">
                        <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                            <span class="oi oi-home" aria-hidden="true"></span> Home
                        </NavLink>
                    </li>
                    <li class="nav-item px-3">
                        <NavLink class="nav-link" href="counter">
                            <span class="oi oi-plus" aria-hidden="true"></span> Counter
                        </NavLink>
                    </li>
                    <li class="nav-item px-3">
                        <NavLink class="nav-link" href="fetchdata">
                            <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
                        </NavLink>
                    </li>
                </ul>
            </div>
        </div>
    </div>

    <div class="main">
        <div class="top-row px-4">
            <a href="https://learn.microsoft.com/aspnet/" target="_blank">About</a>
        </div>

        <div class="content px-4">
            @Body
        </div>
    </div>
    </div>

Could someone help to make main @Body to shift left when nav bar is invisible?

thanks in advance. joon


Solution

  • I found that I can manage those in vanilla blazor app.

    I changed on mainlayout.lazor like:

    @inherits LayoutComponentBase
    
    <div class="top-row px-4">
    <button class="btn-primary" @onclick="ToggleNavMenu">
        <i class="material-icons">view_headline</i>
    </button>
    </div>
    <div class="page">
    <div class="sidebar" style="@leftMenuStyle">
        <NavMenu />
    </div>
    
    <div class="main">
        <div class="content px-4">
            @Body
        </div>
    </div>
    </div>
    

    Then I removed toggle button from MavMenu.razor like this.

    <div >
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <i class="material-icons">
                    accessibility
                </i> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <i class="material-icons">autorenew</i>
                Counter
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <i class="material-icons">autorenew</i> Fetch data
            </NavLink>
        </li>
    </ul>
    </div>