Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

128
Views
IntersectionObserver does not intercept elements with display contents

It looks like IntersectionObserver never considers elements with display: contents in the viewport.

This behaviour makes sense for display: none but I find it counter-intuitive for display: contents.

The use case of having a clean wrapper which only fetches & renders its contents on viewport intersection seems valid to me.

Example

function callback(entries, observer) {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      document.getElementById('content').style.display = 'block';
      document.getElementById('loader').style.display = 'none';
    }
  });
};

const observer = new IntersectionObserver(callback);

const target = document.getElementById('wrapper');

observer.observe(target);
#wrapper {
  display: contents;
}

#content {
  display: none;
}
<div id="wrapper">
  <div id="loader">Loading...</div>
  <div id="content">Shown on viewport intersection</div>
</div>

Looking at the Mozilla docs I can see that:

These elements don't produce a specific box by themselves

But still I'd expect IntersectionObserver to be able to detect it.

So guess it's a 2 part question:

  • Is this indeed the intended behaviour or an unwanted side-effect?
  • If it is the intended behaviour - what are the proper use-cases for display-contents?
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!