Làm thế nào để định kiểu thuộc tính chỉ đọc với CSS?


150

Tôi hiện đang sử dụng readonly = "readonly" để tắt các trường. Bây giờ tôi đang cố gắng định kiểu thuộc tính bằng CSS. Tôi đã thử sử dụng

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

nhưng nó không hoạt động vì một số lý do. Tôi cũng đã thử

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

điều đó cũng không hoạt động.

Làm cách nào để tạo kiểu thuộc tính chỉ đọc bằng CSS?


12
input[readonly]nên làm việc. Hãy chắc chắn rằng nó không bị ghi đè bởi các bộ chọn khác, cụ thể hơn ở nơi khác trong biểu định kiểu của bạn.
BoltClock

1
nếu bạn muốn tắt, thì hãy sử dụng thuộc tính bị vô hiệu hóa và không chỉ đọc
Sven Bieder

3
@SvenBieder Chỉ đọc và vô hiệu hóa có hành vi khác nhau hoàn toàn. Các trường chỉ đọc được gửi đến máy chủ trên biểu mẫu gửi trong khi các trường bị vô hiệu hóa thì không.
Naren

3
input[readonly='readonly']sẽ chỉ hoạt động nếu bạn sử dụng HTML như thế <input readonly="readonly">, không phải ví dụ <input readonly>. input[readonly]nên phù hợp với cả hai.
Mathias Bynens

1
!importantnên hoạt động để ghi đè, trừ khi bạn cũng có !importanttrong lớp cài đặt?
Matt K

Câu trả lời:


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

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


24
input[readonly]Thay vào đó, bạn nên sử dụng readonlythuộc tính Boolean không được thiết kế để có giá trị cụ thể.
BoltClock

1
@BoltClock Có. Xin vui lòng xem độ phân giải trong câu trả lời dưới đây.
Pal R

Làm thế nào tôi có thể làm cho nó có thể viết lại? Chỉ cần loại bỏ phong cách lớp học?
Renaro Santos

@RenaroSantos Đó là một thay đổi HTML. Xóa readonly="readonly"khỏi inputyếu tố của bạn .
Curt

w / IE7 bạn vẫn có thể sử dụng bộ chọn với jQuery
ladieu

69

Lưu ý rằng nó textarea[readonly="readonly"]hoạt động nếu bạn đặt readonly="readonly"trong HTML nhưng nó KHÔNG hoạt động nếu bạn đặt readOnly-attribution thành truehoặc "readonly"thông qua JavaScript.

Để bộ chọn CSS hoạt động nếu bạn đặt readOnlybằng JavaScript, bạn phải sử dụng bộ chọn textarea[readonly].

Hành vi tương tự trong Firefox 14 và Chrome 20.

Để an toàn, tôi sử dụng cả hai bộ chọn.

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

18
Bạn cũng có thể chỉ sử dụng textarea[readonly]thay thế - mọi thứ đều textarea[readonly="readonly"]được đảm bảo phù hợp với điều đó.
BoltClock

23

Để an toàn, bạn có thể muốn sử dụng cả ...

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

Thuộc tính readonly là "thuộc tính boolean", có thể để trống hoặc "readonly" (các giá trị hợp lệ duy nhất). http://www.whatwg.org/specs/web-apps/civerse-work/#boolean-attribution

Nếu bạn đang sử dụng một cái gì đó như .prop('readonly', true)chức năng của jQuery , cuối cùng bạn sẽ cần [readonly], trong khi nếu bạn đang sử dụng .attr("readonly", "readonly")thì bạn sẽ cần [readonly="readonly"].


Sửa chữa: Bạn chỉ cần sử dụng input[readonly]. Bao gồm input[readonly="readonly"]là dư thừa. Xem https://stackoverflow.com/a/19645203/1766230


20

Vô số câu trả lời ở đây, nhưng chưa thấy câu trả lời tôi sử dụng:

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

Lưu ý dấu gạch ngang trong bộ chọn giả. Nếu đầu vào là readonly="false"nó cũng sẽ bắt được vì bộ chọn này bắt được sự hiện diện của chỉ đọc bất kể giá trị. Về mặt kỹ thuật falselà không hợp lệ theo thông số kỹ thuật, nhưng internet không phải là một thế giới hoàn hảo. Nếu bạn cần bao gồm trường hợp đó, bạn có thể làm điều này:

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

textarea hoạt động theo cùng một cách:

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

Hãy ghi nhớ rằng html bây giờ hỗ trợ không chỉ type="text", nhưng một loạt các loại văn bản khác một ví dụ number, tel, email, date, time, url, vv Mỗi sẽ cần phải được bổ sung vào bộ chọn.


2
Tôi cũng vậy. LOL Vâng, bạn đúng rồi! Để bây giờ. :read-onlyvà các bộ chọn psuedo khác đã được thêm vào tiêu chuẩn W3C và có thể được sử dụng với bản xem trước IE 10 bản dựng 10547 trở lên.
IAmNaN

6

Có một số cách để làm điều này.

Đầu tiên là sử dụng rộng rãi nhất. Nó hoạt động trên tất cả các trình duyệt chính.

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

Mặc dù cái ở trên sẽ chọn tất cả các đầu vào có readonlyđính kèm, nhưng cái dưới đây sẽ chỉ chọn những gì bạn mong muốn. Đảm bảo thay thế demobằng bất kỳ loại đầu vào nào bạn muốn.

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

Đây là một thay thế cho lần đầu tiên, nhưng nó không được sử dụng nhiều:

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

Bộ :read-onlychọn được hỗ trợ trong Chrome, Opera và Safari. Firefox sử dụng :-moz-read-only. IE không hỗ trợ :read-onlybộ chọn.

Bạn cũng có thể sử dụng input[readonly="readonly"], nhưng điều này khá giống với input[readonly]kinh nghiệm của tôi.


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

Shoud bao gồm tất cả các trường hợp cho một trường nhập chỉ đọc ...


đầu vào: chỉ đọc là "lớp giả dễ biến đổi nhằm mục đích làm cho kiểu dáng biểu mẫu dễ dàng hơn dựa trên các thuộc tính HTML bị vô hiệu hóa, chỉ đọc và có thể nội dung" Như đã đề cập ở đây, css-tricks.com/almanac/selector/r/read-write-read , thực hiện khác nhau là khá mạnh mẽ.
đánh bóng

Điều này thật lạ nhưng chỉ có đầu vào [chỉ đọc] hoạt động với tôi trong FF 58
Pavel_K

3

viết hoa chữ cái đầu tiên của Only

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


2

Nếu bạn chọn đầu vào theo id và sau đó thêm input[readonly="readonly"]thẻ vào css, đại loại như:

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

Rằng sẽ không làm việc. Bạn phải chọn một lớp cha hoặc id sau đó là đầu vào. Cái gì đó như:

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

2 xu của tôi trong khi chờ vé mới tại nơi làm việc: D


"Nếu bạn chọn đầu vào theo id" - mà OP không có, vậy điều này có liên quan như thế nào? Ngay cả trong trường hợp đó, bạn đã sai, bạn chỉ cần loại bỏ tổ hợp con cháu.
Quentin

À, ý bạn là tôi phải gõ một cái gì đó như input [readonly = "readonly"] # inputID? / tôi ngốc .. bạn nói đúng
phần mềm chơi trò chơi

1

Sử dụng như sau để làm việc trong tất cả các trình duyệt:

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

2
Vì vậy, hy vọng đối tượng mục tiêu của bạn không nằm trong 2% đó.
Bacco

Điều gì bao gồm lớp 'bị khóa' ??
AdiT

$ ('. textBoxClass'). addClass ('bị khóa') sẽ bao gồm 'bị khóa'
Pal R
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.