Як стиль атрибуції readonly за допомогою CSS?


150

Наразі я використовую readonly = "readonly" для відключення полів. Зараз я намагаюся стилізувати атрибут за допомогою CSS. Я спробував використовувати

input[readonly] {
/*styling info here*/
}

але це чомусь не працює. Я також пробував

input[readonly='readonly'] {
/*styling info here*/
}

це теж не працює.

Як я можу стилізувати атрибут readonly за допомогою CSS?


12
input[readonly]повинен працювати. Переконайтеся, що його не перекривають інші, більш конкретні селектори в інших місцях вашої таблиці стилів.
BoltClock

1
якщо ви хочете відключити, то використовуйте атрибут вимкнено, а не
читати тільки

3
@SvenBieder Readonly та інваліди мають загальну поведінку. Поля для читання лише надіслані серверу під час надсилання форми, а поля відключені - ні.
Нарен

3
input[readonly='readonly']буде працювати тільки якщо ви використовуєте HTML , як <input readonly="readonly">, наприклад , НЕ <input readonly>. input[readonly]має відповідати обом.
Mathias Bynens

1
!importantмає працювати над переосмисленням, якщо ви також не маєте !importantкласу встановлення?
Метт К

Відповіді:


204
input[readonly]
{
    background-color:blue;
}

https://curtistimson.co.uk/post/css/style-readonly-attribute-css/


24
input[readonly]Натомість слід використовувати як readonlyатрибут Boolean, який не розрахований на певне значення.
BoltClock

1
@BoltClock Так. Будь ласка, дивіться резолюцію у відповіді нижче.
Pal R

Як я можу зробити його знову написаним? Просто видалення стилю класу?
Ренаро Сантос

@RenaroSantos Thats зміни HTML. Видаліть readonly="readonly"зі свого inputелемента.
Керт

з / IE7 ви все ще можете використовувати селектор з jQuery
ladieu

69

Зауважте, що це textarea[readonly="readonly"]працює, якщо ви встановили readonly="readonly"в HTML, але він НЕ працює, якщо ви встановите readOnly-attribute на trueабо "readonly"через JavaScript.

Щоб селектор CSS працював, якщо ви встановлюєте readOnlyJavaScript, ви повинні використовувати селектор textarea[readonly].

Однакова поведінка у Firefox 14 та Chrome 20.

Щоб бути на безпечній стороні, я використовую обидва селектори.

textarea[readonly="readonly"], textarea[readonly] {
...
}

18
Ви можете просто використовувати textarea[readonly]замість цього - кожен textarea[readonly="readonly"]гарантовано відповідає цьому.
BoltClock

23

Для безпеки ви можете скористатися обома ...

input[readonly], input[readonly="readonly"] {
    /*styling info here*/
}

Атрибут readonly - це "булевий атрибут", який може бути або пустим, або "лише для читання" (єдині допустимі значення). http://www.whatwg.org/specs/web-apps/current-work/#boolean-attribute

Якщо ви використовуєте щось на зразок .prop('readonly', true)функції jQuery , вам знадобиться [readonly], тоді як якщо ви використовуєте, .attr("readonly", "readonly")то вам знадобиться [readonly="readonly"].


Виправлення: використовувати потрібно лише input[readonly]. У тому числі input[readonly="readonly"]зайве. Дивіться https://stackoverflow.com/a/19645203/1766230


20

Тут є відповіді, але я не бачив жодної, яку я використовую:

input[type="text"]:read-only { color: blue; }

Зверніть увагу на тире в селекторі псевдо. Якщо вхід є, readonly="false"то це також буде зараховано, оскільки цей селектор виявляє наявність лише для читання незалежно від значення. Технічно falseнедійсно відповідно до специфікацій, але Інтернет не є ідеальним світом. Якщо вам потрібно висвітлити цю справу, ви можете зробити це:

input[type="text"]:read-only:not([read-only="false"]) { color: blue; }

textarea працює так само:

textarea:read-only:not([read-only="false"]) { color: blue; }

Майте на увазі , що HTML тепер підтримує не тільки type="text", а й безліч інших типів текстових такий number, tel, email, date, time, urlі т.д. Кожен повинен був би додати до селектора.


2
Ні я. LOL Так, ти прав! Зараз. :read-onlyта інші селектори psuedo були додані до стандарту W3C і можуть використовуватися з IE 10, версії попереднього перегляду 10547 і новіші.
IAmNaN

6

Є кілька способів зробити це.

Перший є найбільш широко використовуваним. Він працює у всіх основних браузерах.

input[readonly] {
 background-color: #dddddd;
}

У той час, як наведений вище буде вибирати всі входи із readonlyдоданими, цей нижче буде вибирати лише те, що ви бажаєте. Переконайтеся, що замініть demoпотрібний тип введення.

input[type="demo"]:read-only {
 background-color: #dddddd;
}

Це альтернатива першому, але вона використовується не багато:

input:read-only {
 background-color: #dddddd;
}

:read-onlyСелектор підтримується в Chrome, Opera і Safari. Firefox використовує :-moz-read-only. IE не підтримує :read-onlyселектор.

Ви також можете скористатися input[readonly="readonly"], але це приблизно так само input[readonly], як і з мого досвіду.


4
input[readonly], input:read-only {
    /* styling info here */
}

Потрібно охопити всі випадки для поля, введеного лише для читання ...


Вхід: лише для читання - це "псевдоклас, що змінюється , спрямований на полегшення стилізації форми на основі відключених атрибутів HTML, доступних лише для читання та вмісту ". Як зазначено тут, css-tricks.com/almanac/selectors/r/read-write-read , різні реалізації досить вибагливі.
пітер

Це дивно, але тільки вхід [
читати

3

з великої літери використовуйте лише букву Тільки

input[readOnly] {
      background: red !important;
    }
<input type="text" name="country" value="China" readonly="readonly" />


2

Якщо ви вибрали вхід за допомогою id, а потім додасте input[readonly="readonly"]тег у css, щось на зразок:

 #inputID input[readonly="readonly"] {
     background-color: #000000;
 }

Це не вийде. Ви повинні вибрати батьківський клас або id an, а потім вхід. Щось на зразок:

 .parentClass, #parentID input[readonly="readonly"] {
     background-color: #000000;
 }

Мої 2 копійки під час очікування нових квитків на роботі: D


"Якщо ви обрали вхід за ідентифікатором" - що не є ОП, тож як це доречно? Навіть якщо це було так, ви помиляєтесь, вам просто потрібно видалити нащадка комбінатора.
Квентін

Добре, ти маєш на увазі, що я повинен набрати щось на зразок input [readonly = "readonly"] # inputID? / мені дурень .. ти маєш рацію
програмне забезпечення

1

Використовуйте наступне для роботи в усіх браузерах:

 var readOnlyAttr = $('.textBoxClass').attr('readonly');
    if (typeof readOnlyAttr !== 'undefined' && readOnlyAttr !== false) {
        $('.textBoxClass').addClass('locked');
    }

2
Тож сподіваємось, що ваша цільова аудиторія не на 2%.
Бакко

Що включає клас "заблокований" ??
АдіТ

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