React에서 고정 헤더를 만드는 방법

React에서 고정 헤더를 만드는 방법
당신과 같은 독자는 MUO를 지원하는 데 도움이 됩니다. 귀하가 당사 사이트의 링크를 사용하여 구매하면 당사는 제휴 수수료를 받을 수 있습니다. 더 읽어보세요.

일부 웹사이트 디자인은 아래로 스크롤할 때 화면 상단에 '고정'되는 헤더를 사용합니다. 스크롤할 때 계속 표시되는 머리글을 종종 고정 머리글이라고 합니다.





사용자 지정 코드를 직접 작성하거나 타사 라이브러리를 사용하여 React 사이트에 고정 헤더를 추가할 수 있습니다.





고정 헤더란 무엇입니까?

고정 헤더는 사용자가 페이지를 아래로 스크롤할 때 화면 상단에 고정된 상태로 유지되는 헤더입니다. 이는 사용자가 스크롤할 때 중요한 정보를 계속 표시하는 데 유용할 수 있습니다.





맥은 와이파이에 연결할 수 없습니다
오늘의 메이크업 비디오

그러나 스틱 헤더는 나머지 디자인의 화면 공간을 줄여준다는 점을 명심하십시오. 고정 헤더를 사용하는 경우 짧게 유지하는 것이 좋습니다.

고정 헤더 만들기

가장 먼저 해야 할 일은 onscroll 핸들러를 설정하는 것입니다. 이 기능은 사용자가 스크롤할 때마다 실행됩니다. window 객체에 onscroll 이벤트 리스너를 추가하고 반응 후크 사용 . onscroll 핸들러를 설정하려면 useEffect 후크와 창 객체의 addEventListener 메서드를 사용해야 합니다.



다음 코드는 고정 헤더 구성 요소를 만들고 CSS를 사용하여 스타일을 지정합니다.

import React, { useState, useEffect } from 'react'; 
function StickyHeader() {
const [isSticky, setSticky] = useState(false);
const handleScroll = () => {
const windowScrollTop = window.scrollY;
if (windowScrollTop > 10) {
setSticky(true);
} else {
setSticky(false);
}
};
useEffect(() => {
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
const items = [
{
name: 'Home',
link: '/'
},
{
name: 'About',
link: '/about'
},
{
name: 'Contact',
link: '/contact'
}
];
const data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ]
return (
<div className="App">
<header style={{ background: isSticky ? '#fff' : '', width: '100%', zIndex: '999',position:isSticky ?'fixed':'absolute' }}>
{items.map(item => (
<a href={item.link} key={item.name}>
{item.name}
</a>
))}
</header>
<ul>
{data.map((x) => {
return (<li key={x}>{x}</li>)
})}
</ul>
</div>
);
}
export default StickyHeader;

이 방법은 인라인 스타일을 사용하지만 CSS 클래스를 사용할 수도 있습니다. 예를 들어:





.sticky { 
position: fixed;
top: 0;
width: 100%;
z-index: 999;
}

결과 페이지는 다음과 같습니다.

  반응 중인 스티커 헤더가 있는 페이지

추가 기능

고정 헤더를 보다 사용자 친화적으로 만들기 위해 할 수 있는 몇 가지 다른 작업이 있습니다. 예를 들어 맨 위로 이동 버튼을 추가하거나 사용자가 아래로 스크롤할 때 머리글을 투명하게 만들 수 있습니다.





다음 코드를 사용하여 맨 위로 이동 버튼을 추가할 수 있습니다.

import React, { useState, useEffect } from 'react'; 
function StickyHeader() {
const [isSticky, setSticky] = useState(false);
const [showBackToTop, setShowBackToTop] = useState(false);
const handleScroll = () => {
const windowScrollTop = window.scrollY;
if (windowScrollTop > 10) {
setSticky(true);
setShowBackToTop(true);
} else {
setSticky(false);
setShowBackToTop(false);
}
};
const scrollToTop = () => {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
};
useEffect(() => {
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
const items = [
{
name: 'Home',
link: '/'
},
{
name: 'About',
link: '/about'
},
{
name: 'Contact',
link: '/contact'
}
];
const data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ]
return (
<div className="App">
<header style={{ background: isSticky ? '#fff' : '', width: '100%', zIndex: '999',position:isSticky ?'fixed':'absolute' }}>
{items.map(item => (
<a href={item.link} key={item.name}>
{item.name}
</a>
))}
</header>

<ul>
{data.map((x) => {
return (<li key={x}>{x}</li>)
})}
</ul>
<div>
{showBackToTop && (
<button onClick={scrollToTop}>Back to top</button>
)}</div>
</div>
);
}
export default StickyHeader;

이 코드는 고정 헤더 구성 요소를 만들고 CSS를 사용하여 스타일을 지정합니다. 당신은 또한 수 Tailwind CSS를 사용하여 구성 요소 스타일 지정 .

대체 방법

타사 라이브러리를 사용하여 고정 헤더를 만들 수도 있습니다.

Gmail을 이전 스타일로 다시 변경

react-sticky 사용

react-sticky 라이브러리는 React에서 고정 요소를 만드는 데 도움이 됩니다. react-sticky를 사용하려면 먼저 설치하십시오.

npm install react-sticky

그런 다음 다음과 같이 사용할 수 있습니다.

import React from 'react'; 
import { StickyContainer, Sticky } from 'react-sticky';
function App() {
const data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ]
return (
<div>
<StickyContainer>
<Sticky>{({ style }) => (
<header style={style}>
This is a sticky header
</header>
)}
</Sticky>
<ul>
{data.map((x) => {
return (<li key={x}>{x}</li>)
})}
</ul>
</StickyContainer>

</div>
);
}
export default App;

위의 코드에서는 먼저 react-sticky 라이브러리에서 StickyContainer 및 Sticky 구성 요소를 가져와야 합니다.

그런 다음 고정 요소를 포함해야 하는 콘텐츠 주변에 StickyContainer 구성 요소를 추가해야 합니다. 이 경우 뒤에 오는 목록 내에서 헤더를 고정시키려고 하므로 두 헤더 주위에 StickyContainer를 추가합니다.

다음으로 고정하려는 요소 주위에 고정 구성 요소를 추가합니다. 이 경우 헤더 요소입니다.

마지막으로 Sticky 구성 요소에 스타일 소품을 추가합니다. 이렇게 하면 헤더가 올바르게 배치됩니다.

  react-sticky를 사용하여 반응에서 고정 헤더가 있는 반응 앱

react-stickynode 사용

React-stickynode는 React에서 고정 요소를 만드는 데 도움이 되는 또 다른 라이브러리입니다.

react-stickynode를 사용하려면 먼저 설치하십시오.

npm install react-stickynode

그런 다음 다음과 같이 사용할 수 있습니다.

import React from 'react'; 
import Sticky from 'react-stickynode';
function App() {
const data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 ]
return (
<div>
<Sticky enabled={true} bottomBoundary={1200}>
<div>
This is a sticky header
</div>
</Sticky>
<ul>
{data.map((x) => {
return (<li key={x}>{x}</li>)
})}
</ul>
</div>
);
}
export default App;

react-stickynode 라이브러리에서 Sticky 구성 요소를 가져오는 것으로 시작합니다.

마이크로소프트 오피스를 구매하는 가장 좋은 방법

그런 다음 고정하려는 요소 주위에 고정 구성 요소를 추가합니다. 이 경우 헤더 주변에 Sticky 구성 요소를 추가하여 헤더를 고정시킵니다.

마지막으로 활성화 및 bottomBoundary 소품을 Sticky 구성 요소에 추가합니다. 활성화된 소품은 헤더가 고정되어 있는지 확인하고 bottomBoundary 소품은 페이지에서 너무 멀리 떨어지지 않도록 합니다.

  react-stickynode를 사용하여 반응하는 고정 헤더가 있는 페이지

사용자 경험 개선

고정 헤더를 사용하면 사용자가 페이지의 위치를 ​​쉽게 파악할 수 있습니다. 고정 헤더는 화면이 더 작은 모바일 장치에서 특히 문제가 될 수 있습니다.

사용자 경험을 개선하기 위해 '맨 위로 돌아가기' 버튼을 추가할 수도 있습니다. 이러한 버튼을 사용하면 사용자가 페이지 상단으로 빠르게 스크롤할 수 있습니다. 이는 긴 페이지에서 특히 유용할 수 있습니다.

준비가 되면 GitHub 페이지에서 무료로 React 앱을 배포할 수 있습니다.