তত্ত্ব
পিনটারেস্ট সাইটের বর্তমান প্রয়োগের দিকে তাকালে (এটি ভবিষ্যতে পরিবর্তিত হতে পারে) যখন আপনি ওভারলেটি খুলবেন তখন কোনও noscroll
শ্রেণি body
উপাদানটিতে প্রয়োগ করা হয় এবং overflow: hidden
সেট হয়ে যায়, এভাবে body
আর স্ক্রোলযোগ্য হয় না।
আস্তরণ (on-the-মাছি অথবা ইতিমধ্যেই পৃষ্ঠা ভেতরে ও মাধ্যমে দৃশ্যমান নির্মিত 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;
}