2016-05-17 72 views
-2

我想帶有粘性的div使用下面的佈局 - 我使用的代碼從這個例子:pixelbind - Make a DIV stick when you scroll百分比寬度破粘格

它的工作原理完全一樣像素使用固定寬度的時候,但是我需要需要它使用百分比,左邊的div爲30%,右邊的爲70%,但是一旦我這樣做,它就會打破粘性div,特別是在調整窗口大小和再次滾動時。

我似乎無法得到它的工作&我不能與JS。任何幫助非常感謝。下面是它具有固定寬度工作的例子:

$(document).ready(function() { 
 
\t var s = $("#sticker"); 
 
\t var pos = s.position(); \t 
 
\t var stickermax = $(document).outerHeight() - $("#catalogue").outerHeight() - s.outerHeight() - 0; //40 value is the total of the top and bottom margin 
 
\t $(window).scroll(function() { 
 
\t \t var windowpos = $(window).scrollTop(); 
 
\t \t if (windowpos >= pos.top && windowpos < stickermax) { 
 
\t \t \t s.attr("style", ""); //kill absolute positioning 
 
\t \t \t s.addClass("stick"); //stick it 
 
\t \t } else if (windowpos >= stickermax) { 
 
\t \t \t s.removeClass(); //un-stick 
 
\t \t \t s.css({position: "absolute", top: stickermax + "px"}); //set sticker right above the footer 
 
\t \t \t 
 
\t \t } else { 
 
\t \t \t s.removeClass(); //top of page 
 
\t \t } 
 
\t }); 
 
\t //alert(stickermax); //uncomment to show max sticker postition value on doc.ready 
 
});
html, body { 
 
\t margin:0; 
 
\t padding:0; 
 
} 
 
body { 
 
\t font-family:Segoe UI, Lucida Grande, sans-serif; 
 
\t font-size:13px; 
 
\t color:#444444; 
 
\t line-height:18px; 
 
} 
 

 
div#wrapper { 
 
\t margin:0 auto; 
 
\t width:900px; 
 
\t background:#FFF; 
 
\t background-color:#0F3; 
 
} 
 

 
div#brand-detail { 
 
\t width:560px; 
 
\t padding:0px; 
 
\t float:right; 
 
\t background-color:#FFF; 
 
\t padding:20px; 
 

 
} 
 

 
div#brand-bio { 
 
\t width:230px; 
 
\t float:left; 
 
\t /*padding:20px;*/ 
 
\t margin-left:30px; 
 
} 
 

 
.clear { 
 
\t clear:both; 
 
} 
 

 
div#sticker { 
 
\t padding:0; 
 
\t margin:0; 
 
\t background:#FC0; 
 
\t width:190px; 
 
\t padding:20px; 
 
\t /*margin:20px 0;*/ 
 
} 
 

 
.stick { 
 
\t position:fixed; 
 
\t top:0px; 
 
} 
 

 
#catalogue { 
 
\t background:#999999; 
 
\t height:1000px; 
 
\t width:100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 

 
    <div id="brand-bio"> 
 
    \t <!--<h2>brand bio</h2> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum.</p>--> 
 
     <div id="sticker"> 
 
     \t  <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
      <p>stuff</p> 
 
     </div> 
 
    </div> 
 
    
 
\t <div id="brand-detail"> 
 
    \t <h1>Main Content</h1> 
 
    \t <p>Here's some content, but that's not really important. The sidebar has a div a few lines down with an ID of &quot;sticker&quot;. Once this div gets to the top of the page, it will stick there. This is a great way to show advertisements without worrying that your audience may quickly scroll past them. Could also play nicely as navigation helpers.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    </div> 
 

 
    <div class="clear"></div> 
 
    
 
</div><!--/wrapper--> 
 
<div id="catalogue"> 
 
     more stuff 
 
      
 
</div>

+1

這個解決方案怎麼樣「破」了,結果是什麼? –

+0

@André解決方案正常工作,因爲我發佈了它,但我需要使佈局響應,但是當我嘗試使用%寬度它打破... –

回答

0

也許你應該只浮在CSS位置的菜單和繼電器:粘。

您也可以使用最小寬度。

一些閱讀的幫助:https://www.sitepoint.com/css-position-sticky-introduction-polyfills/https://www.sitepoint.com/understanding-block-formatting-contexts-in-css/

運行在全頁模式的片斷和調整窗口看到的行爲,菜單是寬30%和至少160像素..

html, 
 
body { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
body { 
 
    font-family: Segoe UI, Lucida Grande, sans-serif; 
 
    font-size: 13px; 
 
    color: #444444; 
 
    line-height: 18px; 
 
} 
 
div#wrapper { 
 
    margin: 0 auto; 
 
    background: #FFF; 
 
    background-color: #0F3; 
 
} 
 
div#brand-detail { 
 
    overflow: hidden; 
 
    background-color: #FFF; 
 
    padding: 20px; 
 
} 
 
div#brand-bio { 
 
    width: 30%; 
 
    min-width: 160px;/* set any min-width */ 
 
    float: left; 
 
    margin-left: 30px; 
 
    position: sticky; 
 
    top: 0px; 
 
} 
 
.clear { 
 
    clear: both; 
 
} 
 
div#sticker { 
 
    padding: 0; 
 
    margin: 0 30px 0 0; 
 
    background: #FC0; 
 
    padding: 20px; 
 
} 
 
#catalogue { 
 
    background: #999999; 
 
    height: 1000px; 
 
    width: 100%; 
 
}
<div id="wrapper"> 
 

 
    <div id="brand-bio"> 
 
    <!--<h2>brand bio</h2> 
 
     <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum.</p>--> 
 
    <div id="sticker"> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
     <p>stuff</p> 
 
    </div> 
 
    </div> 
 

 
    <div id="brand-detail"> 
 
    <h1>Main Content</h1> 
 
    <p>Here's some content, but that's not really important. The sidebar has a div a few lines down with an ID of &quot;sticker&quot;. Once this div gets to the top of the page, it will stick there. This is a great way to show advertisements without worrying 
 
     that your audience may quickly scroll past them. Could also play nicely as navigation helpers.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    <p>Fusce fringilla venenatis enim. Etiam vel risus vitae orci aliquet pharetra. Suspendisse vel eros a tortor ultrices luctus eget et ante. Integer nec odio ipsum. Duis eu felis ut elit cursus pellentesque. Etiam elementum eleifend molestie. Aenean pretium 
 
     dolor sit amet massa iaculis ultrices congue mauris molestie. Aenean elit metus, facilisis non semper sed, lobortis eget mauris. Quisque molestie ultrices odio eget lobortis. Fusce a ultrices nulla. In hac habitasse platea dictumst. Sed elementum 
 
     magna lorem. Vestibulum arcu nibh, rutrum porttitor pretium at, laoreet sed mi. Integer eu lacus lorem, vitae euismod felis. Vivamus sit amet orci vel tortor adipiscing hendrerit vel id nunc.</p> 
 
    </div> 
 

 
    <div class="clear"></div> 
 

 
</div> 
 
<!--/wrapper--> 
 
<div id="catalogue"> 
 
    more stuff 
 

 
</div>

+0

謝謝你,我曾想要使用position:sticky,但悲傷我需要一個IE8友好的解決方案,我不認爲有一個針對IE8的pollyfill。我應該在帖子中提到這一點! –

+0

@DavidBrookes按照鏈接進行填充,將有不同的JavaScript選項:) –

+0

謝謝,這是一個很好的解決方案! –