導言:
本文探討的是圓角框的終極解決方案,其核心關鍵詞是“圓滑、完美、兼容、重用性、語義”,這些技術都是收集目前網絡上最流行的做法。縱觀種種方法,各有其優勢,請針對不同的環境分別使用。
圓角框,因為其樣式比直角框漂亮,所以成為設計師心中偏愛的設計元素。現在的web標准下大量的網頁、博客都采用圓角框設計,成為一道亮麗的風景線。
然而,就是這個圓角,卻成為了網頁前端人員心中永遠抹之不去的陰影,對它,可以說是又痛又愛。愛的是它的漂亮,痛的是要讓它兼容通行於各種不同的浏覽器卻成為一個永遠的神話。
讓我們來回顧一下目前網絡流行的都有哪些解決方案。
第一種:無圖片純CSS圓角框
收錄理由:兼容性強,不用圖形
圖一
特點:
缺點:
實現原理:
用很多1像素高的div容器,利用背景色和邊框色來模擬出圓角框的輪廓線。
實例演示: http://www.cssplay.co.uk/boxes/snazzy.html
第二種:無圖片純CSS圓角框,用特殊字符(&bull)
收錄理由:圓滑,不用圖形
圖二
特點:
缺點:
實現原理:
用特殊字符(&bull),利用定位,截取四分之一圓模擬出圓角框的一個角圖片。
實例演示:http://www.cssplay.co.uk/boxes/curves.html
第三種:圖片圓角框
收錄理由:兼容性強,可以表現很復雜的圓角效果。
圖三
特點:
缺點:
利用九宮格原理,在一個容器的四個角加入絕對定位(或相對定位)的四張圓角圖片。
實例演示:http://www.cssplay.co.uk/boxes/three_cornered.html
第四種:利用VML繪制圓角(IE only)
收錄理由:無圖片,平滑,可加陰影邊框
圖四
特點:
缺點:
實現原理:使用IE專用的VML來畫出圓角。
<v:roundrect
id="roundbox"
class="circle"
strokecolor="red"
strokeweight="2px"
arcsize="0.08">
</ v:roundrect >
注意加入引用空間:
<html xmlns:v XMLns="http://www.w3.org/1999/xHtml">
這是兼容的用法,
XMLns:v一不能少,否則。。。
樣式表中加入這一句話:
v":*{behavior:url(#default#VML);display:inline-block;}
Arcsize為半徑
Strokeweight為邊框線寬度
Strokecolor為邊框線的顏色
實例演示:(請在IE系列浏覽器下查看本實例)
運行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
第五種:利用私有屬性繪制圓角(FF3 only)
收錄理由:平滑無鋸齒
圖五
特點:
缺點:
實現原理:
使用FF3專用的私有屬性來畫出圓角。
只用兩種屬性就能體現圓滑的圓角框
-moz-border-radius:10px;/*圓角半徑*/
Border:5px red solid;/*邊框大小*/
實例演示:(請在FF3浏覽器下觀看,其它浏覽器不支持)
運行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
第六種:無圖片腳本圓角框(JS半完美解決方案)
這種方案目前應該是比較完美的方案了。
圖六
特點:
缺點:
實例演示:http://www.curvycorners.net/examples.php(有三個演示例子)
結語:
目前的css因為不能為一個容器中定義多張背景圖片,造成了為了這種圓角效果而加入冗余標簽。聽說CSS3會引入這一屬性,可能到哪時,就是圓角框統一的時候了。另外也聽說在CSS3中有意向加入像FF3私有屬性(-moz-border-radius)的方法,這也可以完美地解決這個問題。但在目前的情勢下,可能也只有用上面的這些方法來過渡了,強烈期待CSS3的到來。
總而言之:要實現絕對的完美圓角框在目前的形勢下基本上是不可能的,所以取名為“半完美解決方案”。