Как переместить элемент с абсолютным позиционированием на передний уровень приложения? (Угловая версия 17)

Думаю, у меня проблема со слоями макета.

У меня есть компонент mat-dialog, внутри которого есть форма с выбором (сделанная на заказ, а не mat-select). Раскрывающийся список выбора имеет абсолютную позицию, но он все еще обрезается мат-диалогом.

То же самое происходит и с мат-вкладками.

Я пытался поиграть с переполнением и z-индексом, но, поскольку я на самом деле не понимаю причину проблемы, я не могу ее исправить вслепую.

Ожидаемый результат:

  • нет прокрутки в мат-диалоге, связанном с открытым раскрывающимся списком, но с возможностью показать себя, если в форме будет больше контента;
  • Выпадающий список отображается с высотой в соответствии с его стилями, выходя за пределы контейнера.

Кто-нибудь знает бэкдор для решения этой проблемы?

Вы можете сделать видимым снаружи один из двух, полосу прокрутки или раскрывающийся список, но не оба, а также поделиться библиотекой, которую вы использовали для выбора, не так ли ng-select?

Naren Murali 02.07.2024 20:26

@NarenMurali, нет, это просто пользовательский выбор, сделанный из элементов div с абсолютным позиционированием (устаревший код). Стоит ли мне попробовать ng-select или выбор материала?

Karina Koroleva 03.07.2024 10:08

предпочитаю выбирать материал, причина указана в моем ответе ниже.

Naren Murali 03.07.2024 11:01
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
3
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Когда вы создаете диалог mat, вы можете указать PanelClass. Если этот pannelClass, например. custom-pop-up вы можете добавить в style.scss что-нибудь вроде

.custom-pop-up .mat-mdc-dialog-surface{
  overflow-y:visible;
}

Это изменение переполнения (из-за дефекта auto)

const dialogRef = this.dialog.open(DialogOverviewExampleDialog, {
  panelClass:'custom-pop-up', //<--this
  data: {....},
});

см. stackblitz (когда в фокусе отображается большой элемент div)

Ответ принят как подходящий

Поскольку вам нужна полоса прокрутки внутри диалогового окна, раскрывающийся список должен быть размещен в корне HTML-кода, поэтому самым простым вариантом будет это.

Предпочитаю выбор материала, второй вариант — ng-select, но, на мой взгляд, у материала лучшее сообщество и лучший вариант.

Спасибо за ответ. Мне помогло решение использования выбора материала.

Karina Koroleva 08.07.2024 14:09

Другие вопросы по теме