波多野结衣新婚被邻居,亚洲av无码一区二区三区在线观看,毛豆日产精品卡2卡3卡4卡免费,久久精品人人做人人爽电影蜜月

切換城市 [ 北京 武漢 ]24小時(shí)聯(lián)系電話:
24小時(shí)聯(lián)系電話: 15201609116
切換城市 [ 北京 武漢 ]

有事點(diǎn)這里 有事點(diǎn)這里  有事點(diǎn)這里 有事點(diǎn)這里

新聞資訊NEWS

CSS中的滑動(dòng)門技術(shù)日期:2009/11/14 10:23:24  

在CSS中,一個(gè)經(jīng)常被人們討論的先進(jìn)之處即背景圖像的可層疊性,并允許他們?cè)诒舜酥线M(jìn)行滑動(dòng),以創(chuàng)造一些特殊的效果。根據(jù)CSS2.0當(dāng)前的規(guī)定,每一個(gè)背景圖像都需要各自的HTML元素。在許多情況下,典型的標(biāo)記已經(jīng)為一般的接口組件提供了多種元素以供我們使用。

標(biāo)簽導(dǎo)航欄就是其中的一個(gè)例子。過去,我們頻繁的使用這些標(biāo)簽,并已成為了一種非常流行的站點(diǎn)導(dǎo)航方式,F(xiàn)今,在CSS已被廣泛支持的前景下,我們可以為我們站點(diǎn)制作出更高質(zhì)量和更好外觀的標(biāo)簽導(dǎo)航欄來。你也許知道CSS可以用來“馴服”無序的列表,或許你還曾經(jīng)看到過這種樣式的標(biāo)簽列表:

[一般的基于CSS的標(biāo)簽,采用單色及直角]

如果我們想用和以上類似的標(biāo)記,將導(dǎo)航標(biāo)簽變成這種樣式,該怎么辦呢?

[加入一定樣式的標(biāo)簽,具有圓角和3D及陰影效果]

經(jīng)過簡(jiǎn)單的設(shè)計(jì),我們是可以做到的。

創(chuàng)新于何處?

我見過的許多基于CSS的導(dǎo)航標(biāo)簽大都具有一類的特征:矩形的色塊,也許僅僅是一個(gè)輪廓,對(duì)于當(dāng)前選中的標(biāo)簽則沒有邊框,標(biāo)簽在鼠標(biāo)指針游至其上時(shí)改變顏色。這難道就是CSS所能給我們的全部嗎?一連串的小盒子和單調(diào)的色彩嗎?

在CSS被廣泛采用之前,我們已經(jīng)看到許多標(biāo)簽導(dǎo)航設(shè)計(jì)中的創(chuàng)新之處。獨(dú)創(chuàng)的外形,熟練的色彩混合,以及對(duì)真實(shí)世界中許多物理接口的模仿。但是這些設(shè)計(jì)往往過分依賴于經(jīng)過復(fù)雜制作、帶有文本的圖像,或被包裝成若干嵌套的表格。修改文本或改變標(biāo)簽的順序則需要一個(gè)復(fù)雜的過程。文本的伸縮更是不可能的,或給頁面的布局極大的影響。

純文本的導(dǎo)航欄比起文本即圖像的導(dǎo)航欄更具有持續(xù)使用性和更快的載入速度。同樣,我們甚至可以為每一個(gè)圖像加上alt屬性,對(duì)于弱視者,純文本更可以自由的改變大小。不足為奇的是,基于純文本的導(dǎo)航欄,并加以CSS樣式,又重新回到Web設(shè)計(jì)中來。但是,大多數(shù)基于CSS的導(dǎo)航欄設(shè)計(jì),至今為止仍然是毫無意義的。一種最近被采用的技術(shù)(例如CSS)可以讓我們做的更好,同樣不失先前提到的那些表格和圖片標(biāo)簽的效果。

滑動(dòng)門技術(shù)

美觀的工藝,真正靈活的接口組件,并根據(jù)文本自適應(yīng)大小,我們可用兩個(gè)獨(dú)立的背景圖像來創(chuàng)造它。一個(gè)在左邊,一個(gè)在右邊。把這兩幅圖像想象成兩扇可滑動(dòng)的門,它們滑到一起并交迭,占據(jù)一個(gè)較窄的空間;或者相互滑開,占據(jù)一個(gè)較寬的空間,就像下圖所顯示的那樣:

[圖中有兩扇門。第一幅中兩扇門疊在一起的部分較多, 第二幅則較少。]

在這個(gè)模型中,一個(gè)圖像掩蓋住另一個(gè)圖片的一部分。假設(shè)我們放置一些獨(dú)特的內(nèi)容在每個(gè)圖像的周圍,例如標(biāo)簽的圓角,我們并不希望上面一副圖像完全的遮蔽住下面一副。為了防止這種情況的發(fā)生,我們可以將上面一副圖像(此例中的左邊那幅)控制的盡可能的窄。但仍然要保證一定的寬度來顯現(xiàn)標(biāo)簽一側(cè)的獨(dú)特性。如果外部是圓角,我們就應(yīng)該控制上面一副圖像和它的弧線部分具有一樣的寬度。

[圖像顯示了左邊一個(gè)獨(dú)立較窄的帶有圓角的圖像,右邊的圖像則于其類似,只是圓角的位置不同。]

如果目標(biāo)在大小上增長(zhǎng),并超過了以上所顯示的寬度,歸咎于文本大小及字體的改變,圖像會(huì)被拉開,產(chǎn)生不美觀的間隙。我們需要判斷的是,預(yù)測(cè)這種可擴(kuò)展的量將有多大。如果在瀏覽器中改變字體的大小,目標(biāo)又會(huì)如果增長(zhǎng)呢?實(shí)際來說,我們至少應(yīng)該估算到字體大小增長(zhǎng)至300%的情況。背景圖像也得適應(yīng)這種增長(zhǎng)。對(duì)于以上的例子,我們將下面(即右邊)的圖像設(shè)為400*150像素,上面的設(shè)為9*150像素。

在頭腦中,始終要有這樣的認(rèn)識(shí):背景圖像只是顯示一個(gè)可供內(nèi)容填充的有效空間(即內(nèi)容區(qū)域和padding,稱為doorway)。這兩幅圖像始終和各自外部的邊角相錨定。背景圖像的可見部分和在一起即形成了一個(gè)具有這種標(biāo)簽形狀的空間(doorway):

[圖像顯示了兩幅圖像底部的額外高度。右邊圖像的左側(cè)同樣具有額外的寬度。可見的部分是標(biāo)簽成型。]

如果標(biāo)簽被撐大,圖像即滑開,doorway變寬,圖像的也將被顯露的更多:

[圖像顯示出兩幅圖像被拉開,形成更寬標(biāo)簽的情況,在高度上則是使用額外的那部分高度。]

此例中,我在photoshop中制作兩個(gè)平滑,細(xì)的3D標(biāo)簽圖像,如文章開頭所顯示的那樣。對(duì)于其一,內(nèi)部明亮,邊框暗淡些,用來表現(xiàn)當(dāng)前選中的標(biāo)簽。將這種技巧模型應(yīng)用于左右兩幅圖像中,我們需要擴(kuò)大標(biāo)簽圖像覆蓋的區(qū)域,將它裁剪成兩部分:

[左側(cè)和右側(cè)的圖像]

同樣的方式將應(yīng)用到被稱為“當(dāng)前”的標(biāo)簽中。一旦我們完成了這四幅圖像(1, 2, 3, 4),我們就可以開始用標(biāo)記和CSS來制作我們的標(biāo)簽了。

標(biāo)簽的創(chuàng)造

當(dāng)你在研究用CSS來創(chuàng)造水平列表時(shí),會(huì)發(fā)現(xiàn)至少有兩種方法將列表項(xiàng)安排在同一行里。兩種方法各有千秋,但都需要CSS來解決布局所帶來的混亂。一種方法使用inline box,另一種則用floats。

方法一,可能是比較普遍的一種,是將列表項(xiàng)都inline顯示。inline方法的魅力在于它的簡(jiǎn)易性。但是,對(duì)于我們即將談到的滑動(dòng)門技術(shù)來說,inline方法在特定的瀏覽器上存在一些解釋上問題。方法二,是我們將要關(guān)注的,即用floats將列表項(xiàng)安排在同一行里。令人沮喪的是,floats表面上矛盾的行為正巧回避了自然的邏輯。盡管如此,對(duì)于解決多重浮動(dòng)元素的基本認(rèn)識(shí),以及可靠浮動(dòng)的意義,仍是值得討論的。

我們將用另一種浮動(dòng)元素來解決浮動(dòng)元素的排列問題。這樣,父類元素將子類元素完全包括起來。于是,我們就可以為標(biāo)簽加上背景色彩和背景圖像。非常重要的一點(diǎn)必須記住,緊跟在標(biāo)簽后的文本元素用CSS中的clear功能來清除浮動(dòng)對(duì)象。這樣避免了浮動(dòng)標(biāo)簽影響頁面上其它元素的位置。

我們從以下的標(biāo)記開始:

<div id="header">
    <ul>
      <li><a href="#">Home</a></li>
      <li id="current"><a href="#">News</a></li>
      <li><a href="#">Products</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
</div>

現(xiàn)實(shí)中,#header div可能同樣包含logo和搜索框。對(duì)于我們的例子,我們要縮短每一個(gè)錨鏈中超鏈接的值。顯然,這些值應(yīng)該正確的包含文件或者目錄的位置。

我們從定位#header容器開始設(shè)計(jì)列表。這樣確保了這個(gè)容器確確實(shí)實(shí)的充當(dāng)了容器的作用,以包容它內(nèi)部浮動(dòng)的列表項(xiàng)。既然元素是浮動(dòng)的,我們同樣需要聲明它的寬度為100%。加入臨時(shí)的黃色背景以確保父類容器完全填滿標(biāo)簽后面的整個(gè)區(qū)域。同樣,設(shè)定默認(rèn)的文本屬性,確保樣式的統(tǒng)一:

#header {
    float:left;
    width:100%;
    background:yellow;
    font-size:93%;
    line-height:normal;
    }

現(xiàn)在,我們同樣需要為無序列表設(shè)定默認(rèn)的margin/padding值為0,并去掉列表項(xiàng)前面的標(biāo)記。每個(gè)列表項(xiàng)左浮動(dòng):

#header ul {
    margin:0;
    padding:0;
    list-style:none;
    }
#header li {
    float:left;
    margin:0;
    padding:0;
    }

設(shè)定錨鏈強(qiáng)制作為塊對(duì)象呈遞,我們便可無憂的控制所有的樣式:

#header a {
    display:block;
    }

下一步,我們將右側(cè)的背景圖像加入到列表項(xiàng)中去(改變?nèi)?strong>粗體所示):

#header li {
    float:left;
    background:url("norm_right.gif")
      no-repeat right top;
    margin:0;
    padding:0;
    }

在加入左側(cè)圖像之前,我們可以在效果1種看看目前為止的效果。(在效果中,忽略body中的規(guī)則。僅設(shè)定基本margin,padding,colors,text的屬性。)

---

現(xiàn)在我們可以將左側(cè)圖像放置在錨鏈的左邊(容器內(nèi)的元素)。我們同時(shí)加入padding,擴(kuò)大標(biāo)簽并將文本從標(biāo)簽的邊緣推開:

#header a {
    display:block;
    background:url("norm_left.gif")
      no-repeat left top;
    padding:5px 15px;
    }

這樣我們就得到了效果2。注意我們的標(biāo)簽是如何成型的。在這里,IE5/Mac的用戶會(huì)立刻驚奇道,“天啊,我的標(biāo)簽垂直堆在一起并且延伸至整個(gè)屏幕!”不要著急,我們馬上幫你解決。眼下,盡量按照下面去做,或者方便的話,臨時(shí)改換其他的瀏覽器,并且IE5/Mac版本的問題會(huì)馬上得到解決。

---

現(xiàn)在,一般標(biāo)簽的背景圖像已經(jīng)完成了,我們要為“當(dāng)前”標(biāo)簽更換圖像。我們通過對(duì)目標(biāo)列表項(xiàng)加入id="current"和錨鏈來實(shí)現(xiàn)。既然不需要改變背景的其他外觀,圖像除外,我們就使用background-image的特性:

#header #current {
    background-image:url("norm_right_on.gif");
    }
#header #current a {
    background-image:url("norm_left_on.gif");
    }

我們要在標(biāo)簽下添加一條邊框。但是,將邊框?qū)傩詰?yīng)用于父類的#header容器上,將不能解決“當(dāng)前”標(biāo)簽無需邊框的問題。于是我們制作新的帶有邊框的圖像以代替它。同樣,我們可以為它加入漸變效果:

我們將圖像放置到#header容器的背景中去(代替原有的黃色背景),將背景圖像移至到最下方,并為圖像上方留出的空白添加相應(yīng)的背景顏色。同時(shí),去掉由body繼承下來的padding,為ul的上、左、右邊加進(jìn)10像素的padding:

#header {
    float:left;
    width:100%;
    background:#DAE0D2 url("bg.gif")
      repeat-x bottom;
    font-size:93%;
    line-height:normal;
    }
#header ul {
    margin:0;
    padding:10px 10px 0;
    list-style:none;
    }

我們必須讓“當(dāng)前”標(biāo)簽覆蓋邊框,如下面提示的那樣。你也許會(huì)認(rèn)為我們將要把底部邊框加入到與其顏色相對(duì)應(yīng)的、#header背景圖像中去,然后將“當(dāng)前”標(biāo)簽的底部邊框顏色改為白色。但是,對(duì)于挑剔的觀察者,還是會(huì)發(fā)現(xiàn)一些細(xì)小的差別。于是,我們改變錨鏈的padding,為“當(dāng)前”標(biāo)簽創(chuàng)造出直角來,如下面放大的例子:

[將兩個(gè)標(biāo)簽放大,左邊顯示的標(biāo)簽角落有1像素的誤差,而右邊的則是完美的直角。]

我們通過減少1像素普通錨鏈的底部padding值(5px-1px=4px)來實(shí)現(xiàn),然后為“當(dāng)前”錨鏈補(bǔ)上減去的padding。

#header a {
    display:block;
    background:url("norm_left.gif")
      no-repeat left top;
    padding:5px 15px 4px;
    }
#header #current a {
    background-image:url("norm_left_on.gif");
    padding-bottom:5px;
    }

經(jīng)過改變,底部邊框?qū)⒃谄胀?biāo)簽中出現(xiàn),而在“當(dāng)前”標(biāo)簽中則隱藏了起來。于是,我們得到了效果3。

收尾工作

敏銳的觀察者也許會(huì)在上一例注意到白色的標(biāo)簽角落。這些不透明的角用來防止下面的圖像透過上面的一副。理論上,我們可以嘗試使用部分背景圖像來適應(yīng)標(biāo)簽的背景。但是我們的標(biāo)簽會(huì)在高度上增長(zhǎng),嘗試通過移動(dòng)背景顏色,背景圖像就會(huì)相對(duì)變矮。代替的辦法是,改變圖像,將標(biāo)簽的角落設(shè)為透明。如果弧線是反鋸齒的,我們?cè)谄溥吘壥褂幂^平均的背景色彩。

現(xiàn)在,角落已經(jīng)變成透明色,左邊的圖像將透過右邊圖像的角落。為了補(bǔ)償,我們?yōu)楸韱雾?xiàng)加入和左邊圖像寬度相吻合的padding(9px)。既然已經(jīng)為表單項(xiàng)加入了padding,我們還需去掉同樣的寬度以達(dá)到文本的居中(15px-9px=6px):

#header li {
    float:left;
    background:url("right.gif")
      no-repeat right top;
    margin:0;
    padding:0 0 0 9px;
    }
#header a {
    display:block;
    background:url("left.gif")
      no-repeat left top;
    padding:5px 15px 4px 6px;
    }

仍未結(jié)束,因?yàn)榧尤肓?個(gè)像素的padding使左邊圖像與標(biāo)簽的左邊之間產(chǎn)生了一段空白。現(xiàn)在,左側(cè)與右側(cè),可見“doorway”的邊緣接在一起,我們?cè)俨恍枰獙⒆筮厛D像保持在上方。于是,交換兩幅背景圖像的順序,相反過來。同樣交換“當(dāng)前”標(biāo)簽中使用的兩幅圖像:

#header li {
    float:left;
    background:url("left.gif")
      no-repeat left top;
    margin:0;
    padding:0 0 0 9px;
    }
#header a, #header strong, #header span {
    display:block;
    background:url("right.gif")
      no-repeat right top;
    padding:5px 15px 4px 6px;
    }
#header #current {
    background-image:url("left_on.gif");
    }
#header #current a {
    background-image:url("right_on.gif");
    padding-bottom:5px;
    }

完成這些后,我們到達(dá)了效果4。要注意的是,透明的角落在標(biāo)簽的左側(cè)產(chǎn)生了一段不能點(diǎn)擊的無效區(qū)域。這個(gè)區(qū)域在文本以外,但仍然是可以察覺到的。在標(biāo)簽的兩邊都使用透明的圖像是沒有必要的。如果我們不希望產(chǎn)生這種無效的區(qū)域,那么我們必須使用在標(biāo)簽后面使用顏色,然后用這種顏色來代替標(biāo)簽角落的透明圖像。現(xiàn)在我們僅保持這種透明角落。

---

對(duì)于剩下的問題,我們將一次性完成全部的修改:加重標(biāo)簽文本,將普通標(biāo)簽中的文本改為棕色,“當(dāng)前”標(biāo)簽文本改為深灰色,去掉鏈接的下劃線,最后將懸停文本色彩改為同樣的深灰色。經(jīng)過一系列的改變,我們將看到目前為止的效果5

一致性的解決

在效果2之后,我們公認(rèn)的一個(gè)問題就是在IE5/Mac瀏覽方式下,每個(gè)標(biāo)簽延伸并占據(jù)了整個(gè)瀏覽器的寬度,以致標(biāo)簽垂直的堆在了一起。這不是我們所希望的。

在大多數(shù)的瀏覽器中,浮動(dòng)一個(gè)元素會(huì)有收縮,收縮最小至它所包含內(nèi)容的大小。如果一個(gè)浮動(dòng)元素包含一幅圖像或其本身即圖像,便會(huì)收縮至圖像的寬度。如果僅僅包含文本,那么將會(huì)收縮至最長(zhǎng)的,不可被頂開的那文本的寬度。

一個(gè)問題出現(xiàn)在IE5/Mac中的圖片中,當(dāng)一個(gè)auto-width的塊對(duì)象元素被插入到一個(gè)浮動(dòng)的元素中時(shí)。其他的瀏覽器仍舊將浮動(dòng)縮小至最小,而無視容器內(nèi)的塊對(duì)象元素。但I(xiàn)E5/Mac并不按照這種情況,相反它將浮動(dòng)和塊對(duì)象元素?cái)U(kuò)展至盡可能的寬度。為解決這個(gè)問題,我們將錨鏈同時(shí)浮動(dòng)起來,但僅僅對(duì)于IE5/Mac,以免放棄其他的瀏覽器。首先,我們?yōu)殄^鏈設(shè)定浮動(dòng)規(guī)則。然后,我們使用反斜杠注釋法來隱藏這種規(guī)則,讓它僅僅對(duì)IE5/Mac生效,而無視其他的瀏覽器:

#header a {
    float:left;
    display:block;
    background:url("right.gif")
      no-repeat right top;
    padding:5px 15px 4px 6px;
    text-decoration:none;
    font-weight:bold;
    color:#765;
    }
/* Commented Backslash Hack
     hides rule from IE5-Mac \*/
#header a {float:none;}
/* End IE5-Mac hack */

現(xiàn)在IE5/Mac瀏覽器將按我們所期望的那樣來顯示標(biāo)簽,看效果6。對(duì)于非IE5/Mac的瀏覽器什么都不需要改變。注意到IE5.0/Mac的一系列解釋上的bug在IE5.1中解決。因此,滑動(dòng)門技術(shù)在5.0版本中所遭遇的問題超出了hack的限度。既然升級(jí)到IE5.1/Mac已不成難題,OS 9 Macs/IE5.0的占有率應(yīng)逐漸縮減至很低。

舉一反三

我們剛剛演練了滑動(dòng)門技術(shù),用純文本和無序列表來創(chuàng)造導(dǎo)航標(biāo)簽,加以少量的樣式。它的裝載速度快,具有可維持性,并且文本的大小可以在不破壞外觀的情況下進(jìn)行較大的伸縮。不必我們?cè)僦厣暝趧?chuàng)造復(fù)雜樣式的導(dǎo)航欄中,滑動(dòng)門技術(shù)所表現(xiàn)出來的彈性了。

只有想不到,沒有做不到。最終效果向我們展示了一例,但我們?cè)O(shè)計(jì)不可能因此而被限定死。

在某些場(chǎng)合,標(biāo)簽不一定是對(duì)稱的。我很快就制作了這種標(biāo)簽的第二個(gè)版本,也有陰影3D的樣式,有角的邊緣,和具有特色的左邊部分。依據(jù)第二個(gè)版本,我們甚至可以交換左右兩幅圖像的位置。以這種細(xì)致的布局和靈巧的圖像控制,我們可以去掉按鈕的下邊框以便標(biāo)簽圖像更好的去適應(yīng)背景,如第三個(gè)版本所顯示的那樣。如果你的瀏覽器支持多個(gè)樣式表的切換,你甚至可以靠它在多個(gè)版本的導(dǎo)航欄之間自由切換。

仍有許多我們沒有提到的其他的效果?焖俚奶嵋幌拢腋淖兪髽(biāo)懸停的文本色彩,但是真?zhèn)圖像可以替換掉以創(chuàng)造出更有趣的變換效果。即使標(biāo)記中兩個(gè)嵌套的HTML元素,也可以用CSS來達(dá)到一些我們還未想到的效果。我們?cè)诖死袆?chuàng)造的僅僅是水平的標(biāo)簽欄,但滑動(dòng)門亦可應(yīng)用于許多其他的情形。閣下覺得如何呢?


譯者的話:第一次翻譯文章,對(duì)許多用詞不置可否,難免有一些錯(cuò)誤,期待讀者們的指正

咨詢電話:15201609116

地 址:北京市海淀區(qū)建材城中路12號(hào)院17號(hào)樓1層119室
武漢分公司地址:湖北省武漢市洪山區(qū)南國雄楚廣場(chǎng)A4棟2011室
鄭州分公司地址:河南鄭州金水區(qū)東風(fēng)路科技市場(chǎng)對(duì)面米蘭陽光6號(hào)樓917室
郵 箱:haidanet@163.com
24小時(shí)聯(lián)系電話: 15201609116 13651084380