Привязка прокрутки css не работает с div в приложении React

Я тестировал его в разных современных браузерах, поэтому проблем с совместимостью быть не может. Я использую приложение create-реагировать со стилизованными компонентами, вот мой код:

import React, { Component } from 'react';
import styled, { createGlobalStyle } from 'styled-components';

const GlobalStyle = createGlobalStyle`
@import url('https://fonts.googleapis.com/css?family=Merriweather|Oleo+Script');
`

const Wrapper = styled.div`
  scroll-snap-type: y mandatory;
  display: flex;
  flex-direction: column;
  font-size: 16px;
`

const Home = styled.div`
  scroll-snap-align: center;
  height: 100vh;
  background-color: yellow;
  display: flex;
  flex-direction: row;
`

const Menu = styled.div`
  scroll-snap-align: center;
  height: 100vh;
  background-color: blue;
  display: grid;
`

const Speciality = styled.div`
  scroll-snap-align: center;
  height: 100vh;
  background-color: green;
`

class App extends Component {

  render() {
    return (
      <Wrapper>
        <GlobalStyle />
        <Home />
        <Menu />
        <Speciality />
      </Wrapper>
    );
  }
}

export default App;

Это ничего не делает, когда я прокручиваю, я пробовал почти все. Он также не будет работать без стилизованных компонентов.

Обновлено: я скопировал свой код в коды и ящик: https://codesandbox.io/s/72jmn1p1w1

в хроме нормально прокручивается - что именно не так?

Mikkel 28.03.2019 00:42

@Mikkel это должно прокручиваться так: i.imgur.com/vMW8ALh.gif

b4l4g3 29.03.2019 09:43

У меня также возникают проблемы с созданием привязки прокрутки css со стилизованными компонентами в React. Я интегрировал тот же код, что и snap.glitch.me/product.html, но не смог заставить его работать.

Pat M 28.11.2019 20:19
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
6
3
2 865
3

Ответы 3

Вместо того, чтобы применять scroll-snap-type: y mandatory к родительскому div, попробуйте применить его к html:

html {scroll-snap-type: y mandatory}

У меня тоже были проблемы с scroll-snap.

Для меня это не работает без overflow-y: scroll, попробуйте поместить это на свою обертку.

В вашей песочнице кода я заменил код элемента Wrapper следующим, чтобы он работал:

const Wrapper = styled.div`
  scroll-snap-type: y mandatory;
  max-height: 100vh;
  overflow-y: scroll;
`;

Это устраняет несколько проблем:

  • Явное указание высоты обертки, поэтому создается «окно» для элементов внутри, к которым можно привязаться;
  • Настройка переполнения для прокрутки или авто, потому что дочерние элементы должны быть «скрыты» внутри оболочки и видны только при прокрутке, чтобы прокрутка работала (и имела смысл);
  • Удаление display: flex, так как это может заставить дочерние элементы регулировать свою ширину или высоту, чтобы соответствовать контейнеру, что противоположно тому, что мы хотим — нам нужно, чтобы дочерние элементы были скрыты от просмотра из-за высоты/ширины прокрутки. В качестве альтернативы вы можете использовать flex: 1 для дочерних элементов, чтобы предотвратить изменение их размера, в зависимости от вашего варианта использования.

Другие вопросы по теме