Как разместить полосу прокрутки div с левой стороны?


85

Можно ли указать позицию (левую или правую) для размещения вертикальной полосы прокрутки в div?

Например, посмотрите на эту страницу, где объясняется, как использовать атрибут переполнения. Есть ли способ разместить эту полосу прокрутки в левой части прокручиваемой области?


Взгляните на эту ветку. Показывает некоторые ограничения этого, я боюсь. stackoverflow.com/questions/5123417/…
Graeme Leighfield 08

Ответы:


61

Рабочий пример: 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к каждому элементу, чтобы изменить направление потока текста назад, сохраняя при этом направление контейнера.


Рад услужить.
jasonleonhard

3
В качестве примечания: этот ответ недействителен HTML, поскольку он имеет повторяющиеся идентификаторы. Это должно быть class="item_direction"вместо id="item_direction"и .item_direction {вместо #item_direction {.
movabo

2
Извините, я быстро ответил и сделал ошибку, вы правы, и я обновил свой ответ.
jasonleonhard

1
Вы также можете использовать другое правило CSS для сброса направления для всех прямых потомков:.list_container > * { direction: ltr; }
Эрих Шрайнер

74

Вы можете попробовать direction:rtl;в своем css. Затем сбросьте направление текста во внутреннемdiv

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

#scroll div{
    direction:ltr;
}

Не проверено.


2
Я думаю, что IE и Opera - единственные браузеры, которые размещают полосу прокрутки слева для RTL-контента.
Joey

2
@Joey неправда, также хром под ubuntu
Том

Хочу подтвердить, что Chrome 32 позиции слева. И на данный момент неудивительно, что Firefox отстает в css
Джордж Мауэр

1
Работает на chrome / mac и firefox / mac, но не на safari / mac
maxime schoeni

1
@GeorgeMauer Mozilla специально оставила полосу прокрутки справа для RTL-контента. В то время мы полагали, что если пользователю придется изменять свою мышечную память в зависимости от текущего содержимого страницы, это может вызвать проблемы с удобством использования. Я принимал участие в этом обсуждении, которое можно найти в Bugzilla Mozilla.
Цахи Ашер

32

У меня та же проблема. но когда я добавляю direction: rtl;комбинацию вкладок и аккордеона, это разрушает мою структуру.

Способ сделать это - добавить div в direction: rtl;качестве родительского элемента и установить дочерний div direction: ltr;.

Я использую сначала https://api.jquery.com/wrap/

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

тогда просто работайте с css :)

У детей div добавить в css

 .your_class {
            direction: ltr;    
        }

И к родительскому div, добавленному jQuery с классом .scroll

.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 {direction: ltr; } .scrollBarOnLeft> div> div {}
john ktejik

32

Вроде старый вопрос, но я подумал, что должен добавить метод, который не был широко доступен, когда этот вопрос был задан.

Вы можете перевернуть сторону полосы прокрутки в современных браузерах, используя transform: scaleX(-1)родительский элемент <div>, а затем применить то же преобразование, чтобы перевернуть дочерний элемент, «рукав».

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
}

Примечание. Возможно, вам потребуется использовать префикс -ms-transformили -webkit-transformдля браузеров, начиная с IE 9. Установите флажок CanIUse и нажмите «показать все», чтобы увидеть требования к более старым браузерам.


3
Это одно из самых выдающихся решений.
Мирон

1
Благодаря! Насколько я понимаю, изменение направления текста тоже работает. Свойство transform кажется более ... элегантным? По крайней мере, это более семантически правильно. :)
Дом Рамирес

2
Я думаю, вы также выиграете от некоторых улучшений графического процессора, используя этот метод. Я летаю в меню с правой стороны экрана и не хочу, чтобы полоса прокрутки меню была рядом с полосой прокрутки страницы ... слишком запутанно. Я получаю меньше дрожания анимации, используя это, чем переключение направления.
Davin Studer

Мне это очень нравится .. Спасибо,
чувак,

2
Этот метод также можно использовать для размещения горизонтальной полосы прокрутки вверху:transform: scaleY(-1)
Дэниел Уильямс,

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.