सिद्धांत
Pinterest साइट के वर्तमान कार्यान्वयन को देखते हुए (यह भविष्य में बदल सकता है), जब आप ओवरले खोलते हैं तो एक noscroll
वर्ग body
तत्व पर लागू होता है और overflow: hidden
सेट किया जाता है, इस प्रकार body
अब स्क्रॉल करने योग्य नहीं है।
ओवरले (ऑन-द-मक्खी या पहले से ही पृष्ठ के अंदर और के माध्यम से दृश्यमान बनाया बनाया display: block
है, यह कोई फर्क नहीं पड़ता) position : fixed
और overflow-y: scroll
के साथ, top
, left
, right
और bottom
गुण के लिए सेट0
: इस शैली बनाता ओवरले पूरे व्यूपोर्ट भरें।
div
ओवरले के अंदर के बजाय सिर्फ में है position: static
तो आप देख खड़ी स्क्रॉलबार उस तत्व से संबंधित है। परिणामस्वरूप सामग्री स्क्रॉल करने योग्य होती है, लेकिन ओवरले निश्चित रहता है।
जब आप ज़ूम को बंद करते हैं display: none
तो आप ओवरले (माध्यम से ) को छिपाते हैं और फिर आप इसे पूरी तरह से जावास्क्रिप्ट (या सिर्फ सामग्री के अंदर से निकाल सकते हैं, यह आपके ऊपर है कि इसे कैसे इंजेक्ट किया जाए)।
अंतिम चरण के रूप में आपको noscroll
वर्ग को भी हटाना है body
(इसलिए अतिप्रवाह संपत्ति अपने प्रारंभिक मूल्य पर लौटती है)
कोड
कोडपेन उदाहरण
(यह aria-hidden
दिखाने और छिपाने और इसकी पहुँच बढ़ाने के लिए ओवरले की विशेषता को बदलकर काम करता है )।
मार्कअप
(खुला बटन)
<button type="button" class="open-overlay">OPEN LAYER</button>
(ओवरले और क्लोज बटन)
<section class="overlay" aria-hidden="true">
<div>
<h2>Hello, I'm the overlayer</h2>
...
<button type="button" class="close-overlay">CLOSE LAYER</button>
</div>
</section>
सीएसएस
.noscroll {
overflow: hidden;
}
.overlay {
position: fixed;
overflow-y: scroll;
top: 0; right: 0; bottom: 0; left: 0; }
[aria-hidden="true"] { display: none; }
[aria-hidden="false"] { display: block; }
जावास्क्रिप्ट (वेनिला-जेएस)
var body = document.body,
overlay = document.querySelector('.overlay'),
overlayBtts = document.querySelectorAll('button[class$="overlay"]');
[].forEach.call(overlayBtts, function(btt) {
btt.addEventListener('click', function() {
/* Detect the button class name */
var overlayOpen = this.className === 'open-overlay';
/* Toggle the aria-hidden state on the overlay and the
no-scroll class on the body */
overlay.setAttribute('aria-hidden', !overlayOpen);
body.classList.toggle('noscroll', overlayOpen);
/* On some mobile browser when the overlay was previously
opened and scrolled, if you open it again it doesn't
reset its scrollTop property */
overlay.scrollTop = 0;
}, false);
});
अंत में, यहां एक और उदाहरण है जिसमें संपत्ति पर transition
लागू सीएसएस द्वारा ओवरले फीका-प्रभाव के साथ खुलता opacity
है। इसके अलावा एक padding-right
जब स्क्रॉलबार गायब हो जाता है अंतर्निहित पाठ पर एक पुनर्प्रवाहित से बचने के लिए लागू किया जाता है।
कोडपेन उदाहरण (फीका)
सीएसएस
.noscroll { overflow: hidden; }
@media (min-device-width: 1025px) {
/* not strictly necessary, just an experiment for
this specific example and couldn't be necessary
at all on some browser */
.noscroll {
padding-right: 15px;
}
}
.overlay {
position: fixed;
overflow-y: scroll;
top: 0; left: 0; right: 0; bottom: 0;
}
[aria-hidden="true"] {
transition: opacity 1s, z-index 0s 1s;
width: 100vw;
z-index: -1;
opacity: 0;
}
[aria-hidden="false"] {
transition: opacity 1s;
width: 100%;
z-index: 1;
opacity: 1;
}