J'essaie de créer une barre de navigation à l'aide de matériau angulaire 2 qui s'effondre sur de petits écrans tels que les appareils mobiles et les tablettes.
Je n'ai pu que trouver md-button
mais non md-menu-bar
_ as in Angular).
Voici ce que j’ai utilisé pour construire mon responsive nav-bar
en utilisant Angular2 + Material 2 et flex-layout dans angular-cli
_ app.
(Veuillez visiter Installer Angular Matériel et Angular CDK) )
1) Installer flex-layout
npm install @angular/flex-layout -save
2) Incluez flex-layout dans votre app.module.ts
import {FlexLayoutModule} from "@angular/flex-layout";
3) importer
imports: [
BrowserModule,
FormsModule,
HttpModule,
RoutingModule,
FlexLayoutModule,
MyOwnCustomMaterialModule // Please visit the link above "Install Angular Material and Angular CDK", and check (Step 3: Import the component modules).
],
app.component.html
<mat-toolbar color="primary">
<button mat-button routerLink="/">
<mat-icon>home</mat-icon>
{{title}}</button>
<!-- This fills the remaining space of the current row -->
<span class="fill-remaining-space"></span>
<div fxLayout="row" fxShow="false" fxShow.gt-sm>
<button mat-button routerLink="/products">Products</button>
<button mat-button routerLink="/dashboard">Dashboard</button>
</div>
<button mat-button [mat-menu-trigger-for]="menu" fxHide="false" fxHide.gt-sm>
<mat-icon>menu</mat-icon>
</button>
</mat-toolbar>
<mat-menu x-position="before" #menu="matMenu">
<button mat-menu-item routerLink="/products">Products</button>
<button mat-menu-item routerLink="/dashboard">Dashboard</button>
<!--<button mat-menu-item>Help</button>-->
</mat-menu>
app.component.css
.fill-remaining-space {
/*This fills the remaining space, by using flexbox.
Every toolbar row uses a flexbox row layout. */
flex: 1 1 auto;
}
Remarque: pour tester, redimensionnez votre page.
jetez un oeil à flex-layout docs
Le manière la plus simple pour créer une barre de navigation réactive avec l'option Matériau utilisé avec Angular 6 CLI schémas .
(Si vous obtenez 'Collection "@ angular/material" ne peut pas être résolu' lorsque vous exécutez ng add @ angular/material, voir this )
Puis utilisez le composant généré <app-my-nav></app-my-nav>
Ajouter la balise ci-dessus à votre composant principal
Vue réactive sur un ordinateur de bureau:
Menu effondré réactif à basse résolution:
Cela a été vu à l'origine sur blog de Angular .
Voici ma façon préférée de créer une barre de navigation réactive dans Angular. Si vous utilisez Angular 6, assurez-vous d’utiliser une version 6.1+
Exemple de travail sur Stackblitz: https://stackblitz.com/edit/angular-v6xwte
Exemple sur un écran plus petit:
Exemple sur un écran plus grand:
Voici les étapes précises à suivre:
1) Installez les paquets nécessaires. Tapez votre terminal:
npm install --save @angular/material @angular/cdk @angular/animations
npm install @angular/flex-layout --save
2) Importez les modules nécessaires dans votre app.module.ts
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FlexLayoutModule } from '@angular/flex-layout';
import {
MatIconModule, MatButtonModule, MatSidenavModule, MatToolbarModule
} from '@angular/material';
N'oubliez pas d'ajouter ces modules au tableau imports ci-dessous.
3) Ajouter des icônes de matériaux de lien à votre index.html
Le lien doit aller avant tout contenu Angular.
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
4) Dans votre styles.css, ajoutez un thème Angular et définissez les marges sur 0%
@import "~@angular/material/prebuilt-themes/Indigo-pink.css";
body{
margin: 0%;
}
5) Ajouter du code HTML de barre d’outils dans votre app.component.html
<div style="height: 100vh;">
<mat-toolbar color="primary">
<div fxShow="true" fxHide.gt-sm="true">
<button mat-icon-button (click)="sidenav.toggle()">
<mat-icon>menu</mat-icon>
</button>
</div>
<a mat-button class="companyName" routerLink="/">
<span>Site name</span>
</a>
<span class="example-spacer"></span>
<div fxShow="true" fxHide.lt-md="true">
<a mat-button routerLink="/about-us">About us</a>
<a mat-button routerLink="/prices">Prices</a>
<a mat-button routerLink="/start-page">Start page</a>
<a mat-button routerLink="/offer">Offer</a>
<a mat-button routerLink="/contact">Contact</a>
</div>
</mat-toolbar>
<mat-sidenav-container fxFlexFill class="example-container">
<mat-sidenav color="primary" #sidenav fxLayout="column" mode="over" opened="false" fxHide.gt-sm="true">
<div fxLayout="column">
<a mat-button routerLink="/about-us">About us</a>
<a mat-button routerLink="/prices">Prices</a>
<a mat-button routerLink="/start-page">Start page</a>
<a mat-button routerLink="/offer">Offer</a>
<a mat-button routerLink="/contact">Contact</a>
</div>
</mat-sidenav>
<mat-sidenav-content fxFlexFill>
Awesome content
</mat-sidenav-content>
</mat-sidenav-container>
</div>
6) Donnez un style à la barre d’outils dans votre app.component.css
.companyName{
font-size: 150%;
}
div {
overflow: inherit;
}
a{
text-decoration: none;
font-size: 110%;
white-space: normal;
}
button{
font-size: 110%;
min-width: min-content;
}
.example-icon {
padding: 0 14px;
}
.example-spacer {
flex: 1 1 auto;
}
.mat-sidenav-content{
font-size: 200%;
text-align: center;
}
Ma tentative brutale de modifier la réponse avec une barre d’outils avec une implémentation de tiroir avec de nouveaux noms de composant à partir de angular-material 5.0.2
À faire: Nécessité de corriger les CSS de tous les liens d’en-tête. L'icône du menu doit être transparente.
https://responsivematerial2.stackblitz.io/
.mat-sidenav-container {
background: rgba(0, 0, 0, 0.08);
}
.blank-grow {
flex: 1 1 auto;
}
<mat-sidenav-container fullscreen>
<mat-sidenav #sidenav>
<mat-nav-list>
<a mat-list-item>
<mat-icon mat-list-icon>home</mat-icon>
<span mat-line>home</span>
</a>
<a mat-list-item>
<mat-icon mat-list-icon>backup</mat-icon>
<span mat-line>Backup</span>
</a>
</mat-nav-list>
</mat-sidenav>
<mat-toolbar color="primary">
<button mat-icon-button (click)="sidenav.open()" fxHide="false" fxHide.gt-sm>
<mat-icon>menu</mat-icon>
</button>
<span> Big Header</span>
<span class="blank-grow"></span>
<div fxLayout="row" fxShow="false" fxShow.gt-sm>
<a>
<mat-icon mat-list-icon>home</mat-icon>
<span mat-line>home</span>
</a>
<a>
<mat-icon mat-list-icon>backup</mat-icon>
<span mat-line>Backup</span>
</a>
</div>
</mat-toolbar>
</mat-sidenav-container>
Regardez le projet angular2-material
Sur github. Voici une liste des composants de conception de matériaux publiés jusqu'à présent:
https://www.npmjs.com/~angular2-material
De plus, je pense que vous cherchez soit md-sidenav
Ou md-toolbar
.
md-sidenav
- https://www.npmjs.com/package/@angular2-material/sidenav
md-toolbar
- https://www.npmjs.com/package/@angular2-material/toolbar
Remarque: Le projet est toujours en version alpha, ce qui signifie que des modifications radicales peuvent être apportées à leur API. Non recommandé d'utiliser en production.
Ma présentation, Créer des interfaces utilisateur d'entreprise que vos utilisateurs aimeront , couvre certains de ces modèles pour Angular. Les liens vers les exemples de StackBlitz figurent dans les notes du présentateur.
Barre de boutons réactif avec un menu Débordement: elle peut être placée dans ou sous le TopNav. https://stackblitz.com/edit/material-responsive-button-bar?file=app%2Fbutton-bar%2Fbutton-bar.component.ts
Menu dynamique TopNav imbriqué: Notez que ce menu n'est pas entièrement accessible. Plus de travail est nécessaire pour soutenir pleinement une bonne expérience. https://stackblitz.com/edit/dynamic-nested-topnav-menu?file=app/app.component.ts
Menu SideNav imbriqué dynamique: si vous utilisez le motif de transformation pour basculer votre TopNav en un SideNav sur un mobile, cela montre comment créer un menu SideNav dynamique. https://stackblitz.com/edit/dynamic-nested-sidenav-menu?file=app%2Fapp.component.html
Vous pouvez créer un menu responsive en utilisant mat-toolbar
, mat-sidenav
et flex-layout
_ (fxFlexFill
, ...).
J'ai modifié la réponse de user2662006 avec quelques corrections et optimisations de code ci-dessous. Notez que mes points StackOverflow sont actuellement trop bas pour me donner même le privilège de soumettre un commentaire, encore moins de le modifier.
1) Installer Angular Matériel et Angular CDK)
2) Installer flex-layout
npm install @angular/flex-layout -save
3) Incluez flex-layout dans votre app.module.ts
import {FlexLayoutModule} from "@angular/flex-layout";
4) Matériel lié à l'importation et modules flexibles
imports: [
...,
FlexLayoutModule,
MatToolbarModule,
MatIconModule,
MatMenuModule,
MatButtonModule,
],
app.component.html
<mat-toolbar color="primary">
<button mat-button routerLink="/">
<mat-icon>home</mat-icon>
{{title}}
</button>
<span class="fill-remaining-space"></span>
<div fxLayout="row" fxHide fxShow.gt-sm>
<button mat-button routerLink="/products">Products</button>
<button mat-button routerLink="/dashboard">Dashboard</button>
</div>
<button mat-button [mat-menu-trigger-for]="menu" fxShow fxHide.gt-sm>
<mat-icon>menu</mat-icon>
</button>
</mat-toolbar>
<mat-menu x-position="before" #menu>
<button mat-menu-item routerLink="/products">Products</button>
<button mat-menu-item routerLink="/dashboard">Dashboard</button>
</mat-menu>
app.component.css
.fill-remaining-space {
/*This fills the remaining space, by using flexbox.
Every toolbar row uses a flexbox row layout. */
flex: 1 1 auto;
}
Remarques: