如果網(wǎng)頁設(shè)計中一個絕對定位元素的內(nèi)容溢出其內(nèi)容框,而且overflow設(shè)置為要求剪裁該內(nèi)容,通過使用屬性clip可以改變剪裁區(qū)域的形狀。
默認值auto表示元素的內(nèi)容不應(yīng)剪裁。還可以相對于元素內(nèi)容區(qū)定義一個剪裁形狀。這不會改變內(nèi)容區(qū)的形狀,而只是改變將顯示內(nèi)容的區(qū)域形狀。
注意:盡管網(wǎng)站建設(shè)CSS2中唯一可用的剪裁形狀是矩形,不過規(guī)范確實指出,在將來的規(guī)范中可能會有其他形狀,
clip
值:rect(top,right, bottom,left)| auto | inherit
初始值:auto
應(yīng)用于:絕對定位元素(在CSS2中,clip應(yīng)用于塊級元素和替換元素)
繼承性:無
計算值:對于矩形,4個計算長度表示剪裁矩形區(qū)域的4個邊,否則,根據(jù)指定確定
這是利用形狀值rect實現(xiàn)的??梢匀缦轮付舨脜^(qū)域內(nèi)不做修改:
clip: recc(0, auto, auto, 0);
網(wǎng)頁設(shè)計rect的語法很有意思。從技術(shù)上講,可以是rect(top, right,bottom,left),注意這里的逗號,不過網(wǎng)站建設(shè)CSS2規(guī)范提供的例子中有些有逗號,有些沒有逗號,而且將rect定義為這兩種版本都能接受。在此,我們還是采用有逗號的版本,主要是因為這樣更島讀,而且這是網(wǎng)站建設(shè)CSS2.1中推薦的做法。
有一點極為重要,rect(...)的值不是邊偏移,而是距元素左上角的距離(在從右向左讀的語言中,則是與元素右上角的距離)。因此,如果一個剪裁矩形涵蓋元素左上角20 x 20像素的一個正方形,可以定義如下:
rect(0, 20px, 20px, 0)
rect (...)只允許長度值和auto,如果設(shè)置為auto,這相當于將剪裁邊界設(shè)置為適當?shù)膬?nèi)容邊界。因此,以下兩個語句含義相同:
clip: rect(auto, auto, 10px, 1em);
clip: rect(0, 0, 10px, 1em);
由于網(wǎng)頁設(shè)計中clip中的所有偏移都是距左上角的偏移,所以不允許有百分數(shù),實際上不可能創(chuàng)建一個“中心”剪裁區(qū)域,除非你知道元素本身的大小??紤]以下情況:
div#sidebar {position: absolute; top: 0; bottom: 50%; right: 50%; left: 0; clip: rect(1em,4em,6em,1em);)
由于無法知道元素會有多高或多寬,所以無法定義這樣一個剪裁矩形,要求它最后在元素內(nèi)容區(qū)向右1em或向下1em處。要想知道元素的大小,唯一的辦法就是設(shè)置元素本身的高度和寬度:
div#sidebar {position: absolute; top: 0; left: 0; width: 5em; height: 7em;
clip: rect(1em,4em,6em,1em);}
這會得到如圖10-34所示的結(jié)果,這里增加了一個虛線表示剪裁區(qū)域的邊界。這條線在顯示文檔的用戶代理中并不會真的出現(xiàn)。
不過,網(wǎng)頁設(shè)計人員可以設(shè)置負長度值,這會使剪裁區(qū)域延伸到元素框之外。如果你想將剪裁區(qū)域向上向左移0.25英寸,可以使用以下樣式(如圖10-35所示)
clip: rect(-0.25in, auto, auto,-0.25in);
可以看到,這沒什么好處。盡管剪裁區(qū)域向上向左延伸了,不過由于延伸區(qū)域內(nèi)沒有任何內(nèi)容,所以沒有多大差別。
另一方面,完全可以超越下邊界和右邊界,但不能超越上邊界或左邊界。圖10-36顯示了以下樣式的結(jié)果(要記住,這里的虛線只是為了說明,并不實際存在?。?/p>
div#sidebar {position: absolute; top: 0; left: 0; width: 5em; height: 7em; clip: rect(0,6em,9em,0);}
這會擴展可以看到內(nèi)容的區(qū)域。不過,內(nèi)容流并沒有改變,所以唯一的視覺效果就是元素下面可以看到更多的內(nèi)容。文本沒有向右流,因為其行框的寬度仍受定位元素寬度的限制。如果有一個比定位元素寬的圖像,或者有一個很長的預(yù)定義格式文本行,則可能在定位元素的右邊也可見(直到剪栽區(qū)域結(jié)束的位置)。
網(wǎng)頁設(shè)計人員可能已經(jīng)認識到,rect(...)的語法與網(wǎng)站建設(shè)CSS的其他語法相比不太一樣。原因是它基于早期的定位草案,而該草案使用了左上偏移機制。在CSS2之前,實現(xiàn)這個語法的Internet Explorer巳經(jīng)成為完備推薦,所以它與最終的rect (...)語法沖突,因為最后已經(jīng)將rect(...)修改為使用邊偏移(類似于CSS2的其余部分)。這么做是為了保證定位一致,這是合情合理的。
圖10-36:剪裁區(qū)域從元素框向下向右延伸
不過,等到這個時候已經(jīng)太晚了:市場上已經(jīng)有了具體實現(xiàn),所以沒有要求Microsoft修改瀏覽器(因為這可能破壞現(xiàn)有的頁面),而是將標準修改為適應(yīng)這個實現(xiàn)。遺憾的是,正如前面所看到的,這意味著如果高度和寬度沒有明確定義,將無法設(shè)置一致的剪裁區(qū)域。
rect(...)只接受長度單位和auto,這使問題更為嚴重。要讓百分數(shù)單位也成為合法的rect (...)值可能還有很長的一段路要走,也許將來的網(wǎng)站建設(shè)CSS版本會增加這個功能。
警告:從clip悠久復雜的歷史可以看出,當前瀏覽器中clip的實現(xiàn)方式并不一致,在所有跨瀏覽器的環(huán)境中都不能指望clip肯定采用某一種方式實現(xiàn)。
當前文章標題:網(wǎng)頁設(shè)計中的內(nèi)容裁剪
當前URL:http://www.gtalker.cn/news/wzzz/content-cutting.html