如何将div滚动条放在左侧?


Answers:


55

工作示例:JSFiddle

要么

适用于所有主要浏览器的剪切和粘贴解决方案(甚至是Safari)

任何高度或宽度都可以

<style>
  .list_container {
    direction: rtl;
    overflow:auto;
    height: 50px;
    width: 50px;
  }

  .item_direction {
    direction:ltr;
  }
</style>
<div class="list_container">
  <div class="item_direction">1</div>
  <div class="item_direction">2</div>
  <div class="item_direction">3</div>
  <div class="item_direction">4</div>
  <div class="item_direction">5</div>
  <div class="item_direction">6</div>
  <div class="item_direction">7</div>
  <div class="item_direction">8</div>
  <div class="item_direction">9</div>
  <div class="item_direction">10</div>
  <div class="item_direction">11</div>
  <div class="item_direction">12</div>
</div>

(可选)添加class="item_direction到每个项目中,以更改文本回流的方向,同时保留容器的方向。



3
附带说明:该答案不是有效的HTML,因为它具有重复的ID。它应该是class="item_direction"代替id="item_direction".item_direction {代替的#item_direction {
movabo '18

2
抱歉,我迅速做出回应,并犯了一个错误,您是正确的,我已经更新了答案。
jasonleonhard

您还可以使用其他CSS规则来重置所有直接子代的方向:.list_container > * { direction: ltr; }
Erich Schreiner

74

您可以尝试direction:rtl;使用CSS。然后在内部重置文本方向div

#scroll{
    direction:rtl; 
    overflow:auto; 
    height:50px; 
    width:50px;}

#scroll div{
    direction:ltr;
}

未经测试。


2
我认为IE和Opera是唯一将滚动条放在RTL内容左侧的浏览器。
乔伊,

2
@Joey也不是真的在ubuntu下使用Chrome
Tom

我想确认Chrome 32在左侧的位置。在这一点上,Firefox在CSS中落后是不足为奇的
George Mauer 2014年

1
在chrome / mac和firefox / mac上工作,但不在safari / mac上工作
maxime schoeni

1
@GeorgeMauer Mozilla故意在右侧滚动条上显示RTL内容。当时,我们认为如果用户必须根据当前页面内容更改其肌肉记忆,那将是一个可用性问题。我参与了该讨论,可以在Mozilla的Bugzilla中找到。
Tsahi Asher

32

我也有同样的问题。但是当我添加direction: rtl;标签和手风琴组合时,却使我的结构崩溃。

做到这一点的方法是将divdirection: rtl;作为父元素添加,对于子div set进行添加direction: ltr;

我首先使用这个https://api.jquery.com/wrap/

$( ".your selector of child element" ).wrap( "<div class='scroll'></div>" );

然后只需使用CSS :)

在儿童div中添加到CSS

 .your_class {
            direction: ltr;    
        }

并添加到jQuery通过类.scroll添加的父div

.scroll {
            unicode-bidi:bidi-override;
            direction: rtl;
            overflow: scroll;
            overflow-x: hidden!important;
        }

对我有效

http://jsfiddle.net/jw3jsz08/1/


或者,您可以像这样执行CSS:.scrollBarOnLeft {unicode-bidi:bidi-override; 方向:rtl;溢出:滚动;溢出-x:隐藏!重要; } .scrollBarOnLeft> div {方向:ltr; } .scrollBarOnLeft> div> div {}
john ktejik

30

有点老问题了,但我想我应该提出一种在提出这个问题时并不广泛使用的方法。

您可以transform: scaleX(-1)在父级上使用现代浏览器中的滚动条一侧<div>,然后应用相同的转换来反转子级“ sleeve”元素。

的HTML

<div class="parent">
  <div class="sleeve">
    <!-- content -->
  </div>
</div>

的CSS

.parent {
  overflow: auto;
  transform: scaleX(-1); //Reflects the parent horizontally
}

.sleeve {
  transform: scaleX(-1); //Flips the child back to normal
}

注意:您可能需要对于IE 9的浏览器使用-ms-transform-webkit-transform前缀。选中CanIUse并单击“显示全部”以查看较旧的浏览器要求。


3
这是最出色的解决方案之一。
米隆(Miron)2009年

1
谢谢!据我了解,更改文本方向也是可行的。transform属性只是感觉更...优雅?至少在语义上更正确。:)
Dom Ramirez

2
我想您也会从使用此方法的一些GPU增强中受益。我从屏幕的右侧进入菜单,但不希望页面滚动条旁边的菜单滚动条...太令人困惑了。与方向切换相比,使用此方法获得的动画杂音更少。
戴文·史都德

我喜欢这样的人..谢谢男人
Hady Shaltout 18-4-23

2
也可以使用此方法将水平滚动条放在顶部:transform: scaleY(-1)
Daniel Williams

9

不,没有任何其他问题,您就无法更改滚动条的位置。

您可以将文本方向更改为从右到左(rtl),但是它也可以更改块内的文本位置。

该代码可以为您提供帮助,但是我不确定它是否可以在所有浏览器和操作系统中使用。

<element style="direction: rtl; text-align: left;" />

我认为IE和Opera是唯一将滚动条放在RTL内容左侧的浏览器。
乔伊,

0

这是使右侧滚动条正常工作的方法。唯一需要考虑的是使用“ direction:rtl”时,整个表也需要更改。希望这能给您一个思路。

例:

<table dir='rtl'><tr><td>Display Last</td><td>Display Second</td><td>Display First</td></table>

检查此:JSFiddle


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.