📜  css 嵌套滚动条 - CSS (1)

📅  最后修改于: 2023-12-03 15:00:08.659000             🧑  作者: Mango

CSS 嵌套滚动条

很多时候,我们需要在一个区域内嵌套另一个需要滚动的区域。此时我们常常需要用到 CSS 嵌套滚动条。

HTML 结构

为了实现嵌套滚动条,我们需要使用以下 HTML 结构:

<div class="scroll-container">
  <div class="scroll-content">
    <!-- 嵌套需要滚动的内容 -->
  </div>
</div>

scroll-container 作为容器,设置给它的 heightwidth 决定了它的大小。而 scroll-content 作为需要嵌套滚动的内容,它的大小通常是由内容本身决定的。

CSS 样式

在 CSS 中,我们需要针对 scroll-container 进行一系列的样式设置,才能实现嵌套滚动条。以下是一些通用的样式设置:

.scroll-container {
  position: relative;
  overflow: hidden;
}

.scroll-content {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  overflow-y: auto;
  margin-right: -17px;
  padding-right: 17px;
}

其中,position 值为 relativescroll-container 定义为相对定位,以便 scroll-content 能够以绝对定位的方式定位到它的顶部和左侧。

scroll-content 定义了绝对定位和 topleftrightbottom 属性值为 0,使其填满整个 scroll-container 区域,而 overflow-y 属性被设置为 auto,它表示当内容超过容器的大小时,显示垂直滚动条。

需要注意的是,由于浏览器的默认设置,滚动条占据了一定的宽度,会导致容器会因此出现水平滚动条,所以我们需要使用负值的 margin-right 和正值的 padding-right 计算滚动条占据的宽度并修复这个问题。

示例代码
<div class="scroll-container">
  <div class="scroll-content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent a odio malesuada, venenatis diam quis, venenatis lacus. Donec et semper ex, vel aliquet odio. Sed sodales ante ac nibh cursus, et vulputate ex consequat. Fusce nisi tellus, laoreet id sapien in, ullamcorper fermentum metus. Suspendisse potenti. Pellentesque vulputate justo ut leo rhoncus bibendum. Quisque accumsan ante ante, ac condimentum leo pulvinar nec. Quisque venenatis aliquet justo, a vestibulum est maximus in. Praesent vitae risus nec magna pretium vehicula non non magna. Vivamus a luctus augue, vitae volutpat nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.</p>
    <p>Nullam ut libero non augue volutpat congue a non purus. Praesent tincidunt volutpat nulla, sed facilisis nulla. Morbi eget quam massa. Integer rutrum mauris mauris, vel laoreet arcu fringilla vitae. Morbi in magna tincidunt, lobortis metus nec, tincidunt massa. Duis at vestibulum ex. Ut bibendum elit tortor, in varius arcu hendrerit a. Proin eros tortor, faucibus nec metus et, tristique maximus elit. Nam sagittis consectetur faucibus. Sed purus tellus, bibendum et rutrum ac, maximus at ligula. Fusce ac turpis semper, auctor purus non, vehicula arcu. Nunc congue velit id felis tempus, nec tincidunt metus volutpat. Sed eget mi eu neque ultricies elementum sed eget diam.</p>
    <p>In hac habitasse platea dictumst. Vivamus in ipsum eu orci faucibus rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Proin a eros iaculis, dignissim magna ut, bibendum elit. Vestibulum hendrerit elit nisl, ut dictum massa placerat eget. Sed vel leo et velit rutrum aliquet. Nullam vel justo id dolor congue porttitor at ac mauris. Pellentesque bibendum augue eu metus iaculis, sit amet fermentum libero maximus. Curabitur blandit, eros eu convallis blandit, nibh nulla euismod metus, eget finibus nisl metus eget tortor. Pellentesque mollis efficitur quam, quis pretium tellus ultrices et. Quisque sagittis, neque id sodales auctor, arcu mauris laoreet turpis, non volutpat arcu ante non eros. Etiam quis lorem velit. Nullam tincidunt lorem efficitur felis tristique porta quis auctor sem.</p>
    <p>Mauris egestas eget arcu cursus ornare. Sed condimentum augue sit amet magna varius, non volutpat nulla congue. Quisque vitae massa elit. Morbi eget volutpat tellus. Nam at laoreet eros. Sed pretium, urna rutrum rhoncus posuere, nulla arcu facilisis tortor, eget finibus purus nunc sit amet nibh. Etiam sollicitudin, sapien nec malesuada tincidunt, tortor sapien interdum dui, vitae consequat urna erat vel orci. Fusce tincidunt imperdiet purus id luctus. Sed in dolor odio. Ut dolor sapien, faucibus in malesuada et, dignissim vel justo. Duis a tellus vel nisl aliquet mattis in et sapien. Cras sodales quis libero vel eleifend. Donec finibus ac metus sit amet accumsan. Nulla vestibulum lorem velit, at interdum quam faucibus eget.</p>
    <p>Curabitur dictum justo vel malesuada posuere. Maecenas eget hendrerit libero, id aliquet urna. Vivamus eleifend dignissim ex. Donec commodo mattis gravida. Nullam eu velit luctus, venenatis nibh vel, euismod dui. Praesent ut felis in odio pretium consectetur ut sed velit. Curabitur sem odio, ultrices ut lectus ac, iaculis malesuada sapien. Donec luctus, sapien quis convallis gravida, diam nibh faucibus ipsum, eget tempus turpis elit eu elit. Pellentesque euismod, est et malesuada pretium, magna nunc congue arcu, id volutpat neque urna nec mauris. Aenean libero nisi, maximus sed ex vel, mattis malesuada mauris. Sed vel lobortis ipsum. Mauris vitae massa quis nunc viverra bibendum. Aliquam erat volutpat. Nam blandit lacinia aliquet. Sed ornare pellentesque elit in molestie.</p>
    <p>Etiam sodales turpis justo, eu lobortis ante aliquet sit amet. Donec ullamcorper tortor a dolor accumsan, nec blandit nisi dictum. Praesent vel cursus urna. Cras a molestie mi. Nunc in sollicitudin est, vitae fringilla sapien. In eu egestas augue, vel malesuada metus. Proin gravida lacus quis accumsan faucibus. Sed at molestie lectus. Pellentesque sed ultrices justo, a consequat arcu. Sed in tempus mauris, vel tempor turpis. Maecenas laoreet sed lectus id volutpat. Donec semper bibendum orci in cursus.</p>
    <p>Mauris at arcu a nunc pulvinar posuere et sed enim. Fusce nec massa tellus. In et felis vitae sem interdum aliquet. Aliquam erat volutpat. Vestibulum ut odio bibendum, porttitor libero et, tincidunt lorem. Quisque suscipit aliquam odio, id feugiat magna sodales ut. Sed dignissim, ex ut volutpat tincidunt, diam massa varius lacus, eu pellentesque ante nibh a purus. Etiam vel suscipit sapien. Proin fringilla, ipsum eget imperdiet malesuada, felis mauris convallis metus, a bibendum dolor orci nec mauris. Donec convallis, augue eu bibendum mattis, arcu mauris bibendum mauris, sed congue metus arcu sed dolor. Donec vitae lacus maximus, consectetur leo eu, mattis dolor. Vestibulum rhoncus elit vel elit finibus malesuada. Sed sit amet metus convallis, placerat felis in, porta tellus. Fusce et mi augue. In at metus pharetra, volutpat quam eget, auctor purus. Aenean auctor volutpat sapien, at blandit arcu vehicula eget. Donec id ex non augue consequat aliquam.</p>
  </div>
</div>

##总结

使用 CSS 嵌套滚动条来实现嵌套区域的滚动功能,可以使你的页面看起来更加整洁和易于阅读。希望以上内容能够对你有所帮助。