Горизонтальная полоса прокрутки внутри angular-material (mat-tab) с использованием FlexBox Grid

Я пытаюсь реализовать горизонтальную полосу прокрутки для отображения изображений, но ширина контейнера-оболочки (scroll-container) переполняется. Мне также нужно использовать сетку FlexBox, чтобы она реагировала на разные размеры экрана.

Структура HTML и SCSS приведена ниже. Контейнер должен находиться внутри группы mat-tab-group (Angular Material). div 'item' будет содержать несколько элементов.

Я запускаю его в хроме и проверил инспектора, по-видимому, свойство mat-tab-body-wrapper display: flex вызывает эту проблему. Есть ли обходной путь для этой проблемы?

HTML

  <mat-tab-group>
      <mat-tab label="First"> 
     <div class='row scroll-container'>
           <div class='col-xs-5 col-sm-8 col-md-9 col-lg-12'>
             <div class='horizontal-slider'>
               <div class='slider-container'>
                 <div class='item'>
                   <img src='' alt=''>
                 </div>
               </div>
             </div>
           </div>
         </div>
      </mat-tab>
      </mat-tab-group>

СКСС

 .scroll-container {
            margin: 8px 0 0 0;
           
    .horizontal-slider {
       display: flex;
       overflow-y: hidden;
       max-width: inherit;
       overflow-x: scroll;
       box-sizing: border-box;

    .slider-container {
      
             .item {
               display: flex;
               margin-right: 8px;
        
               img {
                 width: 124px;
                 height: 124px;
               }
             }
        
           }
         }


}
    

person Nikhil More    schedule 28.06.2021    source источник


Ответы (1)


Наиболее эффективное решение будет таким, как показано ниже. Наряду с flex-nowrap вам необходимо установить атрибут переполнения, чтобы предотвратить расширение всей страницы.

Со свойством переполнения:

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

 <h6>Bootstrap 4 horizontally scrollable card groups</h6>
 <div class="d-flex flex-row flex-nowrap overflow-auto">
      <div class="card card-block mx-2" style="min-width: 300px;">Card</div>
      <div class="card card-block mx-2" style="min-width: 300px;">Card</div>
      <div class="card card-block mx-2" style="min-width: 300px;">Card</div>            
</div>

person Arkadeep Nag    schedule 28.06.2021
comment
Мне нужно сделать это, используя сетку flexbox, а не Bootstrap. - person Nikhil More; 28.06.2021
comment
@NikhilMore I need to do it using flexbox grid and not Bootstrap добавьте это в тело вопроса. - person greybeard; 28.06.2021