text-align: right on <select> lub <option>

84

Czy ktoś wie, czy możliwe jest wyrównanie tekstu do prawej <select>lub dokładniej <option>elementu w WebKit . Nie musi to być rozwiązanie dla różnych przeglądarek, w tym IE, ale powinno to być czysty CSS, jeśli jest to możliwe.

Próbowałem obu:

select { text-align: right }i option { text-align: right }, ale wydaje się, że żadne z nich nie działało w WebKit (albo Chrome, Safari lub Mobile Safari.

Każda pomoc otrzymana z wdzięcznością!

BenM
źródło
4
Gdzieś jest naprawdę głupi powód, dla którego option {text-align: right;}nie działa.
Bob Stein

Odpowiedzi:

80

Możesz spróbować użyć atrybutu „dir”, ale nie jestem pewien, czy przyniesie to pożądany efekt?

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

Demo tutaj: http://jsfiddle.net/fparent/YSJU7/

Frank Parent
źródło
2
Właściwie to jest idealne. I appearance: none;tak używałem atrybutu, więc pozycja listy rozwijanej nie ma znaczenia. Dzięki!
BenM
32
To nie działa we wszystkich przypadkach: <option> 23 "x 42" </option> daje "x 42" 23. rtl zmienia również sposób odczytywania go w czytniku ekranu.
Jason T Featheringham
10
Czy nie wygląda to jak brudny hack tylko po to, aby nadać mu odpowiedni wygląd, nie myśląc o tym, jak zostanie przetworzony w niektórych szczególnych przypadkach?
Siergiej Baszarow
29
IMHO to jest złe z dwóch powodów. 1. Jest semantycznie błędne. 2. W przeglądarce Chrome 30 dir="rtl"przesuwa strzałkę wskazującą menu rozwijane w lewo.
feklee
14
To STRASZNY pomysł, chłopaki. RTL jest przeznaczony dla języków, które rysują znaki w kolejności od prawej do lewej i bardzo zepsują zawartość, którą umieścisz w takiej opcji, jeśli ta treść jest napisana w języku LTR. Na przykład data „10 sierpnia 2017 r.” Zostanie wylosowana jako „10 sierpnia 2017 r.”. Nie masz żadnej kontroli nad tym, co robi z twoim tekstem. NIE używaj tego.
devios1
74

Poniższy kod CSS wyrówna do prawej zarówno strzałkę, jak i opcje:

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>

Laiacy
źródło
2
Dzięki @Laiacy - to jest fantastyczne! Spodziewam się, że dostaniesz znacznie więcej pozytywnych głosów.
elPastor
Dzięki tobie @ pshep123. Naprawdę doceniam twój komentarz :)
Laiacy
Wydaje się, że to nie działa dla wartości opcji, gdy klikam listę rozwijaną (przynajmniej w systemie Windows Google Chrome). Działa tylko przed przełączeniem menu rozwijanego.
Ryan
1
@Ryan, zredagowałem odpowiedź. Teraz dotyczy wyboru i wartości opcji w menu rozwijanym. Daj mi znać, jeśli to
zadziała
Dla mnie to jest odpowiedź. Chciałem zachować małą strzałkę po prawej stronie, ale opcje powinny być wyrównane do prawej => to jest odpowiedź, która to daje
Unchained
31

Najlepszym rozwiązaniem dla mnie było zrobienie

select {
    direction: rtl;
}

i wtedy

option {
    direction: ltr;
}

jeszcze raz. Nie ma więc zmian w sposobie odczytywania tekstu w czytniku ekranu ani problemu z formatowaniem.

Martin Schilliger
źródło
1
Właśnie dowiedziałem się, że IE6-8 (nie wiem o IE8 +) nie renderuje tego poprawnie…: - /
Martin Schilliger
A także w Firefoksie to nie działa poprawnie. Wydaje się, że tylko w Webkicie to dobry pomysł…
Martin Schilliger
jeśli twoja opcja html zawiera (), to przeniesie) na początek linii (to znaczy przed pierwszym znakiem po lewej). > _ <
rm-
Także jeśli wkleisz „()” jako &#40;i &#41;?
Martin Schilliger
1
Jednak w przeglądarce Firefox bieżąca (wybrana) wartość jest wyświetlana z napisem „AM” po lewej stronie („AM 9:30”).
Mark Schneider
25

Myślę, że chcesz:

select {
  direction: rtl;
}

bawiłem się tutaj: http://jsfiddle.net/neilheinrich/XS3yQ/

nheinrich
źródło
9
Fajnie, ale strzałka idzie w lewo. A co, jeśli chcemy, aby zarówno tekst, jak i strzałka wyboru były wyrównane do prawej?
Baptiste
1

Miałem do czynienia z tym samym problemem, w którym muszę wyrównać wybraną wartość zastępczą do prawej strony pola wyboru, a także muszę wyrównać opcje do prawej, ale kiedy użyłem direction: rtl; aby zaznaczyć i zastosować dopełnienie w prawo, aby zaznaczyć, a następnie wszystkie opcje przesuną się w prawo przez wypełnienie, ponieważ chcę zastosować dopełnienie tylko do wybranego symbolu zastępczego.

Rozwiązałem problem, postępując zgodnie ze stylem:

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

select option{
  direction: rtl;
}

Możesz zmienić wcięcie tekstu zgodnie z wymaganiami. Mam nadzieję, że to ci pomoże.

Ashish Sharma
źródło