七夏 发表于 2025-1-2 14:56:38

使用CSS实现滚动吸附效果

<p>基本原理</p>
<p>利用CSS的position: sticky属性来让元素在滚动到特定位置时“吸附”在某个可视区域边界(如顶部、底部、左侧或右侧)。</p>
<p>3种常见应用场景</p>
<p>1.吸顶效果</p>
<p>html部份:</p>
<pre><code>&lt;header&gt;    
  &lt;h1&gt;网页头部&lt;/h1&gt;
&lt;/header&gt; 
&lt;main&gt;     
  &lt;section id=&quot;section1&quot;&gt;     
  &lt;h2&gt;内容区域1&lt;/h2&gt;    
  &lt;p&gt;这里是一些文本内容......&lt;/p&gt;    
  &lt;/section&gt;    &lt;section id=&quot;section2&quot;&gt;    
  &lt;h2&gt;内容区域2&lt;/h2&gt;     
  &lt;p&gt;这里是一些文本内容......&lt;/p&gt;    
  &lt;/section&gt;    &lt;section id=&quot;section3&quot;&gt;     
  &lt;h2&gt;内容区域3&lt;/h2&gt;    
  &lt;p&gt;这里是一些文本内容......&lt;/p&gt;    
  &lt;/section&gt; 
&lt;/main&gt;
</code></pre>
<p>css部份:</p>
<pre><code> header { 
   position: sticky;  
   top: 0;  
   background-color: #333;   
   color: white;    
   text-align: center;   
   padding: 20px;  
   z-index: 1;}
 main {
   padding: 20px;
 }
 section {    
   height: 500px; 
   border: 1px solid #ccc;  
   margin-bottom: 20px;   
   padding: 20px;}
</code></pre>
<p>2.列表标签吸附顶部</p>
<p>html部份:</p>
<pre><code>&lt;div class=&quot;main&quot;&gt;     
  &lt;dl&gt;     
    &lt;dt&gt;这是标签A&lt;/dt&gt;    
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;    
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
  &lt;/dl&gt;   
   &lt;dl&gt;     
    &lt;dt&gt;这是标签B&lt;/dt&gt;    
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;    
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
  &lt;/dl&gt;   
   &lt;dl&gt;     
    &lt;dt&gt;这是标签C&lt;/dt&gt;    
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;    
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
    &lt;dd&gt;标签栏粘贴效果&lt;/dd&gt;     
  &lt;/dl&gt;    
</code></pre>
<p>css部份:</p>
<pre><code>.main {     
  position: fixed;    
  width: 80%;     
  height: 70vh;     
  top: 50px;     
  left: 50%;    
  transform: translate(-50%, 0);     
  overflow-y: scroll;    }
dl {    
  border: 1px solid #ccc;    }
dt {    
  position: sticky;
  top: 0;    
  color: white;     
  background-color: rgb(53, 50, 50);     }
dd,dt {    
  padding: 0 10px;     
  border-bottom: 1px solid #ccc;    }
</code></pre>
<p>3.横向无缝滚动吸附</p>
<p>html部份</p>
<pre><code>&lt;div class=&quot;ads-position&quot;&gt;    
  &lt;ul&gt;    
    &lt;li&gt;Top 1&lt;/li&gt;    
    &lt;li&gt;Top 2&lt;/li&gt;    
    &lt;li&gt;Normal&lt;/li&gt;    
    &lt;li&gt;Bottom 1&lt;/li&gt;    
    &lt;li&gt;Bottom 2&lt;/li&gt;    
  &lt;/ul&gt;    
&lt;/div&gt;
</code></pre>
<p>CSS部份</p>
<pre><code>.ads-position {     
  overflow: auto;     
  position: relative;     
  width: 400px;     
  height: 280px;     
  outline: 1px solid #3c9;     }
.ads-position ul {     
  padding: 200px 0;     }
  
.ads-position li {     
  position: sticky;     
  height: 40px;     
  line-height: 40px;     
  text-align: center;     
  color: #fff;     }
  
.ads-position li:nth-child(1) {     
  top: 0;     
  z-index: 9;     
  background-color: #f66;    }
  
 .ads-position li:nth-child(2) {     
    top: 40px;     
    z-index: 9;     
    background-color: #66f;     }
  
 .ads-position li:nth-child(3) {     
    background-color: #f90;     }
 .ads-position li:nth-child(4) {     
      bottom: 0;     
      z-index: 9;     
      background-color: #09f;     }
  .ads-position li:nth-child(5) {     
      bottom: 40px;     
      z-index: 9;     
      background-color: #3c9;     }
</code></pre>
<p>除了用css的sticky属性外 还有很多种方式都可以实现此效果 例如 <strong>CSS 的Scroll Snap属性或者是固定定位</strong>fixed都可以实现 哦!这里就不一一展示了 感兴趣的小伙伴可以自行尝试一下!****</p>
页: [1]
查看完整版本: 使用CSS实现滚动吸附效果