Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set color for extra page parts visible during rubber band scroll

At least when you scroll over the edge on mac, you see the page moving down and leaving a plain color behind it. Iv'e figured out the you can change the color by setting the background color of the body. But is there any other approach to it? Because sometimes I need a different colors at top and bottom, etc.

like image 601
Uko Avatar asked Jun 04 '15 09:06

Uko


People also ask

How do you prevent white space bounce after scrolling to the top of the page and the bottom?

Answers 4 : of How to prevent white space bounce after scrolling to the top of the page and the bottom. What ended up being best for me was adding style="overflow:hidden" directly on the <html> tag (via css didn't do it).

How do I stop extra scrolling in HTML?

This can be avoided using body { margin: 0; } if suitable. In situation where you can't add this CSS the wrapper element is useful as the scrollbar is always fully visible.

What is Overscroll CSS?

The overscroll-behavior CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for overscroll-behavior-x and overscroll-behavior-y .


2 Answers

My solution has been to cheat a little bit and use a linear-gradient() on the html or body tag to control the segmented background colors for a given project.

Something like this should split the background in half and take care of modern browsers.

background: -webkit-gradient(
    linear,
    left top,
    left bottom,
    color-stop(0.5, #8BC63E),
    color-stop(0.5, #EEEEEE)
);
background: -o-linear-gradient(bottom, #8BC63E 50%, #EEEEEE 50%);
background: -moz-linear-gradient(bottom, #8BC63E 50%, #EEEEEE 50%);
background: -webkit-linear-gradient(bottom, #8BC63E 50%, #EEEEEE 50%);
background: -ms-linear-gradient(bottom, #8BC63E 50%, #EEEEEE 50%);
background: linear-gradient(to bottom, #8BC63E 50%, #EEEEEE 50%);

Animated GIF exhibiting scrolling beyond page bounds

I've had mixed luck getting the same behavior on iOS, and seems to be more dependent on the specific layout.

like image 188
tksb Avatar answered Sep 22 '22 09:09

tksb


I need to achieve something similar.

The solution posted by @tksb doesn't work for me on Chrome (OS X), seems like Chrome uses the background-color to define the rubber band background, and ignores the background-image.

The solution I've found is to use a bit of JS

// create a self calling function to encapsulate our code
(function(document, window) {
  // define some variables with initial values
  var scrollTop   = 0;
  var timeout  = null;
  
  // this function gets called when you want to
  //reset the scrollTop to 0
  function resetScrollTop() {
    scrollTop = 0;
  }

  // add an event listener to `body` on mousewheel event (scroll)
  document.body.addEventListener('mousewheel', function(evt) {
    // on each even detection, clear any previous set timer
    // to avoid double actions
    timeout && window.clearTimeout(timeout);
    
    // get the event values
    var delta = evt.wheelDelta;
    var deltaX = evt.deltaX;

    // add the amount of vertical pixels scrolled
    // to our `scrollTop` variable
    scrollTop += deltaX;
    
    console.log(scrollTop);
    
    // if user is scrolling down we remove the `scroll-up` class
    if (delta < 0 && scrollTop <= 0) {
      document.body.classList.remove('scroll-up');
    }
    // otherwise, we add it
    else if (delta > 0 && scrollTop > 0) {
      document.body.classList.add('scroll-up');
    }
    
    // if no wheel action is detected in 100ms,
    // we reset our `scrollTop` variable
    timeout = window.setTimeout(resetScrollTop, 100);
  });
})(document, window);
body {
  margin: 0;
}
body.scroll-up {
  background-color: #009688;
}
section {
  min-height: 100vh;
  background-color: #fff;
}
header {
  height: 100px;
  background-color: #009688;
  color: #fff;
}

    
<section id="section">
  <header>
    this demo works only on full-screen preview
  </header>
</section>

Here a full screen demo to test it: http://s.codepen.io/FezVrasta/debug/XXxbMa

like image 25
Fez Vrasta Avatar answered Sep 18 '22 09:09

Fez Vrasta