Мне нужна тень на навигации, когда она прокручивается по содержимому на странице, чтобы легче было показать разницу между содержимым и навигацией. Тень также следует применить с переходом, чтобы сделать ее более плавной.
При применении тени блока к навигации после прокрутки над точкой останова переход тени не работает. Однако переход работает при применении того же стиля к селектору наведения.
Я использую gatsby для проекта, но это проблема с реакцией / js, я просто говорю, есть ли какие-либо предостережения, которые я должен знать при применении этого к проекту с gatsby.
Обратите внимание, что я использую стилизованные компоненты для стилизации компонентов. Я использую условный рендеринг с использованием синтаксиса CSS: $ {condition && css-style}, который работает со стилями-компонентами.
Я уже пробовал использовать анимацию, которая работает, но запускается каждый раз, когда вы прокручиваете страницу.
class App extends Component {
constructor() {
super();
this.state = {
scrollPos: 0
};
}
componentDidMount() {
window.addEventListener("scroll", this.updateScroll);
this.updateScroll();
}
componentWillUnmountt() {
window.removeEventListener("scroll", this.updateScroll);
}
updateScroll = () =>
this.setState({ scrollPos: document.documentElement.scrollTop });
render() {
let breakpointScroll = 20;
const Header = styled.div`
position: fixed;
width: 100vw;
height: 90px;
background-color: white;
font-size: 26px;
color: coral;
text-align: center;
transition: all 200ms ease;
/* Problem here */
box-shadow: ${this.state.scrollPos >= breakpointScroll &&
"0px 1px 5px rgba(0, 0, 0, 0.25)"};
/* This seems to work perfect */
:hover {
box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.25);
}
`;
return (
<>
<Header>Header</Header>
<Text>Scroll position: {this.state.scrollPos}</Text>
{/* IGNORE, content for scroll */}
<Box />
<Box backgroundColor="lightblue" />
<Box />
{/* IGNORE, content for scroll */}
</>
);
}
}
Ссылка на Codesandbox: https://codesandbox.io/s/wizardly-cray-44mri