How to Show "Scroll to View" Label Only When Table Overflows (with jQuery)

Last updated 3 weeks, 5 days ago | 35 views 75     5

Tags:- HTML JQuery CSS

Third page link: How to Add a "Scroll to View" Label Above Large Tables Using jQuery

Perfect! 
Let's now make it even smarter
the "Scroll to view" label will appear only when the table really overflows horizontally, meaning:

  • If the table fits normally, no label is shown ✅

  • If the table is wider than its container, the label appears ✅

  • It updates even if the user resizes the window! ✅

This way, the page feels much more dynamic and professional

 


 

Updated Step-by-Step Plan:

  1. Wrap each large table in a scrollable div (.table-wrapper).

  2. Insert a scroll notice (.scroll-notice) above each table.

  3. Check if the table overflows horizontally.

  4. Show or hide the notice based on overflow.

  5. Recheck on window resize (because tables might overflow differently on mobile/tablet/desktop).


✅ Updated jQuery Code

$(document).ready(function() {
    $("table").each(function() {
        var columnCount = $(this).find('tr:first-child td, tr:first-child th').length;
        
        if (columnCount > 5) {
            if (!$(this).parent().hasClass('table-wrapper')) {
                $(this).before('<div class="scroll-notice" style="display:none;">Scroll to view </div>');
                $(this).wrap("<div class='table-wrapper'></div>");
            }
        }
    });

    function updateScrollNotices() {
        $(".table-wrapper").each(function() {
            var $wrapper = $(this);
            var $table = $wrapper.find('table');
            var $notice = $wrapper.prev(".scroll-notice");

            if ($table.outerWidth() > $wrapper.width()) {
                $notice.show();
            } else {
                $notice.hide();
            }
        });
    }

    updateScrollNotices(); // Check on load

    $(window).on('resize', function() {
        updateScrollNotices(); // Recheck on resize
    });
});

Explanation

  • outerWidth():
    Measures the true width of the table including padding and borders.

  • $table.outerWidth() > $wrapper.width():
    Checks if the table's real width is bigger than the wrapper’s visible area.

  • $notice.show() / $notice.hide():
    Dynamically shows or hides the "Scroll to view" label.

  • $(window).on('resize', function(){}):
    Updates the behavior whenever the screen size changes.


Full Working HTML + CSS + jQuery Example

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Smart Scroll Notice for Wide Tables</title>
  <style>
    .table-wrapper {
      overflow-x: auto;
      max-width: 100%;
      border: 2px solid #ccc;
      margin: 20px 0;
      padding: 10px;
    }
    .scroll-notice {
      font-size: 14px;
      color: #555;
      margin: 10px 0 5px;
      font-style: italic;
    }
    table {
      border-collapse: collapse;
      width: 100%;
      min-width: 600px; /* for testing overflow */
    }
    th, td {
      border: 1px solid #aaa;
      padding: 8px 12px;
      text-align: left;
    }
  </style>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>

<h2>Small Table (No Scroll Notice)</h2>
<table>
  <tr><th>Name</th><th>Age</th><th>City</th></tr>
  <tr><td>John</td><td>25</td><td>New York</td></tr>
  <tr><td>Jane</td><td>30</td><td>Los Angeles</td></tr>
</table>

<h2>Large Table (Scroll Notice Only When Needed)</h2>
<table>
  <tr>
    <th>Product</th><th>Price</th><th>Stock</th><th>SKU</th><th>Category</th><th>Brand</th>
  </tr>
  <tr>
    <td>Phone</td><td>$699</td><td>Available</td><td>PH1234</td><td>Electronics</td><td>Samsung</td>
  </tr>
  <tr>
    <td>Laptop</td><td>$999</td><td>Available</td><td>LT5678</td><td>Electronics</td><td>Dell</td>
  </tr>
</table>

<script>
$(document).ready(function() {
    $("table").each(function() {
        var columnCount = $(this).find('tr:first-child td, tr:first-child th').length;
        
        if (columnCount > 5) {
            if (!$(this).parent().hasClass('table-wrapper')) {
                $(this).before('<div class="scroll-notice" style="display:none;">Scroll to view </div>');
                $(this).wrap("<div class='table-wrapper'></div>");
            }
        }
    });

    function updateScrollNotices() {
        $(".table-wrapper").each(function() {
            var $wrapper = $(this);
            var $table = $wrapper.find('table');
            var $notice = $wrapper.prev(".scroll-notice");

            if ($table.outerWidth() > $wrapper.width()) {
                $notice.show();
            } else {
                $notice.hide();
            }
        });
    }

    updateScrollNotices();

    $(window).on('resize', function() {
        updateScrollNotices();
    });
});
</script>

</body>
</html>

Pro Tips:

  • Style the scroll notice a little differently for mobile screens to make it even more helpful!

  • Smooth show/hide:
    Instead of .show() and .hide(), you can use .fadeIn() and .fadeOut() for a more elegant touch.

    Example:

    $notice.fadeIn();
    $notice.fadeOut();
    
  • Optimize for dynamically added tables:
    If tables are added via AJAX or dynamically, call updateScrollNotices() again after adding new tables.


Common Pitfalls

  • Don't forget min-width testing:
    For demo purposes, sometimes add a min-width to tables so you can easily test overflow behavior.

  • Don't rely only on column count:
    Sometimes a table might have few columns but very wide content. In that case, you may want to check actual width too.

  • Throttling resize events:
    On huge pages, you may want to "debounce" the resize event to avoid performance issues — but for most pages this simple setup works fine!


Final Words

Now you have a fully dynamic, mobile-friendly, responsive table setup
only showing the scroll notice when it’s truly needed.
It’s subtle, user-friendly, and boosts the professionalism of your site big time!


See how to make the scroll notice "sticky" at the top of the wrapper when scrolling sideways.

Click here