早上好!
我正在使用材料设计侧导航在我的角度应用程序提供页面选择给用户。侧导航首先包含一个徽标,然后是用户可以选择的所有页面-如果他已登录。
问题:如果用户没有登录,则徽标是宽度最大的元素;这会混淆页面内容的位置。页面内容被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 of mat-sidenav-content计算错误。作为解决办法,我将其硬编码为230 in,但如果用户没有登录,这当然会在sidenav和内容之间产生一个丑陋的差距:
CSS:
@import '../../styles/colors.scss';
.logo-nav {
width: 100%;
text-align: center;
}
// Workaround
mat-sidenav-content {
margin-left: 230px !important;
}

如果用户已登录,则会出现较长的页名,从而使计算的left-margin正确。

发布于 2019-04-08 09:38:35
有多种方法可以解决这个问题。例如:
width属性应用于徽标图像。可以是您使用过的100%或230px。.logo-nav img {
min-width: 230px;
}width属性设置为sidenav本身。https://material.angular.io/components/sidenav/overview#setting-the-sidenav-39-s-size.mat-sidenav {
width: 230px;
}mat-nav-list的显示更改为具有column方向的flex。.mat-nav-list {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}https://stackoverflow.com/questions/55570057
复制相似问题