屬性選擇器是現代CSS3方式還是前進方式?
否;實際上,屬性選擇器自CSS2以來一直存在,並且自HTML 4以來disabled
屬性本身已存在。據我所知,:disabled
僞類是在Selectors 3中引入的,這使得僞類更新。
是,在一定程度上。
使用屬性選擇器,您依賴的知識是您正在設計的文檔使用disabled
屬性來指示禁用的字段。從理論上講,如果您設計的不是HTML格式,禁用的字段可能不會使用disabled
屬性(例如,它可能是enabled="false"
或類似的東西。即使將來的HTML版本也會引入新的元素,這些元素使用不同的屬性來表示啓用/禁用狀態;那些元素將不匹配[disabled]
屬性選擇器。
:disabled
僞類將選擇器從您正在處理的文檔中分離出來。該規範只是說,它的目標是禁用的元素,而且元素是否被啓用,禁用,或兩者都不是,是defined by the document language instead:
何謂啓用狀態,禁用狀態,並且用戶界面元素依賴於語言。在典型的文件中,大多數元素既不是:enabled
也不是:disabled
。
換句話說,當您使用僞類時,UA根據您正在設計的文檔自動計算匹配哪些元素,因此您不必告訴它如何。
就DOM而言,我相信在DOM元素上設置disabled
屬性也會修改HTML元素的disabled
屬性,這意味着兩個選擇器與DOM操作之間沒有區別。我不知道這是否是依賴於瀏覽器,但here's a fiddle演示它的所有主流瀏覽器的最新版本:
// The following statement removes the disabled attribute from the first input
document.querySelector('input:first-child').disabled = false;
你最有可能會被造型HTML,所以沒有這可能使但是如果瀏覽器兼容性不是問題,我會選擇:enabled
和:disabled
而不是:not([disabled])
和[disabled]
,因爲僞類攜帶屬性選擇器不支持的語義。我是這樣的純粹主義者。
呵呵。從來沒有這樣想過。但的確,我已經使用CSS和MXML(Flash UI語言)以及HTML(儘管前者幾乎不支持任何有用的東西) – Katana314
也應該考慮禁用屬性對HTML fieldset元素的影響。在FF和Chrome(但不是IE)中,後代控件的禁用*狀態*(由':disabled'反映)將被應用,但內容屬性不會出現,IDL屬性(屬性)也不會爲真。看到http://jsfiddle.net/UH2S4/12/ – Alohci
很好的答案!你能否解釋更多關於*如何*「UA自動計算出哪些元素匹配」?例如,使用獨立的XML,如何使用':disabled'僞類來指定要選擇的元素? – chharvey