Home > Back-end >  Bootstrap button in nav horizontal menu causes text misalignment
Bootstrap button in nav horizontal menu causes text misalignment

Time:09-23

I have some code that was substantially produced by ASP.NET Core scaffolding. I'm a CSS novice. The problem is that in this menu there is a button that causes the option to its left to be slightly higher than the other options. The button is Logout and the option to its left is Profile. Through trial and error I have narrowed the cause to the btn class on Logout.

Why is this happening and what is the fix?

Here's a web page that replicates the problem.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <title>Tracker1</title>
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav">
                        <li class="nav-item">
                            <a id="manage" class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Profile</a>
                        </li>
                        <li class="nav-item">
                            <a id="logout" class="nav-link btn btn-link text-dark">Logout</a>
                        </li>
                    </ul>
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
</body>
</html>

CodePudding user response:

Home is not affected because it is in another unordered HTML list, if you remove </ul><ul class="navbar-nav flex-grow-1"> between the second and third nav-item then you will see Home not aligned with Logout as you can see in the following snippet:

To solve the issue you need all the nav-item elements to be in the same unordered HTML list and then if the classes have borders like in this case where the btn class has, you should make all the nav-item elements have the same classes. As @cursorrux said Logouthas a transparent border and all the others don't.

Review the following code:

CodePudding user response:

There's default 1PX View on Codepen

Snippet:


Here, short code snippet where 3rd and 4th menu doesn't have btn class but 4th menu have flex-grow css to their parent container which lead 4th menu to occupy space and looks similar to the 2nd menu :


Now here, 3rd and 4th menus doesn't have btn class and also 4th menu doesn't have flex-grow-1 bootstrap css class to their parent <ul> element. In this case, 4th menu doesn't occupy additional space and looks similar to the 1st and 3rd menu irrespective of wrapping into another <ul></ul> element :

  • Related