如何用CSS设置readonly属性的样式?


150

我目前正在使用readonly =“ readonly”来禁用字段。我现在正尝试使用CSS设置属性样式。我尝试使用

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

但由于某种原因,它无法正常工作。我也尝试过

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

那也不起作用。

如何使用CSS设置readonly属性的样式?


12
input[readonly]应该管用。确保它不会被样式表中其他位置的其他更具体的选择器覆盖。
BoltClock

1
如果要禁用,然后使用禁用的属性,而不是只读
斯文Bieder

3
@SvenBieder只读和禁用完全具有不同的行为。表单上发送给服务器的只读字段提交,而禁用字段则不提交。
Naren 2012年

3
input[readonly='readonly']仅在您使用HTML之类的HTML时才有效<input readonly="readonly">,例如<input readonly>input[readonly]应该两者都匹配。
Mathias Bynens 2012年

1
!important应该工作重写,除非您也有!important设置类?
Matt K

Answers:


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

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


24
您应该input[readonly]改用as,因为readonly它不是设计为具有特定值的布尔属性。
BoltClock

1
@BoltClock是的。请在下面的答案中查看分辨率。
Pal R

如何使它再次可写?只是删除类样式?
Renaro Santos 2014年

@RenaroSantos多数民众赞成在HTML更改。readonly="readonly"从您的input元素中删除。
Curt 2014年

w / IE7,您仍然可以将选择器与jQuery一起使用
ladieu 2014年

69

请注意,textarea[readonly="readonly"]如果readonly="readonly"在HTML中进行设置,则该方法有效,但如果将readOnly-attribute 设置为true或,则该方法无效"readonly" JavaScript通过JavaScript进行。

为了使CSS选择器能够正常工作(如果您readOnly使用JavaScript进行设置),则必须使用选择器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属性是一个“布尔属性”,可以为空或“ readonly”(唯一的有效值)。 http://www.whatwg.org/specs/web-apps/current-work/#boolean-attribute

如果使用的是类似jQuery的.prop('readonly', true)功能,则最终需要[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"它也将捕获该值,因为此选择器将捕获readonly的存在(与值无关)。从技术上讲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",但其他的文本类型的转换这样的numbertelemaildatetimeurl要添加到选择等。每个需要。


2
我也没有。大声笑是的,你是对的!目前。:read-only和其他伪选择器已添加到W3C标准,并且可以与IE 10预览版本10547及更高版本一起使用。
IAmNaN 2015年

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]根据我的经验,这几乎与相同。



3

将Only的首字母大写

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,然后再输入。就像是:

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

我在等待新票上班时的2美分:D


“如果您通过id选择输入” –哪个OP没有,那么这有什么关系?即使是这种情况,也错了,您只需要删除后代组合器即可。
昆丁

嗯,您的意思是我必须输入类似input [readonly =“ readonly”]#inputID的内容吗?/ me fool ..你是对的
softwareplay

1

使用以下命令可在所有浏览器中使用:

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

2
因此,希望您的目标受众不在2%之内。
巴科2014年

什么包括“锁定”类?
AdiT

$( 'textBoxClass ')addClass('锁定')将包括'锁定'。
帕尔- [R
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.