Для создания скролла в React без блокировки зоны видимости для элементов внутри, вам потребуется использовать CSS свойство overflow
в сочетании с React компонентом <div>
.
- В начале создайте компонент, который будет содержать основное содержимое страницы с возможностью прокрутки:
import React from 'react'; const ScrollableContent = ({ children }) => { return ( <div style={{ height: '100%', overflow: 'auto', padding: '10px' }}> {children} </div> ); }; export default ScrollableContent;
- Внутри этого компонента вы можете разместить любое количество элементов, которые вы хотите сделать прокручиваемыми. Например:
import React from 'react'; import ScrollableContent from './ScrollableContent'; const App = () => { return ( <div style={{ height: '100vh', display: 'flex', flexDirection: 'column' }}> <header style={{ height: '50px', backgroundColor: 'lightblue', marginBottom: '10px' }}> Header </header> <ScrollableContent> {/* Все элементы, которые должны прокручиваться */} <div style={{ height: '500px', backgroundColor: 'lightgrey', marginBottom: '10px' }}> Content 1 </div> <div style={{ height: '500px', backgroundColor: 'lightgrey', marginBottom: '10px' }}> Content 2 </div> <div style={{ height: '500px', backgroundColor: 'lightgrey', marginBottom: '10px' }}> Content 3 </div> </ScrollableContent> <footer style={{ height: '50px', backgroundColor: 'lightblue', marginTop: '10px' }}> Footer </footer> </div> ); }; export default App;
- Здесь мы создаем компонент
App
, который содержит шапку, подвал и компонентScrollableContent
. Шапка и подвал остаются видимыми всегда, а содержимоеScrollableContent
может быть прокручено. ВнутриScrollableContent
размещены примерыdiv
элементов, которые имеют высоту в 500 пикселей и маргин внизу, чтобы они отличались друг от друга и прокручивались при необходимости.
- Чтобы установить стили для ваших элементов внутри
ScrollableContent
, вы можете добавить соответствующие CSS свойства в соответствующих компонентах.
Таким образом, вы создаете контейнер, который будет иметь возможность прокручиваться, но не блокирует зону видимости для элементов внутри, кроме самого основного контента.