Comment obtenir une hauteur totale sidenav avec Angulaires-le Matériel
Je suis en utilisant Angulaires-le Matériel et ont mis en place un SideNav menu. Lorsque la taille de l'écran est petit, le menu est caché et quand on clique sur le Menu basculer bouton, le menu se déploie à partir de la gauche, avec une pleine page de hauteur. Lorsque l'écran est plus grand, le menu semble être fixé sur le côté gauche, mais pas à pleine hauteur de la page.
Comment puis-je faire le menu fixe semble être la pleine hauteur de la page.
J'ai été jouer avec le css et l'autre md attributs, mais juste ne peux pas savoir comment.
<div ng-controller="appCtrl" layout="vertical" layout-fill>
<md-toolbar class="md.medium-tall app-toolbar">
<div class="md-toolbar-tools" ng-click="toggleMenu()">
<button class="menu-icon" hide-sm aria-label="Toggle Menu">
<md-icon icon="img/icons/ic_menu_24px.svg">
<object class="md-icon" data="img/icons/ic_menu_24px.svg"></object>
</md-icon>
</button>
<h2>
<span>Dev.Material</span>
</h2>
</div>
</md-toolbar>
<section layout="horizontal" flex>
<md-sidenav class="md-sidenav-left md-whiteframe-z2" component-id="menu" is-locked-open="$media('sm')">
<md-toolbar md-theme="purple">
<h1 class="md-toolbar-tools">Sidenav Left</h1>
</md-toolbar>
<md-content class="md-padding" ng-controller="menuCtrl">
<p>
This sidenav is locked open on your device. To go back to the default behavior,
narrow your display.
</p>
</md-content>
</md-sidenav>
<md-content flex class="md-padding">
Some content !!
</md-content>
et le contrôleur:
(function () {
'use strict';
var controllerId = 'appCtrl';
angular.module('app').controller(controllerId,
['$scope', '$timeout', '$mdSidenav', appCtrl]);
function appCtrl($scope, $timeout, $mdSidenav) {
var vm = this;
$scope.toggleMenu = function() {
$mdSidenav('menu').toggle();
};
};
})();
(function () {
'use strict';
var controllerId = 'menuCtrl';
angular.module('app').controller(controllerId,
['$scope', '$timeout', '$mdSidenav', menuCtrl]);
function menuCtrl($scope, $timeout, $mdSidenav) {
var vm = this;
$scope.close = function() {
$mdSidenav('menu').close();
};
};
})();
- Vous voudrez peut-être inclure des navigateurs vous vous attendez à du soutien ici... il y a sans doute des solutions à l'aide de vh (fenêtre d'affichage de la hauteur), mais ce n'est pas disponible dans les anciennes versions de CSS. Vous pouvez également utiliser une directive qui surveille tous les événements de redimensionnement et de capture de la mise à jour de la hauteur de l'élément en utilisant offsetHeight ou peut-être l'écran.la hauteur et la stocke quelque part (dans une valeur ou d'un service à l'usine ou quoi que ce soit)
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème avec angulaires-le matériel 0.6.0 rc1. (J'ai utilisé le code de la site de démonstration).
Le problème ne vient pas de la angulaires-le matériel de code, mais de la part du parent css conteneur de votre page qui n'est pas toute la hauteur.
Votre page doit avoir une structure comme :
Le problème vient de la ng-portée de la classe qui n'est pas toute la hauteur. Dans mon cas, j'ai juste copier /coller le code de la site de démonstration et ajouter cette im mon cutom fichier css
Le résultat est d'une hauteur totale sidenav fonctionne très bien dans les deux immobilisé ouverte et débloquer de mode.
layout="column"
au lieu delayout="vertical"
?layout="column"
ne fonctionne plus. Avec la nouvelle version de la angulaires-le matériel,layout="vertical"
oulayout="horizontal"
doit être utilisé.Cela a fonctionné pour moi...
1) l'enveloppe de votre sidenav dans un div qui a un layout="vertical" comme si...
2) Ajouter "flex" dans votre sidenav de sorte qu'il sera flex pour remplir la pleine hauteur de la page.
is-locked-open="$mdMedia('sm')"
md-is-locked-open
àtrue
, le sidenav étiré, la hauteur minimale requise pour ses enfants. Je n'ai pas pensé à utiliserflex
.J'ai résolu ce problème en ajoutant une classe à mon sidenav avec
md-sidenav { position:fixed }
etmd-backdrop.md-opaque { position:fixed }
était une rapide solution facile pour moi. Merci @phil_IgrEssayez d'ajouter
layout-fill
attribut principalmd-content
balise qui aui-view
ensemble d'attributs.J'ai eu un Problème similaire. Réglage du style"height: 100vh;" a fonctionné pour moi.Vous pouvez également utiliser une classe.
layout="vertical" peut également être utilisé - il n'a pas d'effet significatif dans mon contexte.
Vous devez utiliser
flex
à la fois la barre latérale et le contenu, ainsi que dans le conteneur. De cette façon, vous n'avez pas besoin d'utiliser d'autres styles.Voici votre code fonctionne correctement (à noter que j'ai mis à jour certaines parties de la dernière Angulaire du Matériel version):
Angular Material 1.0.5
), aucun des autres ci-dessous a travaillé avec les plus récentes mises à jour.Il suffit de créer un sidenav à l'extérieur d'un
<div>
. Par exemple, juste après la<body>
balise, vous pouvez écrire:Ce code vous donnera entièrement verticale de la barre latérale.
Aucun des ci-dessus a fonctionné pour moi pour l'angle matériel ver: 1.1.0-RC.5, donc j'ai fait comme ceci :
Le code ci-dessus est presque la même que celle qui est donnée dans l'angle de matériel de docs et de la Js fichier est également semblable à celui donné dans les docs 🙂
EDIT:
Plus de références:
1. https://gist.github.com/epelc/6aa345f4496776569830. Corriger la valeur dépréciée de
$media('gt-lg')
à$mdMedia('gt-sm')
2. https://github.com/angular/material/issues/1092
Le problème ci-dessus n'a été résolue qu'en modifiant le css et pas besoin de changer de code.
Solution
.ng-champ { height: 100%; }
Test
J'ai essayé beaucoup de choses pour résoudre ce problème, et j'ai finalement été en mesure de corriger en ajoutant la uiview directement à mon menu composant:
<menu uiview layout="column" class="menu"> </menu>
Je n'ai pas essayer les autres bugs avec les directives mais j'ai utilisé cette simple css et a obtenu ce dont j'avais besoin. Toutes les corrections ou des conseils sur ce sujet css serait la bienvenue.