早上好!
我在Angular应用中使用了Material Design侧面导航,以向用户提供页面选择。侧面导航首先包含徽标,然后包含用户可以选择的所有页面-如果已登录。
问题: 如果用户未登录,则徽标是宽度最大的元素;这会混淆页面内容的位置。页面内容被sidenav溢出,因为页面内容与页面链接而不是徽标相对应。
您可以看到sidenav尊重徽标的宽度。内容不包含。
HTML:
<mat-card>
<mat-sidenav-container>
<mat-sidenav #drawer mode="side" opened role="navigation">
<mat-nav-list>
<div class="logo-nav">
<img src="./assets/MyLogo.png">
</div>
<a id="nav-home" mat-list-item routerLink='home' routerLinkActive="active">Home</a>
<a id="nav-schulauswahl" mat-list-item routerLink='page1' routerLinkActive="active" *ngIf="loggedIn">
Page 1
</a>
<a id="nav-schule-list" mat-list-item routerLink='page2' routerLinkActive="active" *ngIf="loggedIn">
Page 2 with very long name
</a>
<a id="nav-logout" mat-list-item (click)='logout()' routerLinkActive="active">Logout</a>
</mat-nav-list>
</mat-sidenav>
<mat-sidenav-content>
Some Content
</mat-sidenav-content>
</mat-sidenav-container>
</mat-card>
打字稿:
import { Component } from '@angular/core';
@Component({
selector: 'my-sidenav',
templateUrl: './sidenav.component.html',
styleUrls: ['./sidenav.component.scss']
})
export class SidenavComponent {
get loggedIn(): boolean {
return true; // <- Toogle this to see all page links
}
}
问题的核心:margin-left
中的mat-sidenav-content
计算错误。作为解决方法,我将其硬编码为230px,但是如果用户未登录,这当然会在sidenav和内容之间产生难看的差距:
CSS:
@import '../../styles/colors.scss';
.logo-nav {
width: 100%;
text-align: center;
}
// Workaround
mat-sidenav-content {
margin-left: 230px !important;
}
如果用户已登录,则会显示较长的页面名称,这将使left-margin
的计算正确。
答案 0 :(得分:1)
有多种方法可以解决此问题。例如:
width
属性应用于徽标图像。您可以使用100%
或230px
。.logo-nav img {
min-width: 230px;
}
width
属性。 https://material.angular.io/components/sidenav/overview#setting-the-sidenav-39-s-size .mat-sidenav {
width: 230px;
}
mat-nav-list
方向将flex
的显示更改为column
。 .mat-nav-list {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}