天天看點

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

11.11是公司成立的日子,16歲啦,我呢3歲半,感謝公司給了這樣一個平台,讓我得以學習和成長,這裡祝願公司發展越來越好~

進入主題,每年11月11号是光棍節,産生于校園,本來隻是一流傳于年輕人的娛樂性節日,以慶祝自己仍是單身一族為驕傲,而如今是各大商家以脫光為由打折促銷的時期,成為了所謂的”購物節“,雙11也算了,後面還要搞雙12,不得不吐槽下。

于是呢,熬夜加班做了11.11的活動,在pc端遇到了透明背景和透明圖檔的問題,其實以前也遇到過,隻是沒有總結起來,就忘記了,這次又撞牆了,必須記錄下來,一來給自己做個小總結,提個醒,最近變懶了,再不努力就要倒挂了;二來是因為在網絡上并沒有完整的解決方案,希望可以幫助到遇到此類問題的朋友,今天主要講解背景透明的解決方案,共勉~

重點内容入口:

<a href="http://www.cnblogs.com/peunzhang/p/4089894.html#rgba_bug">ie6和部分ie7核心的浏覽器會讀懂rgba</a>

<a href="http://www.cnblogs.com/peunzhang/p/4089894.html#ie_filter_bug">ie專屬濾鏡 filter:alpha的相容處理</a>

<a href="http://www.cnblogs.com/peunzhang/p/4089894.html#solve">背景透明,文字不透明全相容方案</a>

測試浏覽器:

virtie6、虛拟機下xp的ie6、純正ie8、純正ie8下qq浏覽器、win7下的ie 9.0.32 、win8下的ie 10.0.21、chrome 38.0 、qq浏覽器8.0-ie10.0.5、safari 5.1.7、opera 25.0

我們平時所說的調整透明度,其實在樣式中是調整不透明度,如下圖所示例:

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

打開ps,在圖層面闆上,可以看到設定圖層整理不透明度的菜單,從 0% (完全透明)到 100%(完全不透明)。

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

實作透明的css方法通常有以下3種方式,以下是不透明度都為80%的寫法

ie專屬濾鏡 filter:alpha(opacity=x),x 的取值從 0 到 100,如filter:alpha(opacity=80)

相容性:ie6、7、8不支援,ie9及以上版本和标準浏覽器都支援

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

使用說明:設定opacity元素的所有後代元素會随着一起具有透明性,一般用于調整圖檔或者子產品的整體不透明度

【原】CSS實作背景透明,文字不透明,相容所有浏覽器
【原】CSS實作背景透明,文字不透明,相容所有浏覽器

使用opacity後整個子產品都透明了,展現如下:

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

那麼使用opacity實作《背景透明,文字不透明》是不可取的。

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

使用說明:設定顔色的不透明度,一般用于調整background-color、color、box-shadow等的不透明度。

【原】CSS實作背景透明,文字不透明,相容所有浏覽器
【原】CSS實作背景透明,文字不透明,相容所有浏覽器

在background-color中使用rgba,标準浏覽器中,背景透明,文字不透明,展現如下:

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

很奇葩的是,ie6和部分ie7核心的浏覽器(如qq浏覽器)會讀懂rgba,解析後顔色為透明,其實應該是null

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

那麼使用opacity實作背景透明,文字不透明是可取的。

使用說明:ie浏覽器專屬,問題多多,本文以設定背景透明為例子,如下:

僅支援ie6、7、8、9,在ie10版本被廢除

在ie6、7中,需要激活ie的haslayout屬性(如:*zoom:1或者*overflow:hidden),讓它讀懂filter:alpha

在ie6、7、8中,設定了filter:alpha的元素,父元素設定position:static(預設屬性),其子元素為相對定位,可讓子元素不透明

【原】CSS實作背景透明,文字不透明,相容所有浏覽器
【原】CSS實作背景透明,文字不透明,相容所有浏覽器

上以上3點分析可知,設定透明背景文字不透明,可采用的屬性有rgba和ie的專屬濾鏡filter:alpha,其相容性如下圖所示:

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

針對ie6、7、8浏覽器,我們可以采用fiter:alpha,針對标準浏覽器我們采用rgba,那麼問題來了,ie9浏覽器2個屬性都支援,一起使用會重複降低不透明度...

ok,所有問題都解決了,全部代碼如下:

【原】CSS實作背景透明,文字不透明,相容所有浏覽器
【原】CSS實作背景透明,文字不透明,相容所有浏覽器

<a href="http://files.cnblogs.com/files/peunzhang/%e8%83%8c%e6%99%af%e9%80%8f%e6%98%8e%ef%bc%8c%e6%96%87%e5%ad%97%e4%b8%8d%e9%80%8f%e6%98%8e%e7%9a%84%e7%a0%94%e7%a9%b6%e5%92%8c%e4%bd%bf%e7%94%a8.zip" target="_blank">下載下傳demo</a>

可能很多同學會覺得很複雜,為什麼不直接用兩個div放在同一個位置就行了,一個不透明div,一個文字div,很簡單的解決問題,這也是好個方法,但是需要寫絕對定位或負margin,并出現空内容的div,而且這是這種方法在有些場景下也會顯得複雜,如下示例,滑鼠經過商标後展現展現透明的提示文案,就需要控制2個div啦~

【原】CSS實作背景透明,文字不透明,相容所有浏覽器

一點思路,如果疑問,歡迎大家留言交流~

作者:白樹