Wie positioniere ich eine Div-Bildlaufleiste auf der linken Seite?

82

Ist es möglich, eine Position (linke oder rechte Seite) für die Platzierung einer vertikalen Bildlaufleiste auf einem Div anzugeben?

Schauen Sie sich zum Beispiel diese Seite an, auf der erklärt wird, wie das Überlaufattribut verwendet wird. Gibt es eine Möglichkeit, diese Bildlaufleiste auf der linken Seite des scrollbaren Bereichs zu platzieren?

Andrew Fielden
quelle
Schauen Sie sich diesen Thread an. Zeigt einige der Einschränkungen, die ich fürchte. stackoverflow.com/questions/5123417/…
Graeme Leighfield
2
Mögliches Duplikat der HTML-Element-Bildlaufleiste links
Peirix

Antworten:

55

Arbeitsbeispiel: JSFiddle

oder

Lösung zum Ausschneiden und Einfügen, die für alle gängigen Browser geeignet ist (auch für Safari)

Jede Höhe oder Breite wird funktionieren

<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>

Optional class="item_directionzu jedem Element hinzufügen , um die Richtung des Textflusses zu ändern, wobei die Containerrichtung beibehalten wird.

jasonleonhard
quelle
Gerne zu verpflichten.
Jasonleonhard
3
Als Randnotiz: Diese Antwort ist kein gültiger HTML-Code, da sie doppelte IDs enthält. Es sollte class="item_direction"statt id="item_direction"und .item_direction {statt sein #item_direction {.
Movabo
2
Entschuldigung, ich habe schnell geantwortet und einen Fehler gemacht. Sie haben Recht und ich habe meine Antwort aktualisiert.
Jasonleonhard
Sie können auch eine andere CSS-Regel verwenden, um die Richtung für alle direkten Kinder zurückzusetzen:.list_container > * { direction: ltr; }
Erich Schreiner
73

Sie könnten es direction:rtl;in Ihrem CSS versuchen . Setzen Sie dann die Textrichtung im Inneren zurückdiv

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

#scroll div{
    direction:ltr;
}

Ungetestet.

Jason Gennaro
quelle
2
Ich denke, IE und Opera sind die einzigen Browser, die die Bildlaufleiste für RTL-Inhalte links platzieren.
Joey
2
@ Joey nicht wahr auch Chrom unter Ubuntu
Tom
Ich möchte bestätigen, dass Chrome 32 links positioniert ist. Und an diesem Punkt ist es nicht verwunderlich, dass Firefox ein Nachzügler in CSS ist
George Mauer
1
Arbeiten an Chrome / Mac und Firefox / Mac, aber nicht an Safari / Mac
Maxime Schöni
1
@GeorgeMauer Mozilla hat die Bildlaufleiste rechts für RTL-Inhalte absichtlich verlassen. Zu der Zeit glaubten wir, dass es ein Usability-Problem wäre, wenn der Benutzer sein Muskelgedächtnis basierend auf dem aktuellen Seiteninhalt ändern müsste. Ich habe an dieser Diskussion teilgenommen, die in Mozillas Bugzilla zu finden ist.
Tsahi Asher
32

Ich habe das gleiche Problem. aber wenn ich direction: rtl;Tabs und Akkordeon Combo hinzufüge , stürzt es aber meine Struktur ab.

Der Weg, dies zu tun, ist das Hinzufügen von div mit direction: rtl;als übergeordnetem Element und für das untergeordnete div-Set direction: ltr;.

Ich benutze diese erste https://api.jquery.com/wrap/

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

dann arbeite einfach mit css :)

Bei Kindern div zu CSS hinzufügen

 .your_class {
            direction: ltr;    
        }

Und zum übergeordneten Div, das von jQuery mit der Klasse .scroll hinzugefügt wurde

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

Arbeitet Präfekt für mich

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

user1597594
quelle
Oder Sie könnten CSS wie folgt ausführen: .scrollBarOnLeft {unicode-bidi: bidi-override; Richtung: RTL; Überlauf: scrollen; overflow-x: versteckt! wichtig; } .scrollBarOnLeft> div {direction: ltr; } .scrollBarOnLeft> div> div {}
John Ktejik
30

Eine Art alte Frage, aber ich dachte, ich sollte eine Methode einführen, die nicht allgemein verfügbar war, als diese Frage gestellt wurde.

Sie können die Seite der Bildlaufleiste in modernen Browsern mithilfe transform: scaleX(-1)eines übergeordneten <div>Elements umkehren und dann dieselbe Transformation anwenden, um ein untergeordnetes "Ärmel" -Element umzukehren.

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
}

Hinweis: Möglicherweise müssen Sie ein -ms-transformoder ein -webkit-transformPräfix für Browser verwenden, die so alt sind wie IE 9. Aktivieren Sie CanIUse und klicken Sie auf "Alle anzeigen ", um ältere Browseranforderungen anzuzeigen .

Dom Ramirez
quelle
3
Dies ist eine der herausragendsten Lösungen.
Miron
1
Vielen Dank! Soweit ich weiß, funktioniert auch das Ändern der Textrichtung. Die Transformationseigenschaft fühlt sich einfach ... eleganter an? Zumindest ist es semantisch korrekter. :)
Dom Ramirez
2
Ich denke, Sie profitieren auch von einigen GPU-Verbesserungen mit dieser Methode. Ich fliege in einem Menü von der rechten Seite des Bildschirms und möchte nicht, dass die Bildlaufleiste des Menüs neben der Bildlaufleiste der Seite angezeigt wird ... zu verwirrend. Ich bekomme damit weniger Animationsruck als beim Richtungswechsel.
Davin Studer
Ich mag das ein LOOOT .. Danke Mann
Hady Shaltout
2
Diese Methode kann auch verwendet werden, um die horizontale Bildlaufleiste oben zu platzieren:transform: scaleY(-1)
Daniel Williams
9

Nein, Sie können die Platzierung der Bildlaufleisten nicht ohne zusätzliche Probleme ändern.

Sie können die Textrichtung von rechts nach links (rtl) ändern, aber auch die Textposition innerhalb des Blocks.

Dieser Code kann Ihnen helfen, aber ich bin nicht sicher, ob er in allen Browsern und Betriebssystemen funktioniert.

<element style="direction: rtl; text-align: left;" />
Artem Oliynyk
quelle
Ich denke, IE und Opera sind die einzigen Browser, die die Bildlaufleiste für RTL-Inhalte links platzieren.
Joey
0

Folgendes habe ich getan, damit die rechte Bildlaufleiste funktioniert. Das einzige, was berücksichtigt werden muss, ist, wenn 'direction: rtl' verwendet wird und die gesamte Tabelle ebenfalls geändert werden muss. Hoffentlich gibt Ihnen dies eine Idee, wie es geht.

Beispiel:

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

Überprüfen Sie dies: JSFiddle

Li Kia Chiu
quelle