วิธีการจัดรูปแบบแอตทริบิวต์อ่านอย่างเดียวด้วย CSS


150

ขณะนี้ฉันใช้ readonly = "อ่านอย่างเดียว" เพื่อปิดใช้งานฟิลด์ ตอนนี้ฉันพยายามจัดรูปแบบคุณลักษณะโดยใช้ CSS ฉันพยายามใช้

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

แต่มันไม่ทำงานด้วยเหตุผลบางอย่าง ฉันยังลอง

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

ที่ไม่ทำงานอย่างใดอย่างหนึ่ง

ฉันจะจัดรูปแบบแอตทริบิวต์อ่านอย่างเดียวด้วย CSS ได้อย่างไร


12
input[readonly]ควรทำงาน. ตรวจสอบให้แน่ใจว่าไม่ได้ถูกแทนที่โดยตัวเลือกอื่น ๆ ที่เฉพาะเจาะจงมากขึ้นที่อื่นในสไตล์ชีท
BoltClock

1
ถ้าคุณต้องการที่จะปิดการใช้งานแล้วใช้คุณลักษณะการปิดการใช้งานและไม่อ่านได้อย่างเดียว
Sven Bieder

3
@SvenBieder อ่านอย่างเดียวและปิดการใช้งานมีพฤติกรรมที่แตกต่างกันโดยสิ้นเชิง เขตข้อมูลที่ส่งไปยังเซิร์ฟเวอร์แบบอ่านอย่างเดียวในขณะที่เขตข้อมูลถูกปิดใช้งานไม่ใช่
Naren

3
input[readonly='readonly']จะทำงานเฉพาะถ้าคุณใช้ HTML เช่นไม่ได้สำหรับเช่น<input readonly="readonly"> ควรจับคู่ทั้งคู่ <input readonly>input[readonly]
งัด Bynens

1
!importantควรทำงานเพื่อแทนที่เว้นแต่คุณจะมี!importantในชั้นเรียนการตั้งค่า?
แมตต์ K

คำตอบ:


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

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


24
คุณควรใช้input[readonly]แทนเนื่องจากreadonlyเป็นแอตทริบิวต์บูลีนที่ไม่ได้ออกแบบมาให้มีค่าเฉพาะ
BoltClock

1
@BoltClock ใช่ โปรดดูความละเอียดในคำตอบด้านล่าง
Pal R

ฉันจะทำให้มันเขียนได้อีกครั้งได้อย่างไร แค่ลบสไตล์คลาส?
Renaro Santos

@RenaroSantos เปลี่ยน HTML แล้ว ลบออกreadonly="readonly"จากinputองค์ประกอบของคุณ
Curt

w / IE7 คุณยังคงสามารถใช้ตัวเลือกกับ jQuery
ladieu

69

โปรดทราบว่าใช้textarea[readonly="readonly"]งานได้หากคุณตั้งค่าเป็นreadonly="readonly"HTML แต่จะไม่ทำงานหากคุณตั้งค่าreadOnly-attribute เป็นtrueหรือ"readonly"ผ่าน JavaScript

สำหรับเลือก CSS ในการทำงานถ้าคุณตั้งค่าreadOnlyด้วย JavaScripttextarea[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

หากคุณกำลังใช้สิ่งที่ต้องการของ 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"ก็จะจับเช่นกันเนื่องจากตัวเลือกนี้จับการปรากฏตัวของอ่านอย่างเดียวโดยไม่คำนึงถึงค่า เทคนิค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
ไม่เลย I. LOL ใช่คุณถูกต้องแล้ว! สำหรับตอนนี้. :read-onlyและตัวเลือก psuedo อื่น ๆ ได้รับการเพิ่มลงในมาตรฐาน W3C และสามารถใช้กับ IE 10 preview บิลด์ที่สร้างขึ้น 1,057 ขึ้นไป
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 :-moz-read-onlyใช้ Firefox IE ไม่รองรับ:read-onlyตัวเลือก

คุณสามารถใช้งานinput[readonly="readonly"]ได้ แต่นี่ก็เหมือนกับinput[readonly]ประสบการณ์ของฉัน


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

Shoud ครอบคลุมทุกกรณีสำหรับฟิลด์อินพุตแบบอ่านอย่างเดียว ...


การป้อนข้อมูล: อ่านได้อย่างเดียวคือ "ความไม่แน่นอนหลอกชั้นเล็งไปที่การทำแบบฟอร์มการจัดแต่งทรงผมได้ง่ายขึ้นบนพื้นฐานของคนพิการ, อ่านได้อย่างเดียวและ contenteditable HTML คุณสมบัติ" ในขณะที่กล่าวถึงที่นี่css-tricks.com/almanac/selectors/r/read-write-read , การติดตั้งใช้งานที่หลากหลายนั้นค่อนข้างไร้ความหมาย
peater

นี่เป็นเรื่องแปลก แต่มีเพียงข้อมูล [อ่านอย่างเดียว] ที่ใช้งานได้สำหรับฉันใน FF 58
Pavel_K


2

หากคุณเลือกอินพุตตาม id แล้วเพิ่มinput[readonly="readonly"]แท็กใน css สิ่งที่ต้องการ:

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

ที่จะไม่ทำงาน คุณต้องเลือกชั้นผู้ปกครองหรือรหัสแล้วใส่ สิ่งที่ต้องการ:

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

2 เซ็นต์ของฉันในขณะที่รอตั๋วใหม่ในที่ทำงาน: D


"ถ้าคุณเลือกอินพุตด้วย id" - OP ใดที่ไม่ดังนั้นสิ่งนี้เกี่ยวข้องกันอย่างไร แม้ว่ามันจะเป็นกรณีที่คุณผิดคุณเพียงแค่ลบ combinator ลูกหลาน
เควนติน

อ่าคุณหมายความว่าฉันต้องพิมพ์บางอย่างเช่นอินพุต [readonly = "readonly"] # inputID หรือไม่ / ฉันโง่ .. คุณพูดถูก
softwareplay

1

ใช้สิ่งต่อไปนี้เพื่อทำงานในเบราว์เซอร์ทั้งหมด:

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

2
ดังนั้นหวังว่าผู้ชมเป้าหมายของคุณจะไม่อยู่ใน 2% นั้น
Bacco

สิ่งที่รวมถึงระดับ 'ล็อค'?
AdiT

$ ('. textBoxClass'). addClass ('ถูกล็อค') จะรวม 'ถูกล็อค'
Pal R
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.