2017-05-03 185 views
2

我試圖但我沒有想出解決這個相當簡單的問題。滾動只有一個div的內容與主滾動條

基本上我想要的是擁有一個固定的主體,以垂直和水平居中的矩形div來託管我的內容。身體不會滾動,但div的內容應該。

換句話說,我要做的是基本上有一個完整的頁面,底層的整個背景(比如一個全寬圖像)和一個在這個背景層之上託管我的內容的div,獨立滾動。

我在我的代碼是什麼基本上三個嵌套的層:

1)的主體(溢出:隱藏),2)全寬透明容器(溢出-γ:滾動)和3)爲中心的div這應該是我的所有內容(位置:絕對)。

問題是,什麼都不滾動。如果我嘗試將overflow-y:scroll或auto添加到居中的div,那麼會出現一個醜陋的滾動條,而這不是我想要的 - 我想使用「main」滾動條進行滾動。

html, body { 
 
    margin: 0; 
 
    background-color: lightgray; 
 
    overflow: hidden; 
 
} 
 

 
.container { 
 
    overflow-y: scroll; 
 
    width: 100%; 
 
    height: 100vh; 
 
    background-color: red; 
 
} 
 

 
.overlay { 
 
    position: absolute; 
 
    width: 90%; 
 
    height: 90vh; 
 
    background-color: lightgrey; 
 
    margin: auto; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    -webkit-box-shadow: 0px 0px 60px -2px rgba(0, 0, 0, 0.75); 
 
    -moz-box-shadow: 0px 0px 60px -2px rgba(0, 0, 0, 0.75); 
 
    box-shadow: 0px 0px 60px -2px rgba(0, 0, 0, 0.75); 
 
    z-index: 10; 
 
}
<section class="container"> 
 
    <div class="overlay"> 
 
    <h1>Lorem Ipsum </h1> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vulputate 
 
    arcu sit amet quam malesuada, maximus ornare quam facilisis. Fusce eu lectus 
 
    sapien. Nunc condimentum, neque ut porta tincidunt, sem mi hendrerit nisi, 
 
    eget blandit elit diam nec 
 
     enim. Vivamus imperdiet nisi auctor nisl auctor, at aliquam lectus luctus. 
 
    Mauris non sem tortor. Nulla facilisi. Duis pharetra commodo tempor. Fusce 
 
    luctus posuere fringilla. Morbi molestie tortor quis lectus sodales 
 
    vulputate. Aenean pharetra interdum tellus, nec congue nisi venenatis eu. 
 
    Cras eget metus et sapien aliquam dictum eget eu massa.</p> 
 
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vulputate 
 
    arcu sit amet quam malesuada, maximus ornare quam facilisis. Fusce eu lectus 
 
    sapien. Nunc condimentum, neque ut porta tincidunt, sem mi hendrerit nisi, 
 
    eget blandit elit diam nec 
 
     enim. Vivamus imperdiet nisi auctor nisl auctor, at aliquam lectus luctus. 
 
    Mauris non sem tortor. Nulla facilisi. Duis pharetra commodo tempor. Fusce 
 
    luctus posuere fringilla. Morbi molestie tortor quis lectus sodales 
 
    vulputate. Aenean pharetra interdum tellus, nec congue nisi venenatis eu. 
 
    Cras eget metus et sapien aliquam dictum eget eu massa.</p> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vulputate 
 
    arcu sit amet quam malesuada, maximus ornare quam facilisis. Fusce eu lectus 
 
    sapien. Nunc condimentum, neque ut porta tincidunt, sem mi hendrerit nisi, 
 
    eget blandit elit diam nec 
 
     enim. Vivamus imperdiet nisi auctor nisl auctor, at aliquam lectus luctus. 
 
    Mauris non sem tortor. Nulla facilisi. Duis pharetra commodo tempor. Fusce 
 
    luctus posuere fringilla. Morbi molestie tortor quis lectus sodales 
 
    vulputate. Aenean pharetra interdum tellus, nec congue nisi venenatis eu. 
 
    Cras eget metus et sapien aliquam dictum eget eu massa.</p> 
 
    </p> 
 
    </div> 
 
</section>

這裏有一個小提琴在這裏你可以看到我要去爲:

https://jsfiddle.net/ohmlg/29mL6tnv/

我想要什麼:

1)具有div的內容在滾動時留在div內(現在,溢出:身體上的隱藏屬性切斷了部分th e內容) 2)使用主滾動條滾動div內的內容

我不能實現一個解決方法,比如有四個厚的div,右上角和左下角(基本上在中間留下一個矩形的「窗口」), ,因爲我想要兩個背景:一個在底層(body或.container),另一個在「content div」上。

+3

_「我想用‘主’身體滾動條滾動」 _ - 那麼你應該認識到,設置溢出:隱藏的身體是適得其反在關... – CBroe

+0

我不相信這是可以實現的。它可能是內容突破了'overlay' div,並且您在頁面上有滾動條,或者您需要在'overlay' div的右側有一個滾動條。 –

+0

@CBroe,不幸的是,這並沒有解決我的問題。 – mrb93

回答

2

這不是直接可行的,但它有可能使其被掩蓋某些部分似乎所以......

html { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
body { 
 
    margin: 0; 
 
    padding: 10vh 10vw; 
 
} 
 

 
body, .bg { 
 
    background-color: #ddd; 
 
    background-image: url('https://lorempixel.com/638/220/abstract/'); 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-size: cover; 
 
} 
 

 
h1 { 
 
    margin: 0 0 1rem; 
 
} 
 

 
p { 
 
    margin: 1rem 0; 
 
} 
 
p:last-child { 
 
    margin-bottom: 0; 
 
} 
 

 
#padding-top { 
 
    position: fixed; 
 
    top: 0; 
 
    right: 0; 
 
    left: 0; 
 
    width: 100vw; 
 
    height: 10vh; 
 
} 
 

 
#padding-bottom { 
 
    position: fixed; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    width: 100vw; 
 
    height: 10vh; 
 
} 
 

 
#content-outline { 
 
    position: fixed; 
 
    top: 10vh; 
 
    right: 10vw; 
 
    bottom: 10vh; 
 
    left: 10vw; 
 
    border: 1px solid #000; 
 
    box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); 
 
} 
 

 
#content { 
 
    padding: 1rem; 
 
    background-color: rgba(255, 255, 255, 0.5); 
 
}
<div id="content"> 
 
    <h1>Lorem Ipsum</h1> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sodales nunc eu est semper eleifend. Sed vulputate nulla sit amet hendrerit finibus. Donec dapibus turpis eget mauris ultricies lobortis. Curabitur in est a felis lacinia facilisis eu quis tortor. Quisque eget augue luctus, tristique ligula fermentum, efficitur sapien. Aenean ut nisi risus. Sed libero ligula, venenatis vel dictum nec, suscipit a nisl. Maecenas a lacus et urna commodo aliquam. Quisque gravida maximus ipsum nec interdum. Donec nec aliquet mauris. Phasellus laoreet sit amet erat at ornare. Donec rutrum nulla libero, eget sollicitudin ligula convallis dapibus. Donec sodales, lorem lacinia rutrum tempus, mi nunc ultricies justo, non dignissim turpis diam id urna. In suscipit gravida elit quis tristique. Vivamus quis sapien vestibulum, elementum mi in, sodales quam. Donec enim elit, lacinia vitae urna a, tincidunt sagittis nunc.</p> 
 
    <p>Nullam pretium, libero non viverra suscipit, mauris elit egestas odio, eget commodo purus ipsum vel purus. Morbi eleifend libero mauris, feugiat bibendum ante pretium id. Morbi fringilla fringilla convallis. Nulla ullamcorper dui et quam pellentesque, ut finibus dolor sodales. Donec laoreet, augue ac ornare pretium, nulla est imperdiet elit, non euismod urna mi a risus. Proin id commodo neque. Aliquam scelerisque imperdiet elementum. Phasellus dignissim rhoncus nibh, sed efficitur massa aliquam id. Curabitur sit amet turpis dictum, pellentesque leo sed, congue urna. Morbi maximus volutpat neque, vitae molestie urna ornare a. Suspendisse ut tincidunt urna.</p> 
 
    <p>Proin eget nisl at lacus placerat aliquam. Curabitur tempus consectetur nulla eu malesuada. Nulla at tortor quis erat ornare ultricies. Aenean dolor erat, tempor in risus vel, fringilla sollicitudin risus. Quisque porttitor metus eget ante ullamcorper faucibus. Curabitur placerat turpis ac aliquet rhoncus. Aenean fringilla fringilla urna, a consectetur tellus aliquet non. Sed dapibus, ex vitae lacinia sodales, ex nisl pulvinar nulla, et tempus nulla tortor at tellus. Vivamus ac consequat eros. Fusce ullamcorper leo sed malesuada tincidunt. Integer ullamcorper blandit eros in scelerisque.</p> 
 
    <p>Nunc fermentum sapien orci, id feugiat lectus aliquet gravida. Sed imperdiet posuere nulla, sed aliquam est mollis at. Donec faucibus justo at velit tincidunt elementum. Quisque eget maximus nunc, eget pulvinar mi. Donec venenatis diam erat, non porttitor sem tempus ut. Donec dictum odio sed ornare pulvinar. Aliquam ac nulla velit. Ut nec magna ut nulla ornare imperdiet id ut ante. Aliquam placerat laoreet pharetra. Donec ante purus, maximus ac nisi ullamcorper, egestas vestibulum diam. In ultricies ante a nibh vestibulum, ut gravida nulla pulvinar.</p> 
 
    <p>Suspendisse purus ex, tempus a accumsan ac, gravida eu quam. Proin venenatis est quis laoreet congue. Fusce nec efficitur dolor. Vestibulum eleifend felis non ultrices pretium. Mauris auctor eget risus non luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce varius non lacus non porttitor. Integer a turpis at lacus consequat sollicitudin. Vestibulum eget mi at enim imperdiet hendrerit ut ut nibh. Aliquam placerat sodales finibus. Nulla porttitor dolor sed nisi tincidunt vehicula a sit amet ligula. Aenean turpis ex, tempor sed urna et, tristique pretium velit. Mauris est risus, porta id dui a, tristique hendrerit odio. Sed ultricies consectetur gravida. Aenean vestibulum elit venenatis, condimentum sapien at, consectetur augue.</p> 
 
</div> 
 
<div id="padding-top" class="bg"></div> 
 
<div id="padding-bottom" class="bg"></div> 
 
<div id="content-outline"></div>

+0

謝謝,這是很好的建議;不幸的是,這不是我要找的。我要做的事情基本上是在底層(如全寬圖像)上有整頁,固定的整個背景,以及在此背景層之上託管我的內容的div,能夠滾動瀏覽器的默認滾動條。然而,看起來它是無法實現的,儘管我可以發誓我已經在一些網站上看到了這種效果。 – mrb93

+0

@ mrb93我已經更新了我的答案以包含背景圖片。這是你想要的? –

+0

我的男人!這可能是最好的方式。它就像我想要的那樣工作。 – mrb93

1

您需要將相同的溢出屬性添加到覆蓋元素

.overlay { 
     overflow-y: scroll; 
} 

取決於你想要什麼,你不是真的需要在容器上溢出,你只需要它的父元素將在這種情況下,在p溢滿

+0

謝謝,不幸的是,在我的.overlay div的右側放置了一個滾動條,我試圖避免這種情況。我想使用瀏覽器的默認滾動條進行滾動。 – mrb93

0

如果你想嘗試實現類似的東西,你可以用固定的頁眉和頁腳做到這一點。

#header { 
    background-color:red; 
    width:100vw; 
    height:20px; 
    position:fixed; 
    top:0; 
} 

#footer { 
    background-color:red; 
    width:100vw; 
    height:20px; 
    position:fixed; 
    bottom:0; 
} 

下面是一個例子 https://jsfiddle.net/10mh3tue/