a標(biāo)簽偽類:visited下劃線和背景圖設(shè)置無效的原因

今天在學(xué)習(xí)用背景圖設(shè)計(jì)項(xiàng)目符號的時(shí)候,發(fā)現(xiàn)了在 a:visited 偽類選擇器里對設(shè)置的下劃線(text-decoration:underline)和背景圖(background:)都不起作用助赞,僅僅對顏色(color)屬性有效憎茂,很是糾結(jié)标锄。

------------------------------------------------------------------------------------
更新于2017/9/24片林。有關(guān)a:visited 有關(guān)偽類選擇器的color 屬性補(bǔ)充员淫。
再做網(wǎng)頁小導(dǎo)航條的時(shí)候無意間發(fā)現(xiàn)了合蔽,這個(gè)問題在不同瀏覽器的區(qū)別,于是前來于此做一下筆記介返,一遍日后參考拴事,話不多說沃斤,就拿我今天寫的導(dǎo)航條為例吧具體如下(完整的代碼我就不寫了,只把有關(guān)此內(nèi)容的核心代碼貼出來吧):

    .test a:link {
        color:#666;/*我們把這個(gè)顏色稱為 淺灰 吧*/
        text-decoration:none;
    }
    .test a:visited {
        color:#f00;/*我們把這個(gè)顏色稱為 橘紅 吧*/
        text-decoration:underline;/*下劃線肯定是無效的*/
    }

IE瀏覽器中的效果圖(我只點(diǎn)擊了-博客-這個(gè)鏈接):

IE中瀏覽器中訪問其中之一后的超鏈接的效果.png

很明顯上面的代碼得到了刃宵,點(diǎn)擊-博客-后衡瓶,字體顏色如愿以償?shù)?由 淺灰 變?yōu)?橘紅 ,很好的體現(xiàn)在IE瀏覽器中牲证。
我們再來看一下在 谷歌和火狐 瀏覽器中的效果:

谷歌哮针、火狐瀏覽器中超鏈接的效果.png
谷歌、火狐瀏覽器中訪問其中之一后的超鏈接的效果.png

在 谷歌和火狐 瀏覽器中坦袍,點(diǎn)擊-博客-后十厢,所有超鏈接的字體顏色都的 由 淺灰 變?yōu)?橘紅 ,不難想象這也是出于網(wǎng)絡(luò)安全的考慮(不懂捂齐,請繼續(xù)往下看蛮放。),我們在實(shí)際應(yīng)用中記住這些差異即可(其他瀏覽器為測試辛燥,建議閱讀者可自行測試)筛武。

------------------------------------------------------------------------------------
代碼:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>使用背景圖設(shè)計(jì)項(xiàng)目符號</title>
<style type="text/css">
    ul{
        list-style:none;
        width:20em;
        padding:0;
        border-bottom:1px dashed #aaa;
    }
    li{
        border-top:1px dashed #aaa;
        margin:0;
        padding:0.5em;
        
    }
    li a{
        display:block;
        padding-left:1.5em;
        text-decoration:none;
    }
    li a:link{

        background:url(images/arrow3.gif) no-repeat center right;
    }
    li a:visited{
        text-decoration:underline;
        background:url(images/arrow4.gif) no-repeat center right;
    }
    li a:hover{
        background:url(images/arrow4.gif) no-repeat center left;
        
    }
    
    
</style>
</head>

<body>
<h1>新聞</h1>
<ul>
    <li><a href="#">軍事</a></li>
    <li><a href="#">財(cái)經(jīng)</a></li>
    <li><a href="#">體育</a></li>
    <li><a href="#">娛樂</a></li>
    <li><a href="#">科技</a></li>
</ul>

</body>
</html>

ie、谷歌等瀏覽器效果:

未訪問效果.png
鼠標(biāo)經(jīng)過效果.png
訪問后效果.png

可以看出訪問后的并沒有出現(xiàn)下劃線和背景圖挎塌。經(jīng)查閱資料終于解決了我的疑惑徘六。

資料:

Why the :visited Pseudo-class is Strange

Modern browsers have severely restrained the CSS properties that developers can use in a style rule that uses the :visited link pseudo-class. If you’re unfamiliar with this oddball pseudo-class, you may be wondering why your site’s visited links aren’t rendering as expected.

If you try to style visited links by giving them a background-image, for instance, you’ll be surprised that you can no longer do so in modern browsers. You might think it’s a browser bug because there’s no immediately obvious reason why the following CSS doesn’t work:

/* this will not work as expected */
a:visited {
display: block;
background-image: url("cat.jpg");
}
If we use any other pseudo-class — like, say, the :hover pseudo-class — the style properties work as expected.

/* this is perfectly fine */
a:hover {
display: block;
background-image: url("cat.jpg");
}
Currently, it seems like the only property you can assign to the :visited pseudo-class is the color property. Oh, and the browser in all likelihood won’t render the color with an alpha transparency even if you correctly specify it with a standard color unit like rgba.

Strange right? What’s up?

The W3C specifications for the link pseudo-classes technically gives web browsers the option to ignore our :link and :visited pseudo-class style rules. This is because the :visited pseudo-class can be potentially abused in such a way that an abuser can get data about its visitors’ browsing history.

It is possible for style sheet authors to abuse the :link and :visited pseudo-classes to determine which sites a user has visited without the user’s consent.

UAs may therefore treat all links as unvisited links, or implement other measures to preserve the user’s privacy while rendering visited and unvisited links differently."

Source: Selectors Level 3: The link pseudo-classes: :link and :visited

(In case you’re wondering: In the above excerpt, the term "UAs" refers to "user agents", which is software that’s used to access a website. The most common type of UA is a web browser.)

How a User’s Browsing History Could Be Compromised

To explain the reason why you can’t use all CSS properties with the :visited pseudo-class, I will attempt to explain it through a hypothetical situation.

Modern browsers no longer allow the background-image property to render.

省略......

點(diǎn)擊查看上面原文。

翻譯(英語不好實(shí)在看不下去了榴都,只翻譯了上面這部分):

為什么:訪問偽類是奇怪的待锈?

現(xiàn)代瀏覽器嚴(yán)重限制了開發(fā)人員可以在樣式規(guī)則中使用的CSS屬性,該樣式規(guī)則使用:訪問鏈接偽類嘴高。如果你不熟悉這個(gè)古怪的偽類竿音,你可能想知道為什么你的網(wǎng)站的訪問過的鏈接沒有呈現(xiàn)預(yù)期。
如果你試著通過給他們一個(gè)背景圖像來設(shè)計(jì)訪問的鏈接拴驮,你會驚訝于你不再能在現(xiàn)代瀏覽器中這樣做了春瞬。你可能認(rèn)為這是一個(gè)瀏覽器錯(cuò)誤,因?yàn)闆]有明顯的理由說明下面的CSS不起作用:

/ *這將不象預(yù)期的那樣工作套啤。*/
a:visited {
  display: block;
  background-image: url("cat.jpg");
}

如果我們使用其他任何偽類宽气,比如:懸停偽類,樣式屬性就如預(yù)期的那樣工作潜沦。

/*這是完全正確的*/萄涯。
a:hover {
  display: block;
  background-image: url("cat.jpg");
}

目前,它似乎是惟一可以賦予的屬性:訪問的偽類是顏色屬性唆鸡。哦涝影,在所有可能的瀏覽器不會呈現(xiàn)顏色的alpha透明度即使你正確地指定它與標(biāo)準(zhǔn)顏色單元如RGBA。
陌生嗎争占?出什么事了燃逻?
W3C規(guī)范的鏈接偽類在技術(shù)上提供了Web瀏覽器忽略我們的選項(xiàng):link 和 :visited偽類樣式規(guī)則序目。這是因?yàn)椋?visited偽類可以潛在的濫用使得網(wǎng)絡(luò)施虐者可以獲得訪問者的瀏覽歷史記錄的數(shù)據(jù)。
樣式表作者可能會濫用:鏈接和訪問的偽類唆樊,以確定用戶在未經(jīng)用戶同意的情況下訪問了哪些站點(diǎn)宛琅。
瀏覽器可能會把所有鏈接中未訪問的鏈接,或采取其他措施來保護(hù)用戶的隱私而渲染訪問和未訪問的鏈接是不同的逗旁『俦伲”

用戶的瀏覽歷史如何被破壞
為了解釋為什么不能將所有CSS屬性用于:visited,我將嘗試通過假設(shè)的情況來解釋它片效。

現(xiàn)代瀏覽器不再允許背景圖像屬性渲染红伦。

總結(jié):
  a:visited偽類可能會暴露用戶瀏覽信息記錄,攻擊者可能會據(jù)此判斷用戶曾經(jīng)訪問過的網(wǎng)站淀衣,造成不必要的損失昙读,因此這些瀏覽器決定限制a:visited的功能,所以不是代碼的問題膨桥,而是瀏覽器方面的限制蛮浑。
  所以,若是用下劃線或背景圖來判斷某鏈接是否曾被點(diǎn)擊過是失效的只嚣,那么我們就只能通過設(shè)置顏色來區(qū)別了沮稚,這時(shí)候我們就要嚴(yán)格遵從lvha規(guī)則了(但在寫小demo學(xué)習(xí)時(shí)又會發(fā)現(xiàn)有時(shí)候頁面在經(jīng)過改動后刷新會自動顯示鏈接的顏色為:visited設(shè)置中的顏色,這是因?yàn)闉g覽器緩存的原因册舞,在做小demo時(shí)可采用頭部meta編碼使其不再保留緩存)蕴掏。

附:但書寫時(shí)也要注意link--visited--hover-active順序不能顛倒。
  老外總結(jié)了一個(gè)便于記憶的“愛恨原則”(LoVe/HAte)调鲸,即四種偽類的首字母:LVHA盛杰。定義a鏈接樣式的正確順序:a:link、a:visited藐石、a:hover即供、a:active。

聲明:此文只代表個(gè)人見解于微,只供參考募狂!聯(lián)系QQ:1522025433

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市角雷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌性穿,老刑警劉巖勺三,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異需曾,居然都是意外死亡吗坚,警方通過查閱死者的電腦和手機(jī)祈远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商源,“玉大人车份,你說我怎么就攤上這事∧党梗” “怎么了扫沼?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庄吼。 經(jīng)常有香客問我缎除,道長,這世上最難降的妖魔是什么总寻? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任器罐,我火速辦了婚禮,結(jié)果婚禮上渐行,老公的妹妹穿的比我還像新娘轰坊。我一直安慰自己,他們只是感情好祟印,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布肴沫。 她就那樣靜靜地躺著,像睡著了一般旁理。 火紅的嫁衣襯著肌膚如雪樊零。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天孽文,我揣著相機(jī)與錄音驻襟,去河邊找鬼。 笑死芋哭,一個(gè)胖子當(dāng)著我的面吹牛沉衣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播减牺,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼豌习,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拔疚?” 一聲冷哼從身側(cè)響起肥隆,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稚失,沒想到半個(gè)月后栋艳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡句各,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年吸占,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晴叨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矾屯,死狀恐怖兼蕊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情件蚕,我是刑警寧澤孙技,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站骤坐,受9級特大地震影響绪杏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纽绍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一蕾久、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拌夏,春花似錦僧著、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至站故,卻和暖如春皆怕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背西篓。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工愈腾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岂津。 一個(gè)月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓虱黄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吮成。 傳聞我的和親對象是個(gè)殘疾皇子橱乱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)載自:眾成翻譯譯者:為之漫筆鏈接:http://www.zcfy.cc/article/239原文:http...
    極樂君閱讀 7,378評論 1 62
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)粱甫,斷路器泳叠,智...
    卡卡羅2017閱讀 134,714評論 18 139
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,760評論 1 92
  • :hover{}為什么要在下面茶宵? a連接常用的偽類選擇器有四種析二,根據(jù)CSS文檔的推薦,這四個(gè)選擇器最好按如下方式排...
    朱小維閱讀 1,172評論 0 0
  • 用處 普通基于元素或基于類的樣式定義像這樣 p {color: red;text-align: center;}這...
    西北偏北閱讀 1,340評論 1 3