黃小二的讀書(shū)筆記
有才而性緩定屬大才,有智而氣和斯為大智。人偏狹我受之以寬容,人險(xiǎn)仄我持之以坦蕩。緩事宜急干,敏則有功;急事宜緩辦,忙則多措。 --李叔同
首頁(yè)
新隨筆
聚合
管理
隨筆-7 評(píng)論-24 文章-102 trackbacks-0
[轉(zhuǎn)] 完美打造超完美CSS圓角框
原文轉(zhuǎn)自:
完美打造超完美CSS圓角框
http://www.siteengine.net/thread_13_13146_1.html
推薦網(wǎng)站:
Spiffy Corners
http://www.spiffycorners.com/index.php?sc=spiffy&bg=1FD477&fg=264ADA&sz=5px
只需要填入 前景色、背景色、邊框粗細(xì) 就可以自動(dòng)生成 圓角邊框 代碼。
完美打造超完美CSS圓角框
CSS圓角框的出現(xiàn)已經(jīng)不是一天兩天了,它出現(xiàn)的直接目的就是為了替換原有的以四個(gè)角上安放圖片為主的圓角框,它的優(yōu)勢(shì)在于不需要用圖片,對(duì)于統(tǒng)一主題中出現(xiàn)不同顏色樣式的需求,不需要用作圖工具重復(fù)制作多套圓角圖片,而可以直接從css抽取顏色信息,方便做成獨(dú)立的配色方案,其次,它對(duì)于圓角框長(zhǎng)寬等位置信息的設(shè)置具有比圖片圓角更為高明的自適應(yīng)能力,真正可以把程序員的注意力集中到內(nèi)容的排布而不是陷入對(duì)頁(yè)面布局應(yīng)對(duì)的泥藻中(這也可以作為一個(gè)簡(jiǎn)單的分離關(guān)注點(diǎn)的有效例子)。
CSS圓角框有如此優(yōu)秀,那么為什么不用呢,最近,在我和一位好兄弟合作的項(xiàng)目中出現(xiàn)了上述需求(這位兄才在web開(kāi)發(fā)領(lǐng)域擁有多年的經(jīng)驗(yàn),曾經(jīng)自己寫(xiě)過(guò)ajax框架,他做的東西精巧別致,思維獨(dú)特,始終是我心目中強(qiáng)悍的高手),于是決定在其中使用CSS圓角框替換傳統(tǒng)的圖片圓角,我把設(shè)想告訴他,但是他的第一反應(yīng)是讓我不要用CSS圓角,原因如下:
CSS圓角從所周知會(huì)出現(xiàn)鋸齒,難以處理
CSS圓角內(nèi)部一般都無(wú)法放置復(fù)雜的頁(yè)面元素,放置其中的元素要么會(huì)出現(xiàn)大小難以調(diào)節(jié),要么會(huì)使得整個(gè)圓角框發(fā)生嚴(yán)重的元素構(gòu)圖混亂(也就是整個(gè)頁(yè)面不聽(tīng)我們的話,發(fā)生破裂)
CSS圓角很難跨瀏覽器,兼容性差
(人們常說(shuō)提出一個(gè)問(wèn)題往往比解決一個(gè)問(wèn)題更為難能可貴,更何況我的這位兄弟能在第一反應(yīng)給CSS圓角框的缺陷做出如此精辟的概括,更顯示出他在web開(kāi)發(fā)領(lǐng)域扎實(shí)的基本功和對(duì)事物針砭時(shí)弊的觀察力,這一點(diǎn)始終讓我望塵莫及。)
上述CSS圓角框的缺陷都如我這位兄弟所說(shuō),的確都存在,而且沒(méi)有一個(gè)問(wèn)題能夠輕易解決,但是有句話怎么說(shuō)來(lái)著,“車(chē)到山前未必有路,與其繞過(guò)這座山,還不如踏踏實(shí)實(shí)一步一個(gè)腳印的踏出一條路來(lái)”,一來(lái)方便自己行走,二來(lái)蔭庇后人。
那么讓我們一個(gè)一個(gè)的仔細(xì)分析上述問(wèn)題,慢慢解決他們
問(wèn)題一
首先看鋸齒,我們知道鋸齒的實(shí)質(zhì)是肉眼無(wú)法接受眼前所看到的現(xiàn)實(shí)的狀況,計(jì)算機(jī)在處理曲線圖形時(shí),若是沒(méi)有專(zhuān)門(mén)的解決方案,鋸齒可以說(shuō)無(wú)處不在,那么這個(gè)解決方案究竟在那里呢?聰明的你一定會(huì)在第一時(shí)間聯(lián)想到,我們的圖形處理利器photoshop(以下簡(jiǎn)稱(chēng)ps),ps在圖形處理領(lǐng)域可謂一直是領(lǐng)軍羊,它不僅處理速度極快,而且在技術(shù)上擁有大量的積累。我們這里只看它是如何處理鋸齒的
下圖為鋸齒和抗鋸齒后圖形的對(duì)比
我們看到在使用了抗鋸齒的圓角邊緣呈現(xiàn)出一種漸進(jìn)的半透明狀態(tài),沒(méi)錯(cuò),它其實(shí)就是一個(gè)半透明,這也就是ps中抗鋸齒算法的本質(zhì)假設(shè)前景圖層上某A點(diǎn),背景圖層上某B點(diǎn),目標(biāo)半透明C點(diǎn),那么我們可以用如下公式來(lái)獲取目標(biāo)點(diǎn)C的RGB值:
XML/HTML代碼
R(C)=(R(A)*alpha+R(B)*(256-alpha))/256
G(C)=(G(A)*alpha+R(B)*(256-alpha))/256
B(C)=(B(A)*alpha+R(B)*(256-alpha))/256
alpha取值范圍 [0,256]
(R Red, G Green, B Blue)
這就是一個(gè)半透明的算法(其實(shí)是一個(gè)著差運(yùn)算),這個(gè)算法是方形(box)抗鋸齒算法的基礎(chǔ)(當(dāng)然,抗鋸齒本身就是一個(gè)高級(jí)話題,算法也有很多種,比如方形(box),三角(triangle),高斯(gauss),米西爾(mitchell),其中大多是動(dòng)態(tài)圖形抗鋸齒,有興趣的朋友可以自己研究一下,這里只討論最簡(jiǎn)單的靜態(tài)圖形抗鋸齒),方形抗鋸齒算法是在過(guò)濾區(qū)域內(nèi)使用均等的權(quán)重把采樣疊加在一起實(shí)現(xiàn)的,也就是說(shuō)離邊緣越近,alpha值越高,離邊緣越遠(yuǎn),alpha值越低,你可以在邊緣的各像素平均分布alpha值來(lái)達(dá)到抗鋸齒的目的
對(duì)于鋸齒和抗鋸齒有了基本的概念,那么解決方法也有了
1) 最簡(jiǎn)單的解決方法是在ps中做一個(gè)圓角矩形,放大后把邊緣的各像素點(diǎn)依葫蘆畫(huà)瓢照搬到頁(yè)面上去(用css控制border-color和background-color兩個(gè)屬相實(shí)現(xiàn))
2) 更為穩(wěn)妥的解決方法應(yīng)該是做一個(gè)專(zhuān)門(mén)的程序來(lái)解決抗鋸齒,這樣一通百通,原本想自己寫(xiě),可是得益于別人已經(jīng)做了這樣的工作
http://www.spiffycorners.com
這是一個(gè)php的實(shí)現(xiàn)版本,用的就是方形抗鋸齒算法,有了這么方便的工具,相信你可以最快速的做出沒(méi)有任何鋸齒的CSS圓角框來(lái)
問(wèn)題二,三
在web2.0如火如荼的今天,圓角成為一種首推的web2.0標(biāo)志性設(shè)計(jì)元素和風(fēng)格,webstandard由于其強(qiáng)大的控制能力和便于修改的特性得到大面積推廣,這直接促使div(span)+css的設(shè)計(jì)模式越來(lái)越得到大家的認(rèn)可,于是CSS圓角框就有了它存在的最大理由,可惜的是,大多數(shù)圓角框的設(shè)計(jì)意圖僅僅是為了要在其中放置一些簡(jiǎn)單的頁(yè)面元素,諸如文本和圖片,由于需求的局限,設(shè)計(jì)者無(wú)法考慮到日后圓角框還有更大的活動(dòng)空間(不要去責(zé)怪設(shè)計(jì)者,CSS圓角框作為一種設(shè)計(jì)手段上的革新,本身就是一種偉大的顛覆和創(chuàng)造,我們又怎么忍心對(duì)設(shè)計(jì)者要求的如此十全十美,如此苛刻呢)
下圖為在Firefox(以下簡(jiǎn)稱(chēng)ff)中頁(yè)面出現(xiàn)混亂的情況
正確的顯示效果
由于圓角框內(nèi)放置了復(fù)雜的頁(yè)面元素(包括了float屬性,margin屬性等),ff下混亂的頁(yè)面元素大家也看到了,可以用慘不忍睹來(lái)形容,而同樣的錯(cuò)誤在ie6, ie7中也會(huì)發(fā)生,那么究竟是什么導(dǎo)致了元素混亂不堪呢?
下面以spiffycorners生成的代碼為例
CSS代碼
.spiffy{display:block}
.spiffy *{
display:block;
height:1px;
overflow:hidden;
font-size:.01em;
background:#CC0000}
.spiffy1{
margin-left:3px;
margin-right:3px;
padding-left:1px;
padding-right:1px;
border-left:1px solid #e99191;
border-right:1px solid #e99191;
background:#d83f3f}
.spiffy2{
margin-left:1px;
margin-right:1px;
padding-right:1px;
padding-left:1px;
border-left:1px solid #f9e5e5;
border-right:1px solid #f9e5e5;
background:#d53030}
.spiffy3{
margin-left:1px;
margin-right:1px;
border-left:1px solid #d53030;
border-right:1px solid #d53030;}
.spiffy4{
border-left:1px solid #e99191;
border-right:1px solid #e99191}
.spiffy5{
border-left:1px solid #d83f3f;
border-right:1px solid #d83f3f}
.spiffyfg{
background:#CC0000}
XML/HTML代碼
<
div
>
<
b
class
="spiffy"
>
<
b
class
="spiffy1"
><
b
></
b
></
b
>
<
b
class
="spiffy2"
><
b
></
b
></
b
>
<
b
class
="spiffy3"
></
b
>
<
b
class
="spiffy4"
></
b
>
<
b
class
="spiffy5"
></
b
></
b
>
<
div
class
="spiffyfg"
>
<!
– content goes here –
>
</
div
>
<
b
class
="spiffy"
>
<
b
class
="spiffy5"
></
b
>
<
b
class
="spiffy4"
></
b
>
<
b
class
="spiffy3"
></
b
>
<
b
class
="spiffy2"
><
b
></
b
></
b
>
<
b
class
="spiffy1"
><
b
></
b
></
b
></
b
>
</
div
>
在仔細(xì)觀察了代碼之后我們發(fā)覺(jué)一個(gè)問(wèn)題,在其中的容器元素spiffyfg的css中沒(méi)有出現(xiàn)float屬性,float是用于控制頁(yè)面元素浮動(dòng)的工具,它是負(fù)責(zé)頁(yè)面布局的強(qiáng)有力的手段,我們?cè)陧?yè)面設(shè)計(jì)中會(huì)用到大量的float控制代碼,但是,對(duì)于float而言,微軟的IE和Firefox有著不同的理解,在W3C對(duì)于webstandard的標(biāo)準(zhǔn)中,嚴(yán)格的規(guī)定了屬性的繼承法則,子元素必須以明文聲明某個(gè)屬性是從它的父元素繼承而來(lái),若是該屬性缺失,則認(rèn)為繼承終止,F(xiàn)irefox就嚴(yán)格的貫徹了這一標(biāo)準(zhǔn), 而微軟的產(chǎn)品一向以實(shí)用主義和尊重用戶體驗(yàn)聞名,這勢(shì)必導(dǎo)致他更遵從于產(chǎn)品的價(jià)值標(biāo)準(zhǔn),在IE中,瀏覽器對(duì)屬性的解釋會(huì)采取就近原則,如果子元素屬性缺失,就會(huì)從它的父元素獲取屬性。這種做法粗看上去方便了設(shè)計(jì)者,但已不適應(yīng)走向標(biāo)準(zhǔn)化的今天。
沒(méi)錯(cuò),我們已經(jīng)找到了問(wèn)題的癥結(jié),于是我們?cè)谶@里可以把第二個(gè)和第三個(gè)問(wèn)題歸結(jié)為由于ie和ff在float屬性上的不同解釋所引發(fā)的沖突和不兼容。
我們找到了問(wèn)題的本質(zhì)原因,但又帶來(lái)了新的問(wèn)題,如何編寫(xiě)代碼適應(yīng)兩個(gè)不同的瀏覽器,出于同一屬性的不同解釋?zhuān)簿鸵馕吨@是一個(gè)原子性問(wèn)題,擅自改動(dòng)代碼,造成的結(jié)果只能是拆東墻補(bǔ)西墻,這時(shí)候,我們想,是否有一個(gè)工具,IE認(rèn)可,F(xiàn)F不認(rèn)可,那不就解決問(wèn)題了,那么這樣的工具存在嗎,這個(gè)時(shí)候我的這位兄弟提醒了我,應(yīng)該說(shuō),上帝在關(guān)閉一扇門(mén)的時(shí)候總會(huì)為其打開(kāi)另一扇門(mén)(不要把上帝認(rèn)為是比爾蓋茨^_^),微軟擅做決定改變了標(biāo)準(zhǔn),讓我們無(wú)法設(shè)計(jì)統(tǒng)一的代碼,但在其css的設(shè)計(jì)中也提供了一個(gè)他獨(dú)有的工具:表達(dá)式(expression),表達(dá)式的最初設(shè)計(jì)意圖是為了在css中插入可執(zhí)行的javascript代碼,方便對(duì)群組元素方便的賦值,而在實(shí)踐中我們發(fā)現(xiàn),這一工具不為ff認(rèn)可,于是問(wèn)題就出現(xiàn)了轉(zhuǎn)機(jī)。
針對(duì)屬性繼承的問(wèn)題,我們可以在容器元素spiffyfg的屬性中插入如下代碼
CSS代碼
.spiffyfg{
background:#CC0000
float:left; /*for Firefox*/
float:expression("none"); /*for IE */
}
還有一個(gè)小問(wèn)題,兩款瀏覽器正對(duì)圓角邊框的顯示方法也會(huì)有不同,同樣的解決方法,在.spiffy *元素中插入
CSS代碼
.spiffy *{
display:expression("block");
display:-moz-box;
height:1px;
overflow:hidden;
font-size:.01em;
background:#CC0000
}
OK,到現(xiàn)在為止,借助與各種工具,我們成功的打造了一款沒(méi)有任何鋸齒,可以容納任意復(fù)雜元素而又沒(méi)有任何兼容性問(wèn)題的圓角框本文在思考實(shí)踐和寫(xiě)作過(guò)程中均受到了我的這位好兄弟的積極的啟發(fā)和引導(dǎo),可以說(shuō)沒(méi)有他的經(jīng)驗(yàn)和智慧,我們無(wú)法解決這些問(wèn)題,文章的大量篇幅也不僅局限于解釋原理和解決問(wèn)題,而是希望能通過(guò)這樣一個(gè)在常人看來(lái)不起眼的圓角框的改良過(guò)程,給大家以問(wèn)題解決思路和攻克難關(guān)的精神上的啟發(fā)
問(wèn)題雖小,我們或許也能找到迂回的道路,可人生中總會(huì)碰到絕境,如何逢生不在于工具,而在于你有沒(méi)有絕境逢生的信念。
CSS圓角有立體感的DIV邊框
CSS制作圓角有立體感的DIV邊框,沒(méi)有使用任何的修飾圖片哦,感覺(jué)酷棒,如果對(duì)顏色不滿意,可以自己改,不過(guò)要注意顏色之間的色差,要不然效果不理想。其實(shí)不用圖片的話網(wǎng)頁(yè)加載非常快,不過(guò)CSs定義略顯麻煩些。
折疊/展開(kāi)
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=utf-8"
/>
<
title
>
圓角邊框
</
title
>
<
style
type
="text/css"
>
#sash_left
{
}
{
width
:
430px
;
float
:
left
;
}
#sash_left ul
{
}
{
text-align
:
left
;
vertical-align
:
middle
;
padding-left
:
75px
;
}
#sash_left ul li
{
}
{
line-height
:
16px
;
margin
:
2px 0
;
}
.b1, .b2, .b3, .b4
{
}
{
font-size
:
1px
;
overflow
:
hidden
;
display
:
block
;
}
.b1
{
}
{
height
:
1px
;
background
:
#AAA
;
margin
:
0 5px
;
}
.b2
{
}
{
height
:
1px
;
background
:
#E0E0E0
;
border-right
:
2px solid #AAA
;
border-left
:
2px solid #AAA
;
margin
:
0 3px
;
}
.b3
{
}
{
height
:
1px
;
background
:
#E3E3E3
;
border-right
:
1px solid #AAA
;
border-left
:
1px solid #AAA
;
margin
:
0 2px
;
}
.b4
{
}
{
height
:
2px
;
background
:
#E6E6E6
;
border-right
:
1px solid #AAA
;
border-left
:
1px solid #AAA
;
margin
:
0 1px
;
}
.contentb
{
}
{
height
:
186px
;
background
:
#E9E9E9
;
border-right
:
1px solid #AAA
;
border-left
:
1px solid #AAA
;
}
</
style
>
</
head
>
<
body
>
<
div
id
="sash_left"
>
<
b
class
="b1"
></
b
><
b
class
="b2"
></
b
><
b
class
="b3"
></
b
><
b
class
="b4"
></
b
>
<
div
class
="contentb"
>
<
ul
>
<
li
class
="dashedline"
>
JavaScript/CSS特效代碼
</
li
>
</
ul
>
</
div
>
<
b
class
="b4"
></
b
><
b
class
="b3"
></
b
><
b
class
="b2"
></
b
><
b
class
="b1"
></
b
>
</
div
>
</
body
>
</
html
>
posted on 2010-04-21 12:09
黃小二
閱讀(302)
評(píng)論(0)
編輯
收藏
所屬分類(lèi):
Web Design
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
html中圖片ATL參數(shù)分行、出錯(cuò)顯示
CSS網(wǎng)頁(yè)配色、隔行換色、選項(xiàng)卡、Div滾動(dòng)條
[轉(zhuǎn)] 完美打造超完美CSS圓角框
CSS 書(shū)寫(xiě)相關(guān)
《重構(gòu)HTML: 改善Web應(yīng)用的設(shè)計(jì)》讀書(shū)筆記
正則表達(dá)式相關(guān)(增加收集中...)
網(wǎng)頁(yè)實(shí)際時(shí)用GBK還是UTF-8
Dreamweaver 8.0 里的樣式設(shè)計(jì)器
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
文章分類(lèi)
(147)
[DB](5)
[DB].MySQL(7)
[DB].Oracle(14)
[DB].SQL Server(8)
Ajax(13)
ASP.NET(18)
C#(19)
J2EE(22)
J2SE(12)
S/S2SH(15)
Web Design(8)
雜談(6)
文章檔案
(108)
2010年6月 (1)
2010年5月 (12)
2010年4月 (18)
2009年9月 (3)
2009年8月 (2)
2009年7月 (6)
2009年6月 (3)
2009年5月 (7)
2009年4月 (10)
2009年3月 (1)
2009年1月 (1)
2008年12月 (4)
2008年11月 (1)
2008年10月 (17)
2008年9月 (17)
2008年8月 (2)
2008年7月 (3)
在線幫助
Java API Specifications
Java 開(kāi)源大全
javaNB 在線文檔
MSDN 技術(shù)資源庫(kù)
MySQL 5.1參考手冊(cè)
Oracle Documentation
w3school 在線教程
開(kāi)源軟件庫(kù)
Ajax/JavaScript腳本大全
Asp.net源碼專(zhuān)業(yè)站
CSDN開(kāi)源頻道
CSS9.NET
源碼愛(ài)好者
社區(qū)
developerWorks 中國(guó)
最新評(píng)論
1.?re: SQL Server 2005/2008 對(duì)With Encryption選項(xiàng)創(chuàng)建的存儲(chǔ)過(guò)程解密
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--專(zhuān)業(yè)祛痘
2.?re: SQL Server 2005/2008 對(duì)With Encryption選項(xiàng)創(chuàng)建的存儲(chǔ)過(guò)程解密
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--lolola
3.?re: 在 WinForm中使用 WebClient上傳文件
44444444444444444444444
--熱熱
4.?re: 使用 HibernateTemplate 實(shí)現(xiàn)分頁(yè)查詢 (HibernateCallback接口)
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--redcoatjk
5.?re: SQL Server 2005/2008 對(duì)With Encryption選項(xiàng)創(chuàng)建的存儲(chǔ)過(guò)程解密
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--謝謝樓主
評(píng)論排行榜
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 黃小二
主站蜘蛛池模板:
嫩草成人永久免费观看
|
亚洲а∨精品天堂在线
|
国产免费一区二区视频
|
亚洲精品高清国产一线久久
|
一级视频免费观看
|
国产亚洲日韩在线三区
|
9久久免费国产精品特黄
|
亚洲va久久久噜噜噜久久男同
|
免费视频一区二区
|
久久精品国产精品亚洲毛片
|
国产a视频精品免费观看
|
日韩亚洲产在线观看
|
永久免费av无码网站大全
|
亚洲人色大成年网站在线观看
|
久久精品毛片免费观看
|
亚洲伊人久久大香线蕉啊
|
国产老女人精品免费视频
|
免费一区二区无码视频在线播放
|
亚洲中文字幕久久精品无码2021
|
亚洲国产成人精品电影
|
美女裸身网站免费看免费网站
|
精品免费AV一区二区三区
|
亚洲色无码专区一区
|
在线观看免费亚洲
|
精品一区二区三区免费视频
|
成人毛片18女人毛片免费
|
国产精品亚洲五月天高清
|
国产AⅤ无码专区亚洲AV
|
99在线在线视频免费视频观看
|
亚洲国产成人99精品激情在线
|
国产又大又长又粗又硬的免费视频
|
日韩免费码中文在线观看
|
皇色在线视频免费网站
|
婷婷亚洲综合一区二区
|
国产A在亚洲线播放
|
成人黄动漫画免费网站视频
|
中美日韩在线网免费毛片视频
|
日韩精品亚洲人成在线观看
|
国产成人免费片在线观看
|
波多野结衣免费一区视频
|
亚洲精品国产suv一区88
|