2017-05-03 126 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/