Вчера я столкнулся с проблемой CSS, которая, похоже, связана с mat-drawer
и Angulars router-outlet
. У меня есть полный лист flexbox с двумя детьми. mat-toolbar
вверху и пользовательский компонент app-sidenav
внизу. Это отлично работает, и app-sidenav заполняет остальную часть страницы, так как flexbox растягивается. Посмотрите на эту упрощенную настройку, прежде чем продолжить:
<div class="flex">
<mat-toolbar></mat-toolbar>
<app-sidenav></app-sidenav>
</div>
Связанный css
.flex { width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: stretch; }
mat-toolbar { flex: 0 0 auto; }
app-sidenav { flex: 1 1 0; }
В компоненте app-sidenav теперь у меня есть следующий шаблон
<mat-drawer-container>
<mat-drawer></mat-drawer>
<mat-drawer-content>
<main><router-outlet></router-outlet></main>
</mat-drawer-content>
</mat-drawer-container>
И связанные стили
mat-drawer-container, mat-drawer-content { display: block; height: 100%; }
main { height: 100%; overflow-y: auto; }
Это прекрасно работает, и высота подходит, если нет содержимого, превышающего высоту app-sidenav
. Полоса прокрутки появляется на внешнем компоненте flexbox, а не на теге main
. Я также проверил !important
на высотах, а также 100vh
, но безуспешно. Итак, как мне заставить работать overflow-y
в основном теге?
Я почти уверен, что есть простой трюк, но я не могу понять это. Спасибо за вашу помощь. Ура !
Редактировать:
Я сделал stackblitz для этой проблемы. Когда вы переходите к компоненту ciao , вы видите, что полоса прокрутки появляется в корне документа, а не в основном теге.
3 ответа
В дополнение к рабочему решению @ Sakkeer я нашел другой способ, не взламывая атрибут position, но с использованием flex. Просто добавьте (не заменяйте) следующие правила CSS к существующим стилям.
app-sidenav { display: flex; }
mat-drawer-container { flex: 1 1 auto; }
<mat-drawer-container autosize style="position: absolute;right: 0px;left: 0px;bottom: 0px;top: 0px;">
<mat-drawer #drawer mode="side" class="toolbar">
<app-sidenav></app-sidenav>
</mat-drawer>
<router-outlet></router-outlet>
</mat-drawer-container>
Вышеприведенный код работал только для меня, когда я вставляю стиль напрямую и использую autosize, чтобы mat-box-container не перекрывался на странице маршрутизатора.
Попробуйте это для основного класса CSS
main {
position: absolute;
right: 0px;
left: 0px;
bottom: 0px;
top: 0px;
}
Похожие вопросы
Новые вопросы
css
CSS (каскадные таблицы стилей) - это язык таблиц стилей представления, используемый для описания внешнего вида и форматирования документов HTML (язык разметки гипертекста), XML (расширяемый язык разметки) и элементов SVG, включая (но не ограничиваясь) цвета, макет, шрифты, и анимации. Также описывается, как элементы должны отображаться на экране, на бумаге, в речи или на других носителях.