Làm thế nào để định vị thanh cuộn div ở bên tay trái?


82

Có thể chỉ định một vị trí (bên trái hoặc bên phải) cho vị trí của thanh cuộn dọc trên div không?

Ví dụ: hãy xem trang này giải thích cách sử dụng thuộc tính tràn. Có cách nào để đặt thanh cuộn đó ở bên tay trái của vùng có thể cuộn không?


Hãy xem chủ đề này. Cho thấy một số hạn chế đối với điều này Tôi sợ. stackoverflow.com/questions/5123417/…
Graeme Leighfield

2
có thể trùng lặp của yếu tố thanh cuộn HTML trên bên trái
peirix

Câu trả lời:


55

Ví dụ làm việc: JSFiddle

hoặc là

Giải pháp cắt và dán hoạt động cho tất cả các trình duyệt chính (Ngay cả Safari)

Bất kỳ chiều cao hoặc chiều rộng sẽ hoạt động

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

Tùy chọn thêm class="item_directionvào từng mục để thay đổi hướng của dòng văn bản trở lại, trong khi vẫn giữ nguyên hướng vùng chứa.


Hạnh phúc vì bắt buộc.
jasonleonhard

3
Lưu ý thêm: Câu trả lời này không phải là HTML hợp lệ vì nó có các ID trùng lặp. Nó nên được class="item_direction"thay vì id="item_direction".item_direction {thay vì #item_direction {.
movabo

2
Xin lỗi, tôi đã trả lời nhanh và mắc lỗi, bạn đúng và tôi đã cập nhật câu trả lời của mình.
jasonleonhard

Bạn cũng có thể sử dụng một quy tắc CSS khác để đặt lại hướng trên tất cả các phần tử con trực tiếp:.list_container > * { direction: ltr; }
Erich Schreiner

74

Bạn có thể thử direction:rtl;trong css của mình. Sau đó đặt lại hướng văn bản trongdiv

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

#scroll div{
    direction:ltr;
}

Chưa được kiểm chứng.


2
Tôi nghĩ IE và Opera là những trình duyệt duy nhất đặt thanh cuộn bên trái cho nội dung RTL.
Joey

2
@Joey không đúng sự thật cũng chrome dưới ubuntu
Tom

Tôi muốn xác nhận rằng Chrome 32 vị trí ở bên trái. Và vào thời điểm này không đáng ngạc nhiên của mình rằng Firefox là một lạc hậu trong css
George Mauer

1
Làm việc trên chrome / mac và firefox / mac nhưng không săn / mac
Maxime schoeni

1
@GeorgeMauer Mozilla đã chủ ý để thanh cuộn ở bên phải cho nội dung RTL. Vào thời điểm đó, chúng tôi tin rằng sẽ là một vấn đề về khả năng sử dụng nếu người dùng phải thay đổi bộ nhớ cơ của mình dựa trên nội dung trang hiện tại. Tôi đã tham gia cuộc thảo luận đó, có thể tìm thấy trong Bugzilla của Mozilla.
Tsahi Asher

32

Tôi có cùng một vấn đề. nhưng khi tôi thêm direction: rtl;tab và tổ hợp đàn accordion nhưng nó làm hỏng cấu trúc của tôi.

Cách thực hiện là thêm div với direction: rtl;làm phần tử cha và cho tập hợp div con direction: ltr;.

Tôi sử dụng https://api.jquery.com/wrap/ đầu tiên này

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

sau đó chỉ cần làm việc với css :)

Ở trẻ em div thêm vào css

 .your_class {
            direction: ltr;    
        }

Và vào div cha được thêm bởi jQuery với lớp .scroll

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

Làm việc cho tôi

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


Hoặc bạn có thể thực hiện css như sau: .scrollBarOnLeft {unicode-bidi: bidi-override; hướng: rtl; tràn: cuộn; tràn-x: hidden! important; } .scrollBarOnLeft> div {hướng: ltr; } .scrollBarOnLeft> div> div {}
john ktejik

30

Đây là một câu hỏi cũ, nhưng tôi nghĩ tôi nên đưa ra một phương pháp không được phổ biến rộng rãi khi câu hỏi này được hỏi.

Bạn có thể đảo ngược mặt bên của thanh cuộn trong các trình duyệt hiện đại bằng cách sử dụng transform: scaleX(-1)trên phụ huynh <div>, sau đó áp dụng cùng một biến đổi để đảo ngược phần tử con, "tay áo".

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
}

Lưu ý: Bạn có thể cần sử dụng một -ms-transformhoặc -webkit-transformtiền tố cho các trình duyệt cũ như IE 9. Kiểm tra CanIUse và nhấp vào "hiển thị tất cả" để xem các yêu cầu trình duyệt cũ hơn.


3
Đây là một trong những giải pháp nổi bật nhất.
Miron

1
Cảm ơn! Theo những gì tôi hiểu, việc thay đổi hướng văn bản cũng hoạt động. Thuộc tính biến đổi chỉ cảm thấy ... thanh lịch hơn? Ít nhất thì nó đúng hơn về mặt ngữ nghĩa. :)
Dom Ramirez

2
Tôi nghĩ rằng bạn cũng được hưởng lợi từ một số cải tiến GPU bằng cách sử dụng phương pháp này. Tôi đang bay trong một menu từ phía bên phải của màn hình và không muốn thanh cuộn của menu bên cạnh thanh cuộn trang ... quá khó hiểu. Tôi nhận được ít hoạt ảnh jank bằng cách sử dụng này hơn là chuyển hướng.
Davin Studer

Tôi thích điều đó một LOOOT .. Cảm ơn Người đàn ông
Hady Shaltout

2
Phương pháp này cũng có thể được sử dụng để đưa các thanh cuộn ngang trên đầu:transform: scaleY(-1)
Daniel Williams

9

Không, bạn không thể thay đổi vị trí thanh cuộn mà không có bất kỳ vấn đề nào khác.

Bạn có thể thay đổi hướng văn bản thành từ phải sang trái (rtl), nhưng nó cũng thay đổi vị trí văn bản bên trong khối.

Mã này có thể giúp bạn, nhưng tôi không chắc nó hoạt động trên tất cả các trình duyệt và hệ điều hành.

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

Tôi nghĩ IE và Opera là những trình duyệt duy nhất đặt thanh cuộn bên trái cho nội dung RTL.
Joey

0

Đây là những gì tôi đã làm để làm cho thanh cuộn bên phải hoạt động. Điều duy nhất cần được xem xét là khi sử dụng 'hướng: rtl' và toàn bộ bảng cũng cần được thay đổi. Hy vọng rằng điều này cung cấp cho bạn một ý tưởng làm thế nào để làm điều đó.

Thí dụ:

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

Kiểm tra cái này: JSFiddle


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.