【问题标题】:Native scrollbars inside absolutely positioned element绝对定位元素内的原生滚动条
【发布时间】:2012-09-10 23:07:47
【问题描述】:

我在使用 position: absolute 的元素上遇到了一些滚动条问题。我遇到的行为是 chrome 21 和 firefox 15 在框中显示滚动条,调整其内容的大小从而隐藏了一些文本,但是歌剧 12 和 internet explorer 9 也在内部显示它,但没有调整它的内容大小和调整大小而是盒子(我认为这是正确的,因为盒子没有定义宽度)。有什么解决方案可以让这 4 个浏览器看起来一样吗?

JsFiddle:http://jsfiddle.net/Kukkimonsuta/GaMD7/2/

编辑:正如 Siva Charan 指出的,当 overflow-y 设置为“滚动”时它可以正常工作,但是总是显示不需要的滚动条

编辑:我的最终解决方案基于Siva Charananonymous down voting is lame 的回答

http://jsfiddle.net/Kukkimonsuta/GaMD7/15/

function updateAutoScroll(element) {
    var $element = $(element);

    if (element.scrollHeight > element.clientHeight) 
        $element.css("overflow-y", "scroll");
    else 
        $element.css("overflow-y", "auto");
}

【问题讨论】:

  • 一点点 JavaScript 可以吗?我不希望,但也许对你没问题。
  • JavaScript 是最后的手段,我想只用 html/css 解决这个问题 :)

标签: css


【解决方案1】:

在所有浏览器中动态执行此操作的唯一方法是使用 JavaScript,为简单起见,我使用了 jQuery。

http://jsfiddle.net/iambriansreed/mYuQx/

$(function(){

    // loops through each container
    $('.container').each(function(){                
        if(this.scrollHeight>this.clientHeight)
            $(this).children().wrapAll(
                '<div style="padding-right:'+scrollbarWidth()+'px;"/>'
            );
    });

    // gets the browsers current scrollbar width
    function scrollbarWidth() {
        var parent, child, width;    
        if(width===undefined) {
            parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');
            child = parent.children();
            width = child.innerWidth() - 
                child.height(99).innerWidth();
            parent.remove();
        }    
        return width;
    };

});

【讨论】:

  • 很好,这样的事情就可以了。谢谢
【解决方案2】:

overflow-y: scroll; 添加到.container.two

.container.two {
    top: 250px;
    overflow-y: scroll;
}

参考LIVE DEMO

更新:

如果你觉得舒服,可以使用text-overflow: ellipsis;,把&amp;nbsp;替换成实际空间

【讨论】:

  • 嗯,首先它不应该溢出,这就是我认为的重点。
  • 谢谢,但我忘了说,只有当项目太多时才显示滚动条,并且交换应该由 css 自动控制。
  • @LukášNovotný:您可以尝试使用text-overflow: ellipsis;
  • 水平溢出不是我需要显示整行的问题。那些&amp;nbsp; 在那里是因为我遇到了另一个问题,它将每个按钮分成多行,但是在这个例子中似乎没有表现出来。
【解决方案3】:

这更像是一种解决方法,而不是实际的解决方案,但它可能已经足够好了。基本上,首先将container two 的内容包装在另一个div 中,并为其添加一些右填充。确保您还在.item 中设置了width: 100%

这是您演示的修改版本:little link

这并不完美,但我希望它有所帮助!

【讨论】:

  • 谢谢,但这在浏览器之间仍然不一致。 Chrome 和 Firefox 不会隐藏内容(这很好),但 Opera 和 IE9 会显示多余的空间。此外,解决方案必须是动态的,因为在呈现 html 时我不知道内容是否会溢出。
  • @LukášNovotný 是的,我想这会发生:-|。我认为您必须使用 JavaScript,但我希望其他人能提出更好的解决方案,因为我也想知道如何解决这个问题。
  • @Abody97,感谢您让我开始这样做:stackoverflow.com/a/12353963/144665
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
相关资源
最近更新 更多