没有固定高度的滚动条/带滚动条的动态高度

Gui*_*meS 37 html css scrollbar

我有这个HTML结构:

<div id="body">
    <div id="head">
        <p>Dynamic height without scrollbar</p>
    </div>
    <div id="content">
        <p>Dynamic height with scrollbar</p>
    </div>
    <div id="foot">
        <p>Fixed height without scrollbar</p>
    </div>  
</div>
Run Code Online (Sandbox Code Playgroud)

我希望主要部分(#body)中的三个部分没有溢出.所以我需要一个中间部分的滚动条.

我试过这个CSS:

#content{
    border: red solid 1px;
    overflow-y: auto;
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

#content{
    border: red solid 1px;
    overflow-y: auto;
    height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用.

我在JSFiddle上做了一个例子.

我只能用CSS和HTML做到这一点吗?我宁愿避免使用Javascript.

mty*_*aka 51

Flexbox是一种现代替代方案,可让您在没有固定高度或JavaScript的情况下执行此操作.

设置display: flex; flex-direction: column;在容器上,并flex-shrink: 0;在页眉和页脚的div的伎俩:

http://jsfiddle.net/cvmrvfhm/1/

  • 我认为这不是正确的答案.没有固定高度的身体元素,它将无法工作. (8认同)
  • 您仍然在身体上使用固定高度。 (4认同)
  • 我认为这个回复应该被接受为CSS3的答案. (2认同)
  • @Equanox 容器的有限高度是重点,否则所有三个部分都会简单地垂直扩展并且不需要滚动条。请注意,它可以是“max-height”而不是固定的“height”。 (2认同)
  • 这里的要点是`#content`元素没有固定的高度.`#body`元素的固定高度只是为了证明`#content` div在高度受限时自动收缩,但你也可以从`#body`中删除固定高度,或者用类似的东西替换它`max-height:100%`. (2认同)

小智 15

我有 PrimeNG p_Dialog 内容的类似问题,我通过以下样式修复了 contentStyle

height: 'calc(100vh - 127px)'
Run Code Online (Sandbox Code Playgroud)


San*_*tra 7

用这个:

style =“最大高度:300像素;溢出:自动;”

避免固定高度

  • 仅在正确设置高度时滚动才起作用?不能单独使用“ max-height”。 (2认同)

Phi*_*van 5

你必须指定一个固定的高度,你不能使用100%,因为没有什么可以比较,如height=100%什么?

编辑小提琴:

http://jsfiddle.net/6WAnd/4/

  • 另一个 div 的高度 = 100%,有什么问题?没有它这个插件是没用的。我们需要响应能力 (3认同)
  • 如果没有JS,你会发现在一个固定的身体中,两个动态高度部分相互上方很难! (2认同)

小智 5

 <div id="scroll">
    <p>Try to add more text</p>
 </div>
Run Code Online (Sandbox Code Playgroud)

这是 css 代码

#scroll {
   overflow-y:auto;
   height:auto;
   max-height:200px;
   border:1px solid black;
   width:300px;
 }
Run Code Online (Sandbox Code Playgroud)

这是演示JSFIDDLE


小智 5

扩展@mtyaka使用flexbox的答案,如果你的滚动条在dom深处,需要对所有父元素使用overflow: auto/hidden,直到我们得到固定的高度

jsfiddle https://jsfiddle.net/rohilaharsh/cuazdnkh/1/

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dynamic Container</title>
</head>
<body>
    <div class="one">
    One
        <div class="two">
    Two
            <div class="three">
      Three
                <div class="table">
          Table
                    <div class="header">Table Header</div>
                    <div class="body">Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure maiores corporis quisquam enim at nam earum non atque dolorum nulla quidem perferendis, porro eveniet! Quisquam, fugit ex aspernatur, aliquid necessitatibus amet aperiam pariatur facilis suscipit ea dolorum qui ratione assumenda eum minima. At a ullam magnam eveniet, hic sit quis dicta perferendis excepturi nemo voluptate ipsum doloremque expedita illo dolor voluptates culpa consequuntur quaerat porro reprehenderit ab alias! Maxime reprehenderit nihil doloribus exercitationem, cupiditate quasi dolorum voluptas repellendus vel fugit incidunt praesentium molestias modi numquam! Quo porro laudantium aperiam suscipit, molestiae quibusdam veniam cum nam fuga facere fugit quisquam distinctio!</div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS:

html {
  height: 100%;
}

html, body, .one,.two,.three,.table {
  display: flex;
  flex-direction: column;
  
  /* important */
  overflow: hidden;
  
  flex: 1;
  margin: 0;
}

.body {
  width: 200px;
  overflow: auto;
}
Run Code Online (Sandbox Code Playgroud)