2011-10-17 34 views
10

W3.org CSS specification狀態下(重點煤礦):CSS:鏈接和:訪問僞類 - Web瀏覽器是否遵守規範?

  • 的:鏈接僞類適用於尚未訪問過的鏈接。
  • 訪問過的僞類在用戶訪問鏈接後應用。

這兩個狀態是互斥

這意味着適用於:link選擇器的任何樣式都應該只應用於未訪問鏈接。但是,唯一屬於這種情況的財產似乎是color。將字體大小,背景等應用於:link選擇器的目標是所有鏈接。

有一張紙條進一步下跌,指出頁面:

注意。樣式表作者可能會濫用:link和:visited僞類來確定用戶未經用戶同意訪問過哪些網站。

因此,UA可能會將所有鏈接視爲未訪問鏈接,或實施其他措施以保護用戶隱私,同時呈現不同訪問和未訪問鏈接。

但是,據我所知,這隻適用於Javascript返回的樣式,而不是顯示樣式本身。

Here's a JS fiddle顯示該問題。這裏的瀏覽器是否偏離了規範,或者是否有我失蹤的東西?

+0

+1可能是我整天看到的第一個體面問的問題。 –

回答

2

線,

「的UA可能因此把所有的鏈接,訪問過的鏈接,或者在渲染走訪未訪問鏈接不同採取其他措施,以保護用戶的隱私。」

並不適用於由JavaScript返回款式只有—正是因爲它的聲音。這意味着瀏覽器可能完全忽略了:visited上的某些屬性(在這種情況下就是這樣)。由於font-size會增加包含元素的大小,因此允許該屬性與:visited鏈接不同會破壞瀏覽器實施的其他安全措施。

瀏覽器可能如果需要,選擇重新計算尺寸而不應用:visited樣式。當然,與僅僅禁止某些屬性相比,這是更多的工作和更低的性能。很明顯,這個決定是基於這樣的事實做出的,即不需要使用不同的字體大小,背景等來區分訪問和未訪問的鏈接,並且通常大多數開發人員將堅持只是略微修改顏色。

所以不,他們沒有偏離規範,他們利用了一個允許的例外。

+1

好的答案,我沒有想到,改變一些樣式會影響頁面上的其他非鏈接元素。順便說一句,似乎大多數瀏覽器確實應用了顏色和背景顏色,但沒有其他。但是,Opera仍然將所有樣式應用於訪問過的鏈接。 – DisgruntledGoat

+2

@DisgruntledGoat:在http://dbaron.org/mozilla/visited-privacy有一個體面的閱讀,它解釋了這些問題,並建議只允許一些選擇的屬性。可能的是,允許的屬性因瀏覽器而異。 –

0

從我所知道的規範,瀏覽器正在對待:linka,以避免訪問狀態的濫用。因此,使用或不使用javascript,實際應用於所有鏈接的樣式爲:link,而:visited僅在訪問時纔會重載樣式。

+0

但'color'屬性*不會被':link'類覆蓋,而其他樣式是。看到這裏:http://jsfiddle.net/SEjJg/3/ – DisgruntledGoat