Доброе утро!
Я использую боковую навигацию Material Design в своем приложении Angular, чтобы предложить пользователю выбор страницы. Боковая навигация содержит сначала логотип, а затем все страницы, из которых пользователь может выбрать - если он вошел в систему.
Проблема:
Если пользователь не вошел в систему, логотип является элементом с самой большой шириной; и это сбивает с толку позиционирование содержимого страницы. Содержание страницы переполняется 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
правильным.