Angular Bootstrap table responsive

Angular Table responsive - Bootstrap 4 & Material Design

Note: This documentation is for an older version of Bootstrap (v.4). A newer version is available for Bootstrap 5. We recommend migrating to the latest version of our product - Material Design for Bootstrap 5.
Go to docs v.5

Angular Bootstrap Responsive tables are component which allows tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a .table with .table-responsive. Or, pick a maximum breakpoint with which to have a responsive table stay within by using .table-responsive{-sm|-md|-lg|-xl}.

Vertical clipping/truncation

Responsive tables make use of overflow-y: hidden, which clips off any content that goes beyond the bottom or top edges of the table. In particular, this can clip off dropdown menus and other third-party widgets.


Always responsive

Across every breakpoint, use .table-responsive for horizontally scrolling tables.

# Heading Heading Heading Heading Heading Heading Heading Heading Heading
1 Cell Cell Cell Cell Cell Cell Cell Cell Cell
2 Cell Cell Cell Cell Cell Cell Cell Cell Cell
3 Cell Cell Cell Cell Cell Cell Cell Cell Cell
        
            
          <div class="table-responsive">
            <table class="table">
              <thead>
                <tr>
                  <th scope="col">#</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                  <th scope="col">Heading</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <th scope="row">1</th>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                </tr>
                <tr>
                  <th scope="row">2</th>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                </tr>
                <tr>
                  <th scope="row">3</th>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                  <td>Cell</td>
                </tr>
              </tbody>
            </table>
          </div>
        
        
    

Breakpoint specific

Use .table-responsive{-sm|-md|-lg|-xl} as needed to create responsive tables up to a particular breakpoint. From that breakpoint onwards, the table will behave normally and not scroll horizontally.

# Heading Heading Heading Heading Heading
1 Cell Cell Cell Cell Cell
2 Cell Cell Cell Cell Cell
3 Cell Cell Cell Cell Cell

# Heading Heading Heading Heading Heading
1 Cell Cell Cell Cell Cell
2 Cell Cell Cell Cell Cell
3 Cell Cell Cell Cell Cell

# Heading Heading Heading Heading Heading
1 Cell Cell Cell Cell Cell
2 Cell Cell Cell Cell Cell
3 Cell Cell Cell Cell Cell

# Heading Heading Heading Heading Heading
1 Cell Cell Cell Cell Cell
2 Cell Cell Cell Cell Cell
3 Cell Cell Cell Cell Cell
        
            
          <div class="table-responsive-sm">
            <table class="table">
              ...
            </table>
          </div>

          <div class="table-responsive-md">
            <table class="table">
              ...
            </table>
          </div>

          <div class="table-responsive-lg">
            <table class="table">
              ...
            </table>
          </div>

          <div class="table-responsive-xl">
            <table class="table">
              ...
            </table>
          </div>
        
        
    

Bootstrap table column width

Use one of the following classes to manipulate the width of the columns.

Table columns with auto width

Add the .w-auto class to the table element to set an automatic width to the table column.

The width of the columns will automatically adjust to the content of the column. That means it will always take the minimum width required to present its content.

# Name Surname Country City Position Age
1 Kate Moss USA New York City Web Designer 23
2 Anna Wintour United Kingdom London Frontend Developer 36
3 Tom Bond Spain Madrid Photographer 25
4 Jerry Horwitz Italy Bari Editor-in-chief 41
5 Janis Joplin Poland Warsaw Video Maker 39
6 Gary Winogrand Germany Berlin Photographer 37
7 Angie Smith USA San Francisco Teacher 52
8 John Mattis France Paris Actor 28
9 Otto Morris Germany Munich Singer 35
        
            
          <!--Table-->
          <table class="table table-striped w-auto">
            <!--Table head-->
            <thead>
              <tr>
                <th>#</th>
                <th>Name</th>
                <th>Surname</th>
                <th>Country</th>
                <th>City</th>
                <th>Position</th>
                <th>Age</th>
              </tr>
            </thead>
            <!--Table head-->

            <!--Table body-->
            <tbody>
              <tr class="table-info">
                <th scope="row">1</th>
                <td>Kate</td>
                <td>Moss</td>
                <td>USA</td>
                <td>New York City</td>
                <td>Web Designer</td>
                <td>23</td>
              </tr>
              <tr>
                <th scope="row">2</th>
                <td>Anna</td>
                <td>Wintour</td>
                <td>United Kingdom</td>
                <td>London</td>
                <td>Frontend Developer</td>
                <td>36</td>
              </tr>
              <tr class="table-info">
                <th scope="row">3</th>
                <td>Tom</td>
                <td>Bond</td>
                <td>Spain</td>
                <td>Madrid</td>
                <td>Photographer</td>
                <td>25</td>
              </tr>
              <tr>
                <th scope="row">4</th>
                <td>Jerry</td>
                <td>Horwitz</td>
                <td>Italy</td>
                <td>Bari</td>
                <td>Editor-in-chief</td>
                <td>41</td>
              </tr>
              <tr class="table-info">
                <th scope="row">5</th>
                <td>Janis</td>
                <td>Joplin</td>
                <td>Poland</td>
                <td>Warsaw</td>
                <td>Video Maker</td>
                <td>39</td>
              </tr>
              <tr>
                <th scope="row">6</th>
                <td>Gary</td>
                <td>Winogrand</td>
                <td>Germany</td>
                <td>Berlin</td>
                <td>Photographer</td>
                <td>37</td>
              </tr>
              <tr class="table-info">
                <th scope="row">7</th>
                <td>Angie</td>
                <td>Smith</td>
                <td>USA</td>
                <td>San Francisco</td>
                <td>Teacher</td>
                <td>52</td>
              </tr>
              <tr>
                <th scope="row">8</th>
                <td>John</td>
                <td>Mattis</td>
                <td>France</td>
                <td>Paris</td>
                <td>Actor</td>
                <td>28</td>
              </tr>
              <tr class="table-info">
                <th scope="row">9</th>
                <td>Otto</td>
                <td>Morris</td>
                <td>Germany</td>
                <td>Munich</td>
                <td>Singer</td>
                <td>35</td>
              </tr>
            </tbody>
            <!--Table body-->
          </table>
          <!--Table-->
        
        
    

Table columns with minimal width

Use the .th-lg or .th-sm class to set a minimal width of a table column. .th-lg class gives 9 rem of the minimal width of the column and .th-sm class gives 6 rem.

You have to add the .th-lg or th.sm class to the <th> element within the <thead>.

Resize the browser window to see the effect.

.th-lg - 9 rem minimal width of the column

# Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
1 Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
2 Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
3 Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
        
            
          <div class="table-responsive">

            <!--Table-->
            <table class="table">

              <!--Table head-->
              <thead>
                <tr>
                  <th>#</th>
                  <th class="th-lg">Lorem ipsum dolor</th>
                  <th class="th-lg">Lorem ipsum dolor</th>
                  <th class="th-lg">Lorem ipsum dolor</th>
                </tr>
              </thead>
              <!--Table head-->

              <!--Table body-->
              <tbody>
                <tr>
                  <th scope="row">1</th>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                </tr>
                <tr>
                  <th scope="row">2</th>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                </tr>
                <tr>
                  <th scope="row">3</th>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                </tr>
              </tbody>
              <!--Table body-->

            </table>
            <!--Table-->

          </div>
        
        
    

.th-sm - 6 rem minimal width of the column

# Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
1 Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
2 Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
3 Lorem ipsum dolor Lorem ipsum dolor Lorem ipsum dolor
        
            
          <div class="table-responsive">

            <!--Table-->
            <table class="table">

              <!--Table head-->
              <thead>
                <tr>
                  <th>#</th>
                  <th class="th-sm">Lorem ipsum dolor</th>
                  <th class="th-sm">Lorem ipsum dolor</th>
                  <th class="th-sm">Lorem ipsum dolor</th>
                </tr>
              </thead>
              <!--Table head-->

              <!--Table body-->
              <tbody>
                <tr>
                  <th scope="row">1</th>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                </tr>
                <tr>
                  <th scope="row">2</th>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                </tr>
                <tr>
                  <th scope="row">3</th>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                  <td>Lorem ipsum dolor</td>
                </tr>
              </tbody>
              <!--Table body-->

            </table>
            <!--Table-->

          </div>
        
        
    

Table columns with fixed width

Add the .table-fixed class to the table element to set a fixed width to all of the columns of the table.

# Name Surname Country City Position Age
4 Jerry Horwitz Italy Bari Editor-in-chief 41
5 Janis Joplin Poland Warsaw Video Maker 39
6 Gary Winogrand Germany Berlin Photographer 37
7 Angie Smith USA San Francisco Teacher 52
8 John Mattis France Paris Actor 28
9 Otto Morris Germany Munich Singer 35
        
            
          <!--Table-->
          <table class="table table-hover table-fixed">

            <!--Table head-->
            <thead>
              <tr>
                <th>#</th>
                <th>Name</th>
                <th>Surname</th>
                <th>Country</th>
                <th>City</th>
                <th>Position</th>
                <th>Age</th>
              </tr>
            </thead>
            <!--Table head-->

            <!--Table body-->
            <tbody>
              <tr>
                <th scope="row">4</th>
                <td>Jerry</td>
                <td>Horwitz</td>
                <td>Italy</td>
                <td>Bari</td>
                <td>Editor-in-chief</td>
                <td>41</td>
              </tr>
              <tr>
                <th scope="row">5</th>
                <td>Janis</td>
                <td>Joplin</td>
                <td>Poland</td>
                <td>Warsaw</td>
                <td>Video Maker</td>
                <td>39</td>
              </tr>
              <tr>
                <th scope="row">6</th>
                <td>Gary</td>
                <td>Winogrand</td>
                <td>Germany</td>
                <td>Berlin</td>
                <td>Photographer</td>
                <td>37</td>
              </tr>
              <tr>
                <th scope="row">7</th>
                <td>Angie</td>
                <td>Smith</td>
                <td>USA</td>
                <td>San Francisco</td>
                <td>Teacher</td>
                <td>52</td>
              </tr>
              <tr>
                <th scope="row">8</th>
                <td>John</td>
                <td>Mattis</td>
                <td>France</td>
                <td>Paris</td>
                <td>Actor</td>
                <td>28</td>
              </tr>
              <tr>
                <th scope="row">9</th>
                <td>Otto</td>
                <td>Morris</td>
                <td>Germany</td>
                <td>Munich</td>
                <td>Singer</td>
                <td>35</td>
              </tr>
            </tbody>
            <!--Table body-->
          </table>
          <!--Table-->
        
        
    

Advanced table options

For advanced options of the tables have a look at specific documentation pages listed below.

Table sort

This table allow you to sort your data alphabetically

Table editable

Table editable allows you to edit existing data within the table and add new data to the table.

Table styles

Table styles shows you a new way of changing appearance of your existing tables

Angular Responsive Tables - API

In this section you will find advanced information about the Table component. You will find out which modules are required in this component, what are the possibilities of configuring the component, and what events and methods you can use in working with it.

Modules used

In order to speed up your application, you can choose to import only the modules you actually need, instead of importing the entire MDB Angular library. Remember that importing the entire library, and immediately afterwards a specific module, is bad practice, and can cause application errors.

        
            
          import { WavesModule } from 'ng-uikit-pro-standard';
        
        
    
        
            
          import { WavesModule } from 'angular-bootstrap-md';