html - Angular Navbar Menu - 将菜单项与子菜单对齐

标签 html css angular navbar

我正在尝试将菜单项与子菜单对齐。例如D Title有2个字幕,分别为D Subtitle 1D Subtitle 2,并且它们都有内部标题。但是当我将鼠标悬停在 D Subtitle 2 上时,内部菜单未与其对齐。我已经尝试过 innermenu 类的 relativeabsolute 但它不起作用。我怎样才能实现它?

源代码:https://stackblitz.com/edit/angular-ivy-tzksqa

enter image description here

navbar.component.html

<div class="header" *ngFor='let menu of navigationService.navMenu'>
    <div class="header-title" (mouseover)="navigationService.openMenu(menu)">
        <p>{{menu.title}}</p>
    </div>

    <div [hidden]="!menu.isOpen">
        <div class="submenu" *ngIf="menu.menu">
            <span *ngFor="let submenu of menu.menu">
                <div class="submenu-item" (mouseover)="navigationService.openSubMenu(submenu)">
                    <p>{{submenu.title}}</p>
                </div>
            </span>
        </div>
    </div>

    <div *ngIf="menu.menu">
        <span *ngFor="let submenu of menu.menu">
            <div [hidden]="!submenu.isOpen">
                <div class="innermenu" *ngIf="submenu.innerMenu">
                    <span *ngFor="let innerMenuItem of submenu.innerMenu">
                        <div class="innermenu-item">
                            <p *ngIf="innerMenuItem.title">{{innerMenuItem.title}}</p>
                        </div>
                    </span>
                </div>
            </div>
        </span>
    </div>
</div>

navbar.component.less

:host {
    position: absolute;
    top: 0;
    left: 0;
    width: 400x;
    background-color: black;
    color: white;
    border-bottom: 5px solid black;
    font-size: 20px;

    .header {
        display: inline-block;
        position: relative;
        height: 40px;
        white-space: nowrap;
        padding: 0 10px;

        .header-title {
            line-height: 40px;

            & > p {
                display: inline-block;
                margin: 0 4px 0 8px;
            }
        }
    }

    .submenu {
        display: inline-block;
        position: absolute;
        top: 40px;
        left: 0;
        width: 150px;
        background-color: black;
        padding: 6px 0;

        .submenu-item {
            position: relative;
            padding: 5px 8px;
            
            & > p {
                display: inline-block;
                margin: 0 4px 0 8px;
            }
        }
    }

    .innermenu {
        display: inline-block;
        position: absolute;
        top: 40px;
        left: 150px;
        width: 150px;
        padding: 6px 0;
        background-color: black;

        .innermenu-item {
            position: relative;
            padding: 5px 8px;

            & > p {
                display: inline-block;
                margin: 0 4px 0 8px;
            }
        }
    }
}

最佳答案

https://stackblitz.com/edit/angular-ivy-hgzrej

当您在父 div 中创建子级时,

absolute 将起作用。您的循环也被重复。我删除那部分。实现多级子菜单,您可以保持嵌套树结构。

注意:具有 position:absolute; 的元素相对于最近定位的祖先定位(而不是相对于视口(viewport)定位,如固定)。

变化:

 .innermenu {
  top:-2px;
} 
<div class="header" *ngFor='let menu of navigationService.navMenu'>
   <div class="header-title" (mouseover)="navigationService.openMenu(menu)">
      <p>{{menu.title}}</p>
   </div>
   <div [hidden]="!menu.isOpen">
      <div class="submenu" *ngIf="menu.menu">
         <span *ngFor="let submenu of menu.menu">
            <div class="submenu-item" (mouseover)="navigationService.openSubMenu(submenu)">
               <p>{{submenu.title}}</p>
               
                   
                     <div [hidden]="!submenu.isOpen">
                        <div class="innermenu" *ngIf="submenu.innerMenu">
                           <span *ngFor="let innerMenuItem of submenu.innerMenu">
                              <div class="innermenu-item">
                                 <p *ngIf="innerMenuItem.title">{{innerMenuItem.title}}</p>
                              </div>
                           </span>
                        </div>
                     </div>
                   
              
            </div>
         </span>
      </div>
   </div>
</div>

关于html - Angular Navbar Menu - 将菜单项与子菜单对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63040658/

相关文章:

jquery - 移动设备中的 Bootstrap 透明导航栏

html - MegaMenu 上的 CSS 过渡效果

javascript - 更改 Linkedin 公司简介插件宽度

node.js - 升级到最新的 Node 和 npm 后,npm i 无法工作

html - 当 css 过滤器应用于父转换时图像不显示

javascript - 如何在 Bootstrap 导航栏中为桌面和移动设备订购元素

javascript - Webpack SCSS 到 CSS 提取不起作用

javascript - 即使在使用 javascript 重新加载后也保留滚动条位置

javascript - 以 Angular 自动为页面的所有元素分配 ID

javascript - Angular 2 中的 Fetch.js 提示 CORS 请求