CSS - scroll-snap-type 屬性



CSS scroll-snap-type 屬性指定滾動容器如何捕捉到捕捉位置。

要使用scroll-snap-type 屬性,需要將其設定在滾動容器上。還需要在要捕捉到位元素上設定scroll-snap-align 屬性。

可能的值

  • none − 滾動容器不會捕捉到任何位置。

  • x − 此值用於水平滾動。

  • y − 此值用於垂直滾動。

  • block − 這使得滾動容器停在塊軸上最近的捕捉點。

  • inline − 這使得滾動容器停在內聯軸上最近的捕捉點。

  • both − 指定滾動應該在滾動容器內水平和垂直方向都捕捉。

  • mandatory − 滾動容器應捕捉到最近的捕捉點,這使得使用者必須滾動到特定位置。

  • proximity − 滾動容器應根據接近程度捕捉到最近的捕捉點。

應用於

所有 HTML 元素。

DOM 語法

object.style.scrollSnapType = "none|x|y|block|inline|both|mandatory|proximity";

CSS Scroll Snap Type - None 值

以下示例演示了scroll-snap-type: none 屬性的使用 −

<html>
<head>
<style>
   .scroll-container {
      display: flex;
      width: 350px;
      height: 200px;
      overflow-x: scroll;
      overflow-y: hidden;
      white-space: nowrap;
      scroll-snap-type: none;
   }
   .scrolling-section1,
   .scrolling-section2,
   .scrolling-section3 {
      flex: 0 0 auto;
      width: 320px;
      height: 200px;
      scroll-snap-align: center;
   }
   .scrolling-section1 {
      background-color: rgb(220, 235, 153);
   }
   .scrolling-section2 {
      background-color: rgb(230, 173, 218); 
   }
   .scrolling-section3 {
      background-color: rgb(176, 229, 238);
   }
</style>
</head>
<body>
   <div class="scroll-container">
      <div class="scrolling-section1">scroll-snap-type: none</div>
      <div class="scrolling-section2">scroll-snap-type: none</div>
      <div class="scrolling-section3">scroll-snap-type: none</div>
      <div class="scrolling-section1">scroll-snap-type: none</div>
   </div>
</body>
</html>

CSS Scroll Snap Type - X 和 Y mandatory 值

以下示例演示瞭如何使用scroll-snap-type: x mandatoryscroll-snap-type: y mandatory 將使滾動容器停留在 X 軸和 Y 軸上最近的捕捉點,即使快速滾動也是如此 −

<html>
<head>
<style>
   .scroll-container1 {
      display: flex;
      width: 350px;
      height: 200px;
      overflow-x: scroll;
      overflow-y: hidden;
      white-space: nowrap;
      scroll-snap-type: x mandatory;
      margin-bottom: 20px;
   }
   .scroll-container2 {
      width: 350px;
      height: 200px;
      overflow-y: scroll;
      overflow-x: hidden;
      white-space: nowrap;
      scroll-snap-type: y mandatory;
   }
   .scrolling-section1,
   .scrolling-section2,
   .scrolling-section3 {
      flex: 0 0 auto;
      width: 320px;
      height: 200px;
      scroll-snap-align: center;
   }
   .scrolling-section1 {
      background-color: rgb(220, 235, 153);
   }
   .scrolling-section2 {
      background-color: rgb(230, 173, 218); 
   }
   .scrolling-section3 {
      background-color: rgb(176, 229, 238);
   }
</style>
</head>
<body>
   <div class="scroll-container1">
      <div class="scrolling-section1">scroll-snap-type: x mandatory</div>
      <div class="scrolling-section2">scroll-snap-type: x mandatory</div>
      <div class="scrolling-section3">scroll-snap-type: x mandatory</div>
      <div class="scrolling-section1">scroll-snap-type: x mandatory</div>
   </div>
   <div class="scroll-container2">
      <div class="scrolling-section1">scroll-snap-type: y mandatory</div>
      <div class="scrolling-section2">scroll-snap-type: y mandatory</div>
      <div class="scrolling-section3">scroll-snap-type: y mandatory</div>
      <div class="scrolling-section1">scroll-snap-type: y mandatory</div>
   </div>
</body>
</html>

CSS Scroll Snap Type - X 和 Y proximity 值

以下示例演示瞭如何使用scroll-snap-type: x proximityscroll-snap-type: y proximity 屬性來建立滾動容器,在水平和垂直滾動時,各個部分會捕捉到位 −

<html>
<head>
<style>
   .scroll-container1 {
      display: flex;
      width: 350px;
      height: 200px;
      overflow-x: scroll;
      overflow-y: hidden;
      white-space: nowrap;
      scroll-snap-type: x proximity;
      margin-bottom: 20px;
   }
   .scroll-container2 {
      width: 350px;
      height: 200px;
      overflow-y: scroll;
      overflow-x: hidden;
      white-space: nowrap;
      scroll-snap-type: y proximity;
   }
   .scrolling-section1,
   .scrolling-section2,
   .scrolling-section3 {
      flex: 0 0 auto;
      width: 300px;
      height: 200px;
      scroll-snap-align: center;
   }
   .scrolling-section1 {
      background-color: rgb(220, 235, 153);
   }
   .scrolling-section2 {
      background-color: rgb(230, 173, 218); 
   }
   .scrolling-section3 {
      background-color: rgb(176, 229, 238);
   }
</style>
</head>
<body>
   <div class="scroll-container1">
      <div class="scrolling-section1">scroll-snap-type: x proximity</div>
      <div class="scrolling-section2">scroll-snap-type: x proximity</div>
      <div class="scrolling-section3">scroll-snap-type: x proximity</div>
      <div class="scrolling-section1">scroll-snap-type: x proximity</div>
   </div>
   <div class="scroll-container2">
      <div class="scrolling-section1">scroll-snap-type: y proximity</div>
      <div class="scrolling-section2">scroll-snap-type: y proximity</div>
      <div class="scrolling-section3">scroll-snap-type: y proximity</div>
      <div class="scrolling-section1">scroll-snap-type: y proximity</div>
   </div>
</body>
</html>

CSS Scroll Snap Type - Both 值

以下示例演示了scroll-snap-type: both 屬性將使滾動容器停留在水平和垂直方向上最近的捕捉點 −

<html>
<head>
<style>
   .scroll-container {
      display: flex;
      width: 350px;
      height: 200px;
      overflow-x: scroll;
      overflow-y: scroll;
      white-space: nowrap;
      scroll-snap-type: both;
   }
   .scrolling-section1,
   .scrolling-section2,
   .scrolling-section3 {
      flex: 0 0 auto;
      width: 320px;
      height: 200px;
      scroll-snap-align: center;
   }
   .scrolling-section1 {
      background-color: rgb(220, 235, 153);
   }
   .scrolling-section2 {
      background-color: rgb(230, 173, 218); 
   }
   .scrolling-section3 {
      background-color: rgb(176, 229, 238);
   }
</style>
</head>
<body>
   <div class="scroll-container">
      <div class="scrolling-section1">scroll-snap-type: both</div>
      <div class="scrolling-section2">scroll-snap-type: both</div>
      <div class="scrolling-section3">scroll-snap-type: both</div>
      <div class="scrolling-section1">scroll-snap-type: both</div>
   </div>
</body>
</html>

CSS Scroll Snap Type - RTL 和 LTR 方向

以下示例演示瞭如何使用scroll-snap-type 屬性來建立在從右到左 (RTL) 和從左到右 (LTR) 兩個方向上都有捕捉點的滾動容器 −

<html>
<head>
<style>
   .scroll-container1 {
      display: flex;
      width: 350px;
      height: 150px;
      overflow-x: scroll;
      overflow-y: hidden;
      white-space: nowrap;
      scroll-snap-type: x mandatory;
      margin-bottom: 20px;
   }
   .scroll-container2 {
      width: 350px;
      height: 150px;
      overflow-y: scroll;
      overflow-x: hidden;
      white-space: nowrap;
      scroll-snap-type: y mandatory;
      margin-bottom: 20px;
   }
   .scroll-container3 {
      display: flex;
      width: 350px;
      height: 150px;
      overflow-x: scroll;
      overflow-y: hidden;
      white-space: nowrap;
      scroll-snap-type: x proximity;
      margin-bottom: 20px;
   }
   .scroll-container4 {
      width: 350px;
      height: 150px;
      overflow-y: scroll;
      overflow-x: hidden;
      white-space: nowrap;
      scroll-snap-type: y proximity;
      margin-bottom: 20px;
   }
   .scrolling-section1,
   .scrolling-section2,
   .scrolling-section3 {
      flex: 0 0 auto;
      width: 320px;
      height: 150px;
      scroll-snap-align: center;
   }
   .scrolling-section1 {
      background-color: rgb(220, 235, 153);
   }
   .scrolling-section2 {
      background-color: rgb(230, 173, 218); 
   }
   .scrolling-section3 {
      background-color: rgb(176, 229, 238);
   }
</style>
</head>
<body>
   <div class="scroll-container1" dir="ltr">
      <div class="scrolling-section1">scroll-snap-type: x mandatory with ltr</div>
      <div class="scrolling-section2">scroll-snap-type: x mandatory with ltr</div>
      <div class="scrolling-section3">scroll-snap-type: x mandatory with ltr</div>
      <div class="scrolling-section1">scroll-snap-type: x mandatory with ltr</div>
   </div>
   <div class="scroll-container2" dir="ltr">
      <div class="scrolling-section1">scroll-snap-type: y mandatory with ltr</div>
      <div class="scrolling-section2">scroll-snap-type: y mandatory with ltr</div>
      <div class="scrolling-section3">scroll-snap-type: y mandatory with ltr</div>
      <div class="scrolling-section1">scroll-snap-type: y mandatory with ltr</div>
   </div>
   <div class="scroll-container3" dir="ltr">
      <div class="scrolling-section1">scroll-snap-type: x proximity with ltr</div>
      <div class="scrolling-section2">scroll-snap-type: x proximity with ltr</div>
      <div class="scrolling-section3">scroll-snap-type: x proximity with ltr</div>
      <div class="scrolling-section1">scroll-snap-type: x proximity with ltr</div>
   </div>
   <div class="scroll-container4" dir="ltr">
      <div class="scrolling-section1">scroll-snap-type: y proximity with ltr</div>
      <div class="scrolling-section2">scroll-snap-type: y proximity with ltr</div>
      <div class="scrolling-section3">scroll-snap-type: y proximity with ltr</div>
      <div class="scrolling-section1">scroll-snap-type: y proximity with ltr</div>
   </div>
   <div class="scroll-container1" dir="rtl">
      <div class="scrolling-section1">scroll-snap-type: x mandatory with rtl</div>
      <div class="scrolling-section2">scroll-snap-type: x mandatory with rtl</div>
      <div class="scrolling-section3">scroll-snap-type: x mandatory with rtl</div>
      <div class="scrolling-section1">scroll-snap-type: x mandatory with rtl</div>
   </div>
   <div class="scroll-container2" dir="rtl">
      <div class="scrolling-section1">scroll-snap-type: y mandatory with rtl</div>
      <div class="scrolling-section2">scroll-snap-type: y mandatory with rtl</div>
      <div class="scrolling-section3">scroll-snap-type: y mandatory with rtl</div>
      <div class="scrolling-section1">scroll-snap-type: y mandatory with rtl</div>
   </div>
   <div class="scroll-container3" dir="rtl">
      <div class="scrolling-section1">scroll-snap-type: x proximity with rtl</div>
      <div class="scrolling-section2">scroll-snap-type: x proximity with rtl</div>
      <div class="scrolling-section3">scroll-snap-type: x proximity with rtl</div>
      <div class="scrolling-section1">scroll-snap-type: x proximity with rtl</div>
   </div>
   <div class="scroll-container4" dir="rtl">
      <div class="scrolling-section1">scroll-snap-type: y proximity with rtl</div>
      <div class="scrolling-section2">scroll-snap-type: y proximity with rtl</div>
      <div class="scrolling-section3">scroll-snap-type: y proximity with rtl</div>
      <div class="scrolling-section1">scroll-snap-type: y proximity with rtl</div>
   </div>
</body>
</html>
廣告