简体   繁体   English

Bootstrap中的子菜单下拉列表

[英]Submenu dropdown layout in Bootstrap

I'm new to using Bootstrap and JS isn't my strongest language so I'm struggling to achieve what I'm looking for. 我是使用Bootstrap的新手,JS不是我最强的语言,所以我很难实现我正在寻找的东西。

I have a menu for a site being generated with php like so: 我有一个用PHP生成的网站菜单,如下所示:

<?php
$products_menu = '';
$sql1 = "SELECT * FROM headings";
$stmt1 = DB::run($sql1);
while($row = $stmt1->fetch(PDO::FETCH_ASSOC)){
    $heading_id = $row['id'];
    $heading = $row['heading'];

    $products_menu .= '<li class="dropdown-item d-block">';
    $products_menu .= '<a class="submenu-item" href="store#'.$heading_id.'">'.$heading.'</a>';
    $products_menu .= '<ul class="dropdown-submenu">';

    $params = [$heading_id];
    $sql = "SELECT categories.category,categories.url FROM categories INNER JOIN category_headings on categories.id=category_headings.category WHERE category_headings.heading=?";
    $stmt = DB::run($sql,$params);
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $category = $row['category'];
        $url = $row['url'];

        $products_menu .= '<li class="d-block"><a href="category/'.$url.'">'.$category.'</a></li>';
    }
    $products_menu .= '</ul>';
    $products_menu .= '</li>';
}
?>

<nav class="navbar navbar-expand-lg">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <img src="media/icons/menu.png" alt="Lifting365 Menu" class="icon">
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item text-center"><a class="nav-link nav" href="">Home</a></li>
            <li class="nav-item text-center dropdown">
                <a class="nav-link nav dropdown-toggle" href="#" data-toggle="dropdown" aria-expanded="false">Products</a>
                <ul class="dropdown-menu">
                    <?php echo $products_menu; ?>
                </ul>
            </li>
            <li class="nav-item text-center"><a class="nav-link nav" href="blog">Blog</a></li>
            <li class="nav-item text-center"><a class="nav-link nav" href="about">About</a></li>
            <li class="nav-item text-center"><a class="nav-link nav" href="contact">Contact</a></li>
        </ul>
    </div>
</nav>

在此输入图像描述

I want the first dropdown menu to be positioned outside of the parent header. 我希望第一个下拉菜单位于父标题之外。

Then each item in the first dropdown should also be clickable to bring you to that heading on the store page. 然后,第一个下拉列表中的每个项目也应该是可点击的,以带您到商店页面上的该标题。

Hovering on the first dropdown menu items should show its submenu to the side. 悬停在第一个下拉菜单项上应该显示其子菜单。

Edit 编辑

I didn't want to post the whole HTML being generated as its huge so I cut out an example of the first few headings and just the first few categories from each one 我不想将生成的整个HTML发布为巨大的,所以我删除了前几个标题的示例,只列出了每个标题的前几个类别

<div class="page-header header-bottom">
    <div class="container">
        <div class="row">

            <div class="col-lg-4 col-md-5 col-sm-5 col-xs-5">
                <a href="/"><img src="media/logo.png" alt="Logo" class="logo"></a>
            </div>

            <div class="col-lg-4 col-md-5 col-sm-5 col-xs-5">
                <form class="form-inline search">
                    <div class="input-group">
                        <input class="form-control" type="text" placeholder="Search" aria-label="Search">
                            <div class="input-group-append">
                            <button class="btn btn-default bg-orange" type="submit">
                            <img src="media/icons/search.png" alt="search icon" class="icon">
                            </button>
                        </div>
                    </div>
                </form>         
            </div>

            <div class="col-lg-4 col-md-2 col-sm-2 col-xs-2">

                <nav class="navbar navbar-expand-lg">
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <img src="media/icons/menu.png" alt="Menu" class="icon">
                    </button>
                    <div class="collapse navbar-collapse" id="navbarSupportedContent">
                        <ul class="navbar-nav mr-auto">
                            <li class="nav-item text-center"><a class="nav-link nav" href="">Home</a></li>
                            <li class="nav-item text-center dropdown">
                                <a class="nav-link nav dropdown-toggle" href="#" data-toggle="dropdown" aria-expanded="false">Products</a>
                                <ul class="dropdown-menu">
                                    <li class="dropdown-item d-block">
                                        <a class="submenu-item" href="store#1">Lifters &amp; Accessories</a>
                                        <ul class="dropdown-submenu">
                                            <li class="d-block"><a href="category/Hooks-Weld-On-Hooks">Hooks - Weld On Hooks</a></li>
                                            <li class="d-block"><a href="category/Manhole-Cover-Lifters">Manhole Cover Lifters</a></li>
                                            <li class="d-block"><a href="category/Salt-Spreaders">Salt Spreaders</a></li>
                                            <li class="d-block"><a href="category/ID-Tags">ID Tags</a></li>
                                        </ul>
                                    </li>
                                    <li class="dropdown-item d-block">
                                        <a class="submenu-item" href="store#2">Lifting &amp; Measurement Attachments</a>
                                        <ul class="dropdown-submenu">
                                            <li class="d-block"><a href="category/Big-Bag-Lifters">Big Bag Lifters</a></li>
                                            <li class="d-block"><a href="category/Crane-Slung-Safety-Cages">Crane Slung Safety Cages</a></li>
                                            <li class="d-block"><a href="category/Gas-Bottle-Handlers">Gas Bottle Handlers</a></li>
                                            <li class="d-block"><a href="category/Weighers-Crane-Weighers">Weighers - Crane Weighers</a></li>
                                        </ul>
                                    </li>
                                    <li class="dropdown-item d-block">
                                        <a class="submenu-item" href="store#3">Forklift &amp; Crane Attachments</a>
                                        <ul class="dropdown-submenu">
                                            <li class="d-block"><a href="category/Forklift-Magnetic-Sweepers">Forklift Magnetic Sweepers</a></li>
                                            <li class="d-block"><a href="category/Wheelie-Bin-Tippers">Wheelie Bin Tippers</a></li>
                                            <li class="d-block"><a href="category/Forklift-Safety-Cages">Forklift Safety Cages</a></li>
                                            <li class="d-block"><a href="category/Fork-Extensions">Fork Extensions</a></li>
                                            <li class="d-block"><a href="category/Forklift-Base-Emptying-Stillages">Forklift Base Emptying Stillages</a></li>
                                        </ul>
                                    </li>
                                    <li class="dropdown-item d-block">
                                        <a class="submenu-item" href="store#4">Forklift Hooks &amp; Jibs</a>
                                        <ul class="dropdown-submenu">
                                            <li class="d-block"><a href="category/Forklift-Mounted-Hook-Fixed">Forklift Mounted Hook - Fixed</a></li>
                                            <li class="d-block"><a href="category/Forklift-Mounted-Hook-Adjustable">Forklift Mounted Hook - Adjustable</a></li>
                                            <li class="d-block"><a href="category/Crane-Spreader-Beams">Crane Spreader Beams</a></li>
                                            <li class="d-block"><a href="category/Forklift-Jibs">Forklift Jibs</a></li>
                                        </ul>
                                    </li>
                                </ul>
                            </li>
                            <li class="nav-item text-center"><a class="nav-link nav" href="blog">Blog</a></li>
                            <li class="nav-item text-center"><a class="nav-link nav" href="page/About">About Us</a></li>
                            <li class="nav-item text-center"><a class="nav-link nav" href="contact">Contact Us</a></li>
                        </ul>
                    </div>
                </nav>
            </div>
        </div>
    </div>
</div>

I have put this together with Bootstrap 4 and some custom CSS: 我把它与Bootstrap 4和一些自定义CSS放在一起:

 .navbar-nav a { color: #fff !important; } .navbar-nav a:hover { color: #ddd !important; } .navbar-nav .submenu.level-2 { padding-left: 1.5rem; } .navbar-nav .dropdown-toggle::after { display: none; } @media (min-width: 768px) { .navbar-nav .dropdown .submenu { position: absolute; top: 100%; display: none; } .navbar-nav .dropdown .submenu li { display: block; } .navbar-nav .dropdown .submenu li a { display: block; white-space: nowrap; text-decoration: none; } .navbar-nav .dropdown .submenu.level-1 { right: 0; left: auto; } .navbar-nav .dropdown .submenu.level-2 { padding-left: 0; top: 0; right: 100%; left: auto; } .navbar-nav .dropdown:hover .submenu.level-1 { display: block; } .navbar-nav .dropdown:hover .submenu.level-1 li { position: relative; } .navbar-nav .dropdown:hover .submenu.level-1 li:hover .submenu.level-2 { display: block; } .navbar-nav .dropdown-toggle::after { display: inline-block; } } 
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <nav class="navbar navbar-expand-md bg-dark navbar-dark"> <a class="navbar-brand" href="#">Logo</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav ml-auto"> <li class="nav-item"> <a class="nav-link" href="#">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Career</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#">Info</a> <ul class="list-unstyled bg-dark text-light submenu level-1"> <li><a class="nav-link" href="#">About</a> <ul class="list-unstyled bg-dark text-light submenu level-2"> <li><a class="nav-link" href="#">Mission</a></li> <li><a class="nav-link" href="#">Vision</a></li> </ul> </li> <li><a class="nav-link" href="#">Clients</a></li> <li><a class="nav-link" href="#">Contact Us</a></li> </ul> </li> </ul> </div> </nav> 

Here is a jsFiddle with SCSS instead of plain CSS. 这是一个带有SCSS而不是纯CSS的jsFiddle

I don't know how close it is to the result you are looking for, but I hope it helps. 我不知道你要找的结果有多接近,但我希望它有所帮助。

As per my understanding, you are looking for nested submenu. 根据我的理解,您正在寻找嵌套的子菜单。 If, yes below is the solution for same. 如果,以下是同样的解决方案。

 .dropdown-submenu { position: relative; } .dropdown-submenu:hover>.dropdown-menu { top: 0; left: -10rem; /* 10rem is the min-width of dropdown-menu */ margin-top: -6px; display:block } .dropdown:hover>.dropdown-menu{ display:block } /* rotate caret on hover */ .dropdown-menu>li>a:hover:after { text-decoration: underline; transform: rotate(-90deg); } 
 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> </head> <body> <nav class="navbar navbar-expand-md navbar-light bg-light"> <a class="navbar-brand pb-2" href="#">Navbar</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavDropdown"> <ul class="navbar-nav ml-auto"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Dropdown </a> <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink"> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li class="dropdown-submenu"><a class="dropdown-item dropdown-toggle" href="#">Submenu wider text</a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Submenu</a></li> <li><a class="dropdown-item" href="#">Submenu0</a></li> <li class="dropdown-submenu"><a class="dropdown-item dropdown-toggle" href="#">Submenu 1</a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Subsubmenu1</a></li> <li><a class="dropdown-item" href="#">Subsubmenu1</a></li> </ul> </li> <li class="dropdown-submenu"><a class="dropdown-item dropdown-toggle" href="#">Submenu 2</a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Subsubmenu2</a></li> <li><a class="dropdown-item" href="#">Subsubmenu2</a></li> </ul> </li> </ul> </li> </ul> </li> </ul> </div> </nav> </body> </html> 
Source Skelly Codeply 来源Skelly Codeply

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM