【问题标题】:Why is my simple CSS scroll-snap not working?为什么我的简单 CSS 滚动捕捉不起作用?
【发布时间】:2020-03-17 14:50:15
【问题描述】:

我尝试使用滚动捕捉功能,但它不起作用。我很困惑 - 我做错了什么??

HTML:

<!doctype html>
<html>
<body>

    <div class="section" style="background-color: peachpuff">
        <h2>Headline</h2>
        <p>My Text</p>
    </div>

    <div class="section">
        <h2>another Headline</h2>
        <p>Another line of text</p>
    </div>

    <div class="section" style="background-color: peachpuff">
        <h2>next Headline</h2>
        <p>Text line - lorem ipsum and stuff</p>
    </div>

    <div class="section">
        <h1>THE END OF THE SCROLL</h1>
    </div>

</body>
</html>

CSS:

body{
    font-family: Verdana, Geneva, Tahoma, sans-serif;
    display: flex;
    flex-direction: column;
    align-items: center;
    margin: 0;
    padding: 0;
    width: 80%;
    margin: auto;
    scroll-snap-type: y mandatory;
}

h1, h2{
    font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Sans', Arial, sans-serif;
}
.section{
    display: flex;
    flex-direction: column;
    width:100%;
    height: 100vh;
    justify-content: center;
    align-items: center;
    scroll-snap-align: start;
    scroll-snap-stop: always;
}

https://codepen.io/Shampie/pen/vYOrOEW

提前致谢!

(一开始代码不够,现在代码太多,需要更多文字……我不知道还能说什么)

【问题讨论】:

    标签: css scroll-snap scroll-snap-type


    【解决方案1】:

    scroll-snap-type 在分配给 body 元素时似乎不起作用。 您可以通过将其分配给 html 标记来修复它:

    html {
      scroll-snap-type: y mandatory;
    }
    body{
        font-family: Verdana, Geneva, Tahoma, sans-serif;
        display: flex;
        flex-direction: column;
        align-items: center;
        margin: 0;
        padding: 0;
        width: 80%;
        margin: auto; 
    }
    

    但有一个问题:这曾经可以正常工作,但自从最近更新到 81 版后,它在 Chrome 中的行为很奇怪(对我来说,问题从昨天开始)。

    另一种方法是将所有内容包装在一个容器元素中并为其分配 scroll-snap-type :

    .body {
        margin: 0; /* prevents a double scroll bar */
    }
    .scrollsnap-container {
        max-height: 100vh;
        overflow-y: scroll;
        scroll-snap-type: mandatory; /* for older browsers */
        scroll-snap-points-y: repeat(100vh); /* for older browsers */
        scroll-snap-type: y mandatory;
      }
      .scrollsnap-section {
        height: 100vh;
        scroll-snap-align: start;
        position: relative;
      }
    
    <div class="scrollsnap-container">
        <section id="slide-1" class="scrollsnap-section">
          <h2>slide 1</h2>
        </section>
        <section id="slide-2" class="scrollsnap-section">
          <h2>slide 2</h2>
        </section>
        <section id="slide-3" class="scrollsnap-section">
          <h2>slide 3</h2>
        </section>
        <section id="slide-4" class="scrollsnap-section">
          <h2>slide 4</h2>
        </section>
        <section id="slide-5" class="scrollsnap-section">
          <h2>slide 5</h2>
        </section>
      </div>
    

    这似乎对我更有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2016-01-24
      • 2019-08-29
      • 2019-07-14
      • 2021-08-09
      • 1970-01-01
      • 2019-11-07
      • 2019-11-08
      相关资源
      最近更新 更多