国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > CSS > 正文

CSS教程:新的圖像替換方法

2024-07-11 09:03:57
字體:
供稿:網(wǎng)友

武林網(wǎng)(www.survivalescaperooms.com)文章簡(jiǎn)介:熟悉css的開發(fā)者一定知道圖像替換技術(shù),也深知它的意義,Dave Shea 曾在他的一篇文章對(duì)此做了詳細(xì)的總結(jié),參看 Dave Shea’s excellent summary ,Paul Young 在分析現(xiàn)存的所有方法的優(yōu)缺點(diǎn)之后,提出了一種新的方法,并將其命名為“狀態(tài)域方法”(The State Method),

熟悉css的開發(fā)者一定知道圖像替換技術(shù),也深知它的意義,Dave Shea 曾在他的一篇文章對(duì)此做了詳細(xì)的總結(jié),參看 Dave Shea’s excellent summary ,Paul Young 在分析現(xiàn)存的所有方法的優(yōu)缺點(diǎn)之后,提出了一種新的方法,并將其命名為“狀態(tài)域方法”(The State Method),本文將詳細(xì)介紹該方法的原理:

現(xiàn)存方法的缺點(diǎn):

新的圖像替換方法:

新的圖像替換技術(shù)需要借助于js來實(shí)現(xiàn),但很容易執(zhí)行,只需要將一小段js引入到頭部即可。一旦js執(zhí)行,響應(yīng)的規(guī)則前將附加“.image-on”,只要客戶端的圖片未被禁用,規(guī)則就會(huì)生效,下面是一條應(yīng)用到h1“狀態(tài)域方法”的聲明:

h1 {
 width: 100px;
 height: 50px;
}

@media screen { 
 .images-on h1 {
   text-indent: -10000px;
   background-image: url(image.png);
   overflow: hidden; 
 }
}

第一條規(guī)則總是生效,第二條只有在image未被禁用時(shí)生效。“text-indent”使文字偏移于屏幕之外,“overflow:hidden”主要用來在FF下放置錨點(diǎn)在被點(diǎn)擊時(shí)其焦點(diǎn)偏移于屏幕之外。

第二條規(guī)則包繞在@media screen中,主要用來保證圖像替換只發(fā)生在屏幕閱讀器中,而不是在打印狀態(tài)下執(zhí)行。如果不這樣處理,頁(yè)面打印時(shí),多數(shù)用戶將看到一個(gè)很大的空隙而不是有意義的文本。

該項(xiàng)技術(shù)執(zhí)行起來很快。因?yàn)槲谋酒朴谄聊恢?,圖像可以包含透明元素,透過圖像本身,你看不到任何文本。Js執(zhí)行很快,幾乎是瞬時(shí)的,它充分利用瀏覽器本身的特性。

方法解析

“狀態(tài)域方法”是在一種假定的狀態(tài)下,快速使css規(guī)則生效的方法,其上下文背景為document,這樣避免了瀏覽器遍歷DOM樹。應(yīng)用“狀態(tài)域方法”有兩個(gè)理由:

  • 針對(duì)用戶的反應(yīng),頁(yè)面部分內(nèi)容再格式化;
  • 基于客戶端瀏覽器、設(shè)備、和其它狀況而附加額外的樣式。
  • “狀態(tài)域方法”通過使用下面的script給html附加一個(gè)class。

       document.enableStateScope = function(scope, on)
       {
         var de = document.documentElement;
         if (on)
         de.className += " " + scope;
         else
         de.className = de.className.replace(
           new RegExp("//b" + scope + "//b"), "");
       };

    這段js有一點(diǎn)小問題,在示例頁(yè)中切換功能并不生效,我重新修改了一下,代碼如下:

    function hasClass(ele,cls) {
    return ele.className.match(new RegExp('(//s|^)'+cls+'(//s|$)'));
    }
    function addClass(ele,cls) {
    if (!this.hasClass(ele,cls)) ele.className += " "+cls;
    }
    function removeClass(ele,cls) {
    if (hasClass(ele,cls)) {
    var reg = new RegExp('(//s|^)'+cls+'(//s|$)');
    ele.className=ele.className.replace(reg,' ');
    }
    }
    document.enableStateScope = function(scope, on) {
    var de = document.documentElement;
    On ?  addClass(de,scope) : removeClass(de,scope);  
    };

    上面的hasClass、addClass、removeClass方法借用的是《Pro JavaScript Techniques》提供的方法。如果你使用過jquery,方法將更簡(jiǎn)單。

    “狀態(tài)域”可以通過下面的方法來切換:

    if (condition == true) {
    document.enableStateScope("myScope", true);
    }

    如果“狀態(tài)域”為“on”,狀態(tài)域的名字將附加到規(guī)則的選擇器之前,下面這條規(guī)則在條件為真時(shí)會(huì)將錨點(diǎn)的顏色變成blue。

    a { color: red; }
    .myScope a { color: blue; }

    正如你所預(yù)想的那樣,狀態(tài)域圖像替代技術(shù)是通過檢查圖像是否被禁用而工作的。如果未被禁用,將激活“image-on”狀態(tài)域,這很直接了當(dāng)。

    發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 大荔县| 丹凤县| 科技| 芦山县| 巴南区| 湖北省| 偏关县| 虎林市| 巴中市| 班玛县| 淮安市| 长兴县| 珲春市| 临海市| 安龙县| 兰考县| 文化| 武宁县| 万盛区| 西贡区| 丹巴县| 雷山县| 碌曲县| 河间市| 平湖市| 铁力市| 泰安市| 且末县| 廊坊市| 平果县| 屏山县| 丰城市| 和政县| 白玉县| 阳曲县| 正阳县| 怀安县| 怀安县| 陇川县| 蒙阴县| 星座|