ChatGPT解决这个技术问题 Extra ChatGPT

如果内容溢出,有一个需要滚动的固定位置 div

我实际上有两个问题,但让我们先解决主要问题,因为我相信另一个更容易解决。

我在菜单的滚动左侧有一个固定位置的 div。右侧是可以正确滚动的标准 div。问题是,当浏览器视口太小而看不到整个菜单时.. 没有办法让它滚动我能找到的(至少不能用 css)。我尝试在 css 中使用不同的溢出,但没有任何东西可以使 div 滚动。包含菜单的 div 设置为 min-height:100% 和 position:fixed.. 这两个属性我都需要保留。

包含菜单的 div 位于另一个绝对定位且高度设置为 100% 的包装器 div 内。

如果内容对于 div 来说太高,我怎样才能让它垂直滚动?

这导致我遇到另一个问题,我不希望显示滚动条..但我想我可能已经有了答案(只是它还不起作用,因为我无法让 div 滚动开始)。

有什么解决办法吗?也许需要javascript? (我对此知之甚少)

JS Fiddle Example

以及导致问题的相关代码(因为在这里发布整个内容太长了):

.fixed-content {
    min-height:100%;
    position:fixed;
    overflow-y:scroll;
    overflow-x:hidden;
} 

还尝试添加 height:100% 只是为了看看这是否是一个问题,但它也不起作用......固定高度也没有,例如 600px。

请使用您当前使用的 html 和 css 发布一个 jsfiddle,以便我们查看问题。谢谢!
你试过溢出吗:自动; ?
是的 overflow:auto 或 overflow-y:scroll 或 overflow:scroll 都不允许固定的 div 滚动。
需要滚动的原因是 div 在其定义的长度中包含太多内容。如果浏览器视口缩小,则无论如何都不会导致 div 强制滚动操作。
无法发布 JSfiddle 和 html/css,因为它太长了,而且他们不允许您在没有代码的情况下发布 JSfiddle 链接。 :( 我只发布了一段似乎没有帮助 div 滚动的代码.. 以及整个事情的链接。

M
Matilda Smeds

使用 height:100% 的问题在于它将是 100% 的页面而不是 100% 的窗口(正如您可能期望的那样)。这将导致您看到的问题,因为非固定内容足够长,可以包含 100% 高度的固定内容,而无需滚动条。浏览器不知道/关心您实际上不能向下滚动该栏以查看它

您可以使用 fixed 来完成您想要做的事情。

.fixed-content {
    top: 0;
    bottom:0;
    position:fixed;
    overflow-y:scroll;
    overflow-x:hidden;
}

你的小提琴的这个分支显示了我的修复:http://jsfiddle.net/strider820/84AsW/1/


工作。我需要这个来改编一篇 Codrops 文章。有些人可能还需要使用 left 和 right 设置为 0。非常感谢,祝你好运
如果将“overflow-y”设置为自动,当内容在视口内时滚动条将消失。换句话说,如果它没有溢出,就没有滚动条,当它溢出时,就会有一个滚动条。
正确的。我只是在使用他的 css 并修复真正损坏的东西。不过,他似乎已经在他的问题中找到了答案。
工作!很好的解决方案。我仍然没有得到底部:0 部分..你能解释一下吗?
添加 top:0 和 bottom:0 而在位置固定元素中省略高度会导致浏览器拉伸元素以使顶部位于 0 且底部位于 0。
A
Adebola

这里的解决方案对我不起作用,因为我正在设计反应组件。

对侧边栏有用的是

.sidebar{
position: sticky;
top: 0;
}

希望这可以帮助某人。


我多年来一直在编辑 CSS,但对“粘性位置”属性一无所知。感谢这一点,也非常适合我的实施!
可爱的解决方案。谢谢!
天才!我只知道绝对、相对和固定。永远不知道是否有粘性位置。
谢谢 !我一直在寻找如何做到这一点已经 2 小时了!
O
Oleksa O.

一般来说,固定部分应设置widthheighttopbottom属性,否则无法识别其大小和位置。

如果使用的框是 body 的直接子框并且有邻居,那么检查 z-indextop, left 属性是有意义的,因为它们可能会相互重叠,这可能会影响滚动内容时的鼠标悬停。

以下是与移动导航一起使用的内容框(body 标记的直接子代)的解决方案。

.fixed-content {
    position: fixed;
    top: 0;
    bottom:0;

    width: 100vw; /* viewport width */
    height: 100vh; /* viewport height */
    overflow-y: scroll;
    overflow-x: hidden;
}

希望它可以帮助任何人。谢谢!


正是我需要的。谢谢!
i
ignacioricci

这是两个修复程序。

首先,关于固定侧边栏,您需要给它一个高度以使其溢出:

HTML 代码:

<div id="sidebar">Menu</div>
<div id="content">Text</div>

CSS 代码:

body {font:76%/150% Arial, Helvetica, sans-serif; color:#666; width:100%; height:100%;}
#sidebar {position:fixed; top:0; left:0; width:20%; height:100%; background:#EEE; overflow:auto;}
#content {width:80%; padding-left:20%;}

@media screen and (max-height:200px){
    #sidebar {color:blue; font-size:50%;}
}

实时示例:http://jsfiddle.net/RWxGX/3/

如果您的内容超出了 div 的高度,则不可能没有滚动条。这就是为什么我添加了屏幕高度的媒体查询。也许您可以针对短屏幕尺寸调整样式,这样就不需要出现滚动了。

干杯,伊格纳西奥


请参阅我发布的 JSFiddle 示例。你会看到问题。
这在旧版浏览器中不起作用,例如 iOS 4.2 的 Mobile Safari
S
Siddhesh T

为任何想要做类似但水平方向的事情的人留下答案,就像我想要的那样。

像下面这样调整 @strider820 的答案会产生神奇的效果:

.fixed-content {        //comments showing what I replaced.
    left:0;             //top: 0;
    right:0;            //bottom:0;
    position:fixed;
    overflow-y:hidden;  //overflow-y:scroll;
    overflow-x:auto;    //overflow-x:hidden;
}

而已。另请检查此 comment,其中 @train 使用 overflow:auto 而不是 overflow:scroll 进行了解释。