As a jQuery developer, one of the most common tasks you’ll encounter is checking whether an element is visible on a webpage.
Whether you’re building interactive UIs, handling dynamic content, or creating responsive designs, understanding element visibility is crucial for creating smooth user experiences.
Understand Element Visibility in jQuery
In jQuery, element visibility isn’t just about whether something appears on screen. There are multiple states an element can be in:
- Visible: The element is displayed and takes up space
- Hidden with display: none: The element is completely hidden and takes no space
- Hidden with visibility: hidden: The element is invisible but still occupies space
- Hidden with opacity: 0: The element is transparent but still occupies space
The :visible and :hidden Selectors
jQuery provides two powerful pseudo-selectors for checking element visibility:
Use: visible Selector
The :visible selector checks if an element is currently visible in the layout:
// Check if an element is visible
if ($(element).is(":visible")) {
console.log("Element is visible");
} else {
console.log("Element is hidden");
}I have executed the above example code and added the screenshot below.

Use :hidden Selector
Conversely, the :hidden selector checks if an element is hidden:
// Check if an element is hidden
if ($(element).is(":hidden")) {
console.log("Element is hidden");
} else {
console.log("Element is visible");
}I have executed the above example code and added the screenshot below.

Practical Examples
Let me show you some practical examples of checking if an element is visible.
Example 1: Basic Visibility Check
Demonstrates a basic check to see if a single div is visible and alerts the user accordingly.
<div id="myDiv" style="display: none;">Hidden Content</div>
<button id="checkBtn">Check Visibility</button>
<button id="toggleBtn">Toggle Visibility</button>$(document).ready(function() {
$('#checkBtn').click(function() {
if ($('#myDiv').is(':visible')) {
alert('The div is visible!');
} else {
alert('The div is hidden!');
}
});
$('#toggleBtn').click(function() {
$('#myDiv').toggle();
});
});Example 2: Work with Multiple Elements
Shows how to loop through multiple elements and apply classes based on their visibility.
// Check visibility of multiple elements
$('.content-boxes').each(function() {
if ($(this).is(':visible')) {
$(this).addClass('visible-box');
} else {
$(this).addClass('hidden-box');
}
});I have executed the above example code and added the screenshot below.

Example 3: Conditional Actions Based on Visibility
Performs conditional layout changes depending on whether a sidebar is visible, triggered on window resize.
function handleElementVisibility() {
const $sidebar = $('#sidebar');
const $mainContent = $('#main-content');
if ($sidebar.is(':visible')) {
$mainContent.removeClass('full-width');
} else {
$mainContent.addClass('full-width');
}
}
// Call on window resize
$(window).resize(handleElementVisibility);Advanced Visibility Detection Methods
I will explain to you the advanced visibility detection methods.
Method 1: Custom Visibility Function
Checks if an element is truly visible by combining jQuery’s `:visible` selector with CSS properties like opacity and visibility.
function isElementVisible(element) {
const $element = $(element);
// Check jQuery's :visible selector
if (!$element.is(':visible')) {
return false;
}
// Additional checks for opacity and visibility CSS properties
const opacity = $element.css('opacity');
const visibility = $element.css('visibility');
return opacity !== '0' && visibility !== 'hidden';
}Method 2: Viewport Visibility Check
Determines whether an element is currently within the user’s viewport, useful for lazy loading or animations triggered on scroll.
function isInViewport(element) {
const $element = $(element);
const elementTop = $element.offset().top;
const elementBottom = elementTop + $element.outerHeight();
const viewportTop = $(window).scrollTop();
const viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
}I have executed the above example code and added the screenshot below.

Different Types of Hidden Elements
Let me help you understand the different types of hidden elements.
Display None vs Visibility Hidden
This example explains how different CSS properties like `display`, `visibility`, and `opacity` affect whether jQuery considers an element visible.
// Element with display: none
$('#element1').css('display', 'none');
console.log($('#element1').is(':visible')); // false
// Element with visibility: hidden
$('#element2').css('visibility', 'hidden');
console.log($('#element2').is(':visible')); // false
// Element with opacity: 0
$('#element3').css('opacity', '0');
console.log($('#element3').is(':visible')); // true (still visible to jQuery)Performance Considerations
When checking element visibility frequently, consider these performance tips:
Cache jQuery Objects
Improves performance by storing a jQuery selection in a variable to avoid repeated DOM queries.
// Instead of this:
if ($('#myElement').is(':visible')) {
$('#myElement').addClass('active');
}
// Do this:
const $myElement = $('#myElement');
if ($myElement.is(':visible')) {
$myElement.addClass('active');
}Batch Operations
Enhances efficiency by performing actions on multiple elements at once rather than looping through them individually.
// Efficient way to handle multiple elements
const visibleElements = $('.content-item:visible');
const hiddenElements = $('.content-item:hidden');
visibleElements.addClass('show-animation');
hiddenElements.removeClass('show-animation');Common Use Cases and Solutions
I am going to explain to you the common use cases and solutions.
Toggle Buttons Based on Element State
Updates button text depending on whether a target element is visible or hidden.
function updateToggleButton() {
const $target = $('#target-element');
const $button = $('#toggle-button');
if ($target.is(':visible')) {
$button.text('Hide Element');
} else {
$button.text('Show Element');
}
}Responsive Design Visibility
Adjusts layout or classes based on element visibility during window resize.
$(window).resize(function() {
$('.mobile-menu').each(function() {
if ($(this).is(':visible')) {
$('body').addClass('mobile-nav-open');
} else {
$('body').removeClass('mobile-nav-open');
}
});
});Form Validation with Visibility
Prevents form submission if any visible error messages are present.
$('#submit-form').click(function(e) {
let hasVisibleErrors = false;
$('.error-message').each(function() {
if ($(this).is(':visible')) {
hasVisibleErrors = true;
return false; // Break the loop
}
});
if (hasVisibleErrors) {
e.preventDefault();
alert('Please fix the errors before submitting');
}
});Best Practices
- Use :visible and :hidden selectors for most visibility checks as they’re optimized and reliable.
- Cache jQuery objects when performing multiple operations on the same element.
- Consider the difference between display: none, visibility: hidden, and opacity: 0 for your specific use case.
- Test across different browsers to ensure consistent behavior.
- Use event delegation for dynamically created elements that need visibility checks.
Conclusion
Mastering jQuery element visibility checking is essential for creating dynamic, interactive web applications. The :visible and :hidden selectors provide powerful, reliable methods for determining element state, while understanding the nuances of different CSS properties helps you make informed decisions about user interface behavior.
Remember to consider performance implications when checking visibility frequently, and always test your implementations across different scenarios to ensure robust functionality. With these techniques and examples, you’re well-equipped to handle any element visibility challenge in your jQuery projects.
You may also like to read:
- Check if a Checkbox is Checked Using jQuery
- Handle Dropdown Change Event in jQuery
- Execute Functions After Page Load Using jQuery
- Check Which Radio Button is Selected Using jQuery

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.