← Назад к вопросам
Как скрыть вертикальный скролл?
2.2 Middle🔥 121 комментариев
#Soft Skills и рабочие процессы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как скрыть вертикальный скролл?
CSS способ (самый простой)
/* === Скрыть скролл, но сохранить прокрутку === */
/* Для body/html */
body {
overflow-y: hidden; /* скрывает вертикальный скролл */
}
/* Для конкретного элемента */
.no-scroll {
overflow-y: hidden;
height: 100vh; /* или конкретная высота */
}
/* === Скрыть в Safari, Chrome, Firefox === */
/* Способ 1: прямое скрытие */
body::-webkit-scrollbar {
display: none; /* Chrome, Safari, Edge */
}
body {
-ms-overflow-style: none; /* IE, Edge (старая версия) */
scrollbar-width: none; /* Firefox */
overflow-y: scroll; /* остаётся прокрутка */
}
/* === Полностью скрыть скролл во всех браузерах === */
.container {
overflow-y: hidden; /* скрывает скролл */
height: 100vh;
}
/* === Скрыть скролл, но разрешить прокрутку (для мобилок) === */
.scroll-hidden {
-ms-overflow-style: none; /* IE 11 */
scrollbar-width: none; /* Firefox */
}
.scroll-hidden::-webkit-scrollbar {
display: none; /* Chrome, Safari, Edge */
}
JavaScript подход
// === Скрыть скролл при открытии модала ===
function disableScroll() {
document.body.style.overflow = 'hidden';
}
function enableScroll() {
document.body.style.overflow = 'auto';
}
// === Сохранить позицию скролла ===
let scrollY = 0;
function disableScrollWithPosition() {
scrollY = window.scrollY;
document.body.style.overflow = 'hidden';
document.body.style.top = `-${scrollY}px`;
document.body.style.position = 'fixed';
document.body.style.width = '100%';
}
function enableScrollWithPosition() {
document.body.style.position = '';
document.body.style.top = '';
document.body.style.overflow = '';
window.scrollTo(0, scrollY);
}
// === React хук ===
export function useDisableScroll(isDisabled) {
useEffect(() => {
if (isDisabled) {
document.body.style.overflow = 'hidden';
return () => {
document.body.style.overflow = 'unset';
};
}
}, [isDisabled]);
}
export function Modal({ isOpen, onClose }) {
useDisableScroll(isOpen);
return (
isOpen && (
<div className="modal">
<button onClick={onClose}>Close</button>
</div>
)
);
}
Tailwind CSS
// === Использование Tailwind ===
export function ModalDialog() {
const [isOpen, setIsOpen] = useState(false);
return (
<>
{/* body с скрытым скроллом */}
{isOpen && (
<div className="fixed inset-0 bg-black/50 z-40">
<div className="fixed inset-0 overflow-hidden">
{/* Modal */}
<div className="absolute inset-0 overflow-y-auto">
<div className="flex items-center justify-center h-full">
<div className="bg-white p-6 rounded-lg">
<button onClick={() => setIsOpen(false)}>
Close
</button>
</div>
</div>
</div>
</div>
</div>
)}
{/* Оборачиваем body */}
<html className={isOpen ? 'overflow-hidden' : ''}>
{/* ... */}
</html>
</>
);
}
Полная реализация (React Modal)
export function Modal({ isOpen, onClose, children }) {
useEffect(() => {
if (isOpen) {
// Скрываем скролл и сохраняем позицию
const scrollY = window.scrollY;
document.body.style.position = 'fixed';
document.body.style.top = `-${scrollY}px`;
document.body.style.width = '100%';
document.body.style.overflow = 'hidden';
return () => {
// Восстанавливаем скролл
document.body.style.position = '';
document.body.style.top = '';
document.body.style.width = '';
document.body.style.overflow = '';
window.scrollTo(0, scrollY);
};
}
}, [isOpen]);
if (!isOpen) return null;
return (
<div className="fixed inset-0 bg-black/50 flex items-center justify-center">
<div className="bg-white p-8 rounded-lg max-w-md">
{children}
<button onClick={onClose}>Close</button>
</div>
</div>
);
}