代码之家  ›  专栏  ›  技术社区  ›  Edward Coast

在滚动过程中,如何在不跳跃的情况下将粘性标题居中?

  •  0
  • Edward Coast  · 技术社区  · 5 年前

    我想把“topofpage”放在页面中央。我在CSS中添加了“text-align:center”,但当它第一次开始滚动时,它会跳/跳,并将其稍微向右移动。如果没有添加的CSS,它会出现在左侧,滚动时不会跳或跳。在滚动时,如何在不发生跳跃/抖动的情况下将拓扑页面居中?

    <div class="topofpage" id="mytopofpage">
      <h2>My topofpage</h2>
    </div>
    
    /* Style the topofpage */
    .topofpage {
      padding: 10px 16px;
      background: #555;
      color: #f1f1f1;
      text-align: center;
    }
    
    /* Page content */
    .content {
      padding: 16px;
    }
    
    /* The sticky class is added to the topofpage with JS when it reaches its scroll position */
    .sticky {
      position: fixed;
      top: 0;
      width: 100%
    }
    
    /* Add some top padding to the page content to prevent sudden quick movement (as the topofpage gets a new position at the top of the page (position:fixed and top:0) */
    .sticky + .content {
      padding-top: 102px;
    }
    
    // When the user scrolls the page, execute myFunction 
    window.onscroll = function() {myFunction()};
    
    // Get the topofpage
    var topofpage = document.getElementById("mytopofpage");
    
    // Get the offset position of the navbar
    var sticky = topofpage.offsetTop;
    
    // Add the sticky class to the topofpage when you reach its scroll position. Remove "sticky" when you leave the scroll position
    function myFunction() {
      if (window.pageYOffset > sticky) {
        topofpage.classList.add("sticky");
      } else {
        topofpage.classList.remove("sticky");
      }
    }
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Deepu Reghunath    5 年前

    你必须给 text-align: center; .header .topofpage 班级不到 sticky 类并更改的填充 header 类到 padding: 10px 0px;

    .topofpage {
      padding: 10px 0px;
      background: #555;
      color: #f1f1f1;
      text-align: center;
    }
    

    window.onscroll = function() {myFunction()};
    
    var header = document.getElementById("myHeader");
    var sticky = header.offsetTop;
    
    function myFunction() {
      if (window.pageYOffset > sticky) {
        header.classList.add("sticky");
      } else {
        header.classList.remove("sticky");
      }
    }
    body {
      margin: 0;
      font-family: Arial, Helvetica, sans-serif;
    }
    
    .top-container {
      background-color: #f1f1f1;
      padding: 30px;
      text-align: center;
    }
    
    .header {
      padding: 10px 0px;
      background: #555;
      color: #f1f1f1;
      text-align: center;
    }
    
    .content {
      padding: 16px;
    }
    
    .sticky {
      position: fixed;
      top: 0;
      width: 100%;
    }
    
    .sticky + .content {
      padding-top: 102px;
    }
    <div class="top-container">
      <h1>Scroll Down</h1>
      <p>Scroll down to see the sticky effect.</p>
    </div>
    
    <div class="header" id="myHeader">
      <h2>My Header</h2>
    </div>
    
    <div class="content">
      <h3>On Scroll Sticky Header</h3>
      <p>The header will stick to the top when you reach its scroll position.</p>
      <p>Scroll back up to remove the sticky effect.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
    </div>
        2
  •  0
  •   Tameem Safi    5 年前

    这是托多和 box-sizing CSS属性。默认设置为 content-box 这会导致在宽度顶部添加边框/填充时出现大小调整问题。

    您可以通过添加此CSS来修复它:

    * {
      box-sizing: border-box;
    }
    

    见: https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing