|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<meta charset="utf-8"> |
|
<meta name="viewport" content="width=device-width"> |
|
<title>Locking the Body Scroll for Modal Overlays in iOS Safari</title> |
|
</head> |
|
<body> |
|
<div class="content"> |
|
<h1>Locking the Body Scroll for Modal Overlays in iOS Safari</h1> |
|
<button type="button" class="open">Open Modal</button> |
|
<p>Inspired by: <a href="https://stackoverflow.com/questions/37713970/ios-css-js-overlay-scroll-but-prevent-body-scroll">https://stackoverflow.com/questions/37713970/ios-css-js-overlay-scroll-but-prevent-body-scroll</a></p> |
|
|
|
<p>This approach switches the roles of main content and overlay content when the overlay is open, making the overlay content behave as the main content and vice versa. Therefore, the overlay will use ≤body≥ as a scrolling container so it will preserve all native functionality when scrolling, opposing to scrolling a div with `overflow:auto`.</p> |
|
|
|
<p>Improvements:</p> |
|
<ul> |
|
<li>Doesn't have an issue when the background content would start srolling instead of the overlay if you reach the end-point of the overlay when scrolling and continue scrolling further.</li> |
|
<li>Doesn't show iOS bottom toolbar when opening an overlay, thus not making the page jump. (This toolbar usualy appears only when a user starts scrolling up.)</li> |
|
<li>Scrolling down the overlay will show the native iOS toolbars at the top and bottom of a page, and scrolling up will hide them, as if you were scolling the main content.</li> |
|
</ul> |
|
|
|
<button type="button" class="open">Open Modal</button> |
|
|
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
</div> |
|
|
|
<div id="overlay"> |
|
<div id="overlay-inner"> |
|
<button type="button" class="close">Close</button> |
|
|
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt asperiores quas temporibus eligendi, itaque, odit cupiditate? Repellendus blanditiis distinctio ad. Dicta harum quidem, voluptates impedit aspernatur eius modi inventore corrupti.</p> |
|
<button type="button" class="close">Close</button> |
|
</div> |
|
</div> |
|
|
|
<script src="https://code.jquery.com/jquery-3.1.0.js"></script> |
|
</body> |
|
</html> |