text-align: ngay trên <select> hoặc <option>


82

Có ai biết nếu có thể căn chỉnh văn bản ở bên phải của một phần tử <select>hoặc cụ thể hơn <option>trong WebKit . Đây không cần phải là một giải pháp đa trình duyệt bao gồm IE, nhưng phải là CSS thuần túy nếu có thể.

Tôi đã thử cả hai:

select { text-align: right }option { text-align: right }, nhưng dường như cả hai đều không hoạt động trong WebKit (Chrome, Safari hoặc Mobile Safari.

Mọi sự giúp đỡ đều nhận được một cách biết ơn!


3
Ở đâu đó có một lý do thực sự ngu ngốc tại sao option {text-align: right;}không hoạt động.
Bob Stein

Câu trả lời:


81

Bạn có thể thử sử dụng thuộc tính "dir", nhưng tôi không chắc điều đó sẽ tạo ra hiệu quả mong muốn?

<select dir="rtl">
    <option>Foo</option>    
    <option>bar</option>
    <option>to the right</option>
</select>

Demo tại đây: http://jsfiddle.net/fparent/YSJU7/


2
Trên thực tế, đó là hoàn hảo. Tôi vẫn đang sử dụng appearance: none;thuộc tính này, vì vậy vị trí của danh sách thả xuống không quan trọng. Cảm ơn!
BenM

31
Điều này không hoạt động trong mọi trường hợp: <option> 23 "x 42" </option> cho ra "x 42" 23. rtl cũng thay đổi cách đọc trong trình đọc màn hình.
Jason T Featheringham

9
Nó trông giống như một vụ hack bẩn thỉu chỉ để tạo cho nó một giao diện phù hợp mà không nghĩ đến việc nó sẽ được xử lý như thế nào trong một số trường hợp đặc biệt?
Sergei Basharov

28
IMHO điều này là xấu vì hai lý do. 1. Nó sai về mặt ngữ nghĩa. 2. Trong Chrome 30, dir="rtl"di chuyển mũi tên chỉ menu thả xuống sang trái.
feklee

12
Đây là một ý tưởng KHỦNG HOẢNG các bạn ạ. RTL dành cho các ngôn ngữ vẽ các ký tự theo thứ tự từ phải sang trái và sẽ rất khó hiểu nội dung mà bạn đưa vào tùy chọn như vậy nếu nội dung đó được viết bằng ngôn ngữ LTR. Ví dụ: một ngày như "10 tháng 8 năm 2017" sẽ là "10 tháng 8 năm 2017". Bạn KHÔNG có quyền kiểm soát những gì nó làm với văn bản của bạn. KHÔNG sử dụng cái này.
defos1

71

CSS sau sẽ căn phải cả mũi tên và các tùy chọn:

select { text-align-last: right; }
option { direction: rtl; }
<!-- example usage -->
Choose one: <select>
  <option>The first option</option>
  <option>A second, fairly long option</option>
  <option>Last</option>
</select>


2
Cảm ơn @Laiacy - Điều này thật tuyệt vời! Tôi hy vọng bạn sẽ nhận được nhiều phiếu bầu hơn nữa.
elPastor

Cảm ơn bạn @ pshep123. Tôi thực sự đánh giá cao nhận xét của bạn :)
Laiacy

Điều này dường như không hoạt động đối với các giá trị tùy chọn khi tôi nhấp vào menu thả xuống (ít nhất là trên Windows Google Chrome). Nó chỉ hoạt động trước khi menu thả xuống được bật tắt.
Ryan

1
@Ryan, tôi đã chỉnh sửa câu trả lời của mình. Bây giờ áp dụng cho lựa chọn và các giá trị tùy chọn trong menu thả xuống. Hãy cho tôi biết nếu nó phù hợp với bạn
Laiacy

Đối với tôi đây là câu trả lời. Tôi muốn giữ mũi tên nhỏ ở phía bên phải nhưng các tùy chọn phải được căn phải => đây là câu trả lời đạt được điều đó
Unchained

31

Giải pháp tốt nhất cho tôi là làm

select {
    direction: rtl;
}

và sau đó

option {
    direction: ltr;
}

lần nữa. Vì vậy, không có thay đổi nào về cách văn bản được đọc trong trình đọc màn hình hoặc không có vấn đề về định dạng.


1
Chỉ cần phát hiện ra rằng IE6-8 (không biết về IE8 +) không và việc này là đúng ...: - /
Martin Schilliger

Và cũng trong Firefox, điều này không hoạt động chính xác. Dường như chỉ trong Webkit một ý tưởng tốt ...
Martin Schilliger

nếu tùy chọn html của bạn chứa () sẽ chuyển dấu) xuống đầu dòng (trước ký tự đầu tiên bên trái). > _ <
rm-

Ngoài ra nếu bạn dán "()" như &#40;&#41;?
Martin Schilliger

1
Tuy nhiên, trên Firefox, giá trị hiện tại (đã chọn) hiển thị với "AM" ở bên trái ("AM 9:30").
Mark Schneider

25

Tôi nghĩ những gì bạn muốn là:

select {
  direction: rtl;
}

tìm ở đây: http://jsfiddle.net/neilheinrich/XS3yQ/


9
Tuyệt, nhưng mũi tên sau đó đi sang trái. Điều gì sẽ xảy ra nếu chúng ta muốn cả văn bản và mũi tên lựa chọn được căn chỉnh sang phải?
Baptiste

1

Tôi cũng gặp phải vấn đề tương tự, trong đó tôi cần căn chỉnh giá trị trình giữ chỗ đã chọn ở bên phải của hộp chọn và cũng cần căn chỉnh các tùy chọn sang phải nhưng khi tôi đã sử dụng hướng: rtl; để chọn & áp dụng một số phần đệm bên phải để chọn, sau đó tất cả các tùy chọn cũng chuyển sang bên phải bằng phần đệm vì tôi chỉ muốn áp dụng phần đệm cho phần giữ chỗ đã chọn.

Tôi đã khắc phục sự cố theo kiểu sau:

select:first-child{
  text-indent: 24%;
  direction: rtl;
  padding-right: 7px;
}

select option{
  direction: rtl;
}

Bạn có thể thay đổi thụt lề văn bản theo yêu cầu của mình. Hy vọng nó sẽ giúp ích cho bạn.

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.