DIV垂直滚动条左侧

时间:2009-09-21 17:23:11

标签: javascript html css

是否可以使用css将DIV的垂直滚动条放在div的左侧? jscript怎么样?

3 个答案:

答案 0 :(得分:53)

我有一个简单的用例,因此选择了简单的css解决方案:

<div style="direction: rtl; height: 250px; overflow: scroll;">
  <div style="direction: ltr; padding: 3px;">
     Content goes here
  </div>
</div>

答案 1 :(得分:11)

您可以使用JQuery和此插件在任意位置添加伪滚动条:JScrollPane

答案 2 :(得分:10)

好的,所以,我写了一个jQuery插件,给你一个完全原生的左滚动条。

Left Scrollbar Hack Demo

以下是它的工作原理:

  1. 在窗格内注入内部div以允许计算内容宽度(content_width)。然后,使用此方法,可以计算原始滚动条宽度:scrollbar_width = parent_width - content_width - horizontal_padding

  2. 在窗格内创建两个不同的divs,两者都填充了内容。

    • 一个人的目的是成为一个“装腔作势者”。它仅用 作为滚动条。使用负左边距,插件将其向左拉,以便只有滚动条在视图中(此div的内容在边缘处被剪掉)。

    • 其他div用于存放可见的滚动内容。

  3. 现在,是时候把两者绑在一起了。每隔50毫秒(window.setInterval),“poser”scrollTop的{​​{1}}偏移量将应用于可见的滚动内容div。因此,当您使用左侧上的滚动条向上或向下滚动时,滚动偏移将应用于具有可见内容的div

  4. 这个解释可能很糟糕,实际上还有一点我没有描述,但是,不用多说,这里是:

    div

    在页面中包含jQuery和此插件后,请应用左侧滚动条:

    $.fn.leftScrollbar = function(){
        var items = $(this);
        $(function(){
            items.each(function(){
                var e = $(this);
                var content = e.html();
                var ie = !jQuery.support.boxModel;
                var w = e[ie?'innerWidth':'width'](), h = e[ie?'innerHeight':'height']();
                //calculate paddings
                var pad = {};
                $(['top', 'right', 'bottom', 'left']).each(function(i, side){
                    pad[side] = parseInt(e.css('padding-' + side).replace('px',''));
                });
                //detect scrollbar width
                var xfill = $('<div>').css({margin:0, padding:0, height:'1px'});
                e.append(xfill);
                var contentWidth = xfill.width();
                var scrollerWidth = e.innerWidth() - contentWidth - pad.left - pad.right;
                e.html('').css({overflow:'hidden'});
                e.css('padding', '0');
    
                var poserHeight = h - pad.top - pad.bottom;
                var poser = $('<div>')
                    .html('<div style="visibility:hidden">'+content+'</div>')
                    .css({
                        marginLeft: -w+scrollerWidth-(ie?0:pad.left*2),
                        overflow: 'auto'
                    })
                    .height(poserHeight+(ie?pad.top+pad.bottom:0))
                    .width(w);
    
                var pane = $('<div>').html(content).css({
                    width: w-scrollerWidth-(ie?0:pad.right+pad.left),
                    height: h-(ie?0:pad.bottom+pad.top),
                    overflow: 'hidden',
                    marginTop: -poserHeight-pad.top*2,
                    marginLeft: scrollerWidth
                });
    
                $(['top', 'right', 'bottom', 'left']).each(function(i, side){
                     poser.css('padding-'+side, pad[side]);
                     pane.css('padding-'+side, pad[side]);
                });
                e.append(poser).append(pane);
    
                var hRatio = (pane.innerHeight()+pad.bottom) / poser.innerHeight();
                window.setInterval(function(){
                    pane.scrollTop(poser.scrollTop()*hRatio);
                }, 50);
            });
        });
    };
    

    $('#scrollme').leftScrollbar(); 替换为您希望应用左侧滚动条的元素的CSS选择器。

    (显然,这会很好地降级)