вирівнювання тексту: праворуч на <select> або <option>


85

Хто-небудь знає, чи можливо вирівняти текст праворуч від <select>конкретного <option>елемента в WebKit . Це не повинно бути крос-браузерним рішенням, включаючи IE, але має бути чистим CSS, якщо це можливо.

Я спробував обидва:

select { text-align: right }і option { text-align: right }, але, здається, жоден з них не працював у WebKit (або Chrome, Safari, або Mobile Safari.

Будь-яка допомога з вдячністю отримана!


4
Десь існує справді тупа причина, чому option {text-align: right;}не працює.
Bob Stein

Відповіді:


81

Ви можете спробувати використовувати атрибут "dir", але я не впевнений, що це дасть бажаний ефект?

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

Демо тут: http://jsfiddle.net/fparent/YSJU7/


2
Насправді це ідеально. Я appearance: none;все одно використовував атрибут, тому положення випадаючого списку не має значення. Дякую!
BenM

32
Це працює не у всіх випадках: <option> 23 "x 42" </option> дає "x 42" 23. rtl також змінює спосіб його читання у програмі зчитування з екрана.
Jason T Featheringham

10
Хіба це не схоже на брудний хак лише для того, щоб надати йому належний вигляд, не замислюючись про те, як це буде оброблено в деяких особливих випадках?
Сергій Башаров

29
ІМХО це погано з двох причин. 1. Це семантично неправильно. 2. У Chrome 30 dir="rtl"переміщує стрілку, що вказує спадне меню вліво.
feklee

14
Це жахлива ідея, хлопці. RTL призначений для мов, які малюють символи в порядку справа наліво, і дуже сильно зіпсує вміст, який ви ставите в такому варіанті, якщо цей вміст написаний мовою LTR. Наприклад, дата, наприклад "10 серпня 2017 року", буде позначена як "серпень 2017 10". Ви НЕ маєте контролю над тим, що це робить з вашим текстом. НЕ використовуйте це.
devios1

74

Наступний CSS вирівняє стрілку та параметри за правою панеллю:

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
Дякую @Laiacy - Це фантастика! Я сподіваюся, ви отримаєте набагато більше голосів.
elPastor

Завдяки вам @ pshep123. Я дуже вдячний за ваш коментар :)
Laiacy

Здається, це не працює для значень параметрів, коли я натискаю спадне меню (принаймні в Windows Google Chrome). Це працює лише до перемикання спадного меню.
Райан,

1
@Ryan, я відредагував свою відповідь. Тепер застосовується до вибору та значень опцій у спадному меню. Повідомте мене, якщо це працює для вас
Laiacy

Для мене це відповідь. Я хотів зберегти маленьку стрілку з правого боку, але параметри повинні бути вирівняні вправо => це відповідь, яка досягає цього
Unchained

31

Найкращим рішенням для мене було зробити

select {
    direction: rtl;
}

і потім

option {
    direction: ltr;
}

знову. Отже, ніяких змін у способі читання тексту у програмі зчитування з екрану або проблем із форматуванням немає.


1
Щойно дізнався, що IE6-8 (не знаю про IE8 +) не робить цього правильним ...: - /
Мартін Шиллігер

А також у Firefox це не працює коректно. Здається, лише в Webkit це гарна ідея ...
Мартін Шиллігер

якщо ваш параметр html містить (), який перемістить) на початок рядка (перед першим символом ліворуч). > _ <
rm-

Також якщо ви вставите "()" як &#40;і &#41;?
Martin Schilliger 02

1
Однак у Firefox поточне (вибране) значення відображається з "AM" ліворуч ("AM 9:30").
Марк Шнайдер

25

Я думаю, що ви хочете:

select {
  direction: rtl;
}

спробував тут: http://jsfiddle.net/neilheinrich/XS3yQ/


9
Круто, але стрілка потім йде вліво. Що робити, якщо ми хочемо, щоб і текст, і стрілка виділення були вирівняні вправо?
Батист

1

Я зіткнувся з тією ж проблемою, коли мені потрібно вирівняти вибране значення заповнювача праворуч від поля вибору, а також потрібно вирівняти параметри праворуч, але коли я використав напрямок: rtl; щоб вибрати та застосувати деякий правий відступ, щоб вибрати, тоді всі параметри також отримують зсув праворуч, заполнюючи, оскільки я хочу застосувати відступ лише до вибраного заповнювача.

Я вирішив проблему за таким стилем:

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

select option{
  direction: rtl;
}

Ви можете змінити відступ тексту відповідно до ваших вимог. Сподіваюся, це допоможе вам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.