巧用box-shadow實現(xiàn)布局區(qū)域間隔變色

之前給客戶做了一個網(wǎng)站,整體是1200px
寬.因此,網(wǎng)頁整體是放在一個 1200px
的盒子里的.但是今天,客戶突然要求實現(xiàn)這樣的變色效果,一個區(qū)域是灰色的,一個區(qū)域是白色的.
原布局效果圖
想要達(dá)到的效果
思路
首先,我是拒絕更換html布局結(jié)構(gòu)的.我真心不愿意去修改html的布局,因為牽扯到的地方會比較多,所以,如何在不改變html結(jié)構(gòu)的情況下,實現(xiàn)這樣的需求呢?
背景圖片法
我們可以做一張背景圖片,是灰色和白色間隔的,讓他在整個網(wǎng)頁間平鋪.以實現(xiàn)偽裝的間隔變色.
優(yōu)點(diǎn):不改變DOM結(jié)構(gòu).
缺點(diǎn):
1. 要求所有版塊高度一致.
2. 不能兼顧頭尾.因為不修改html結(jié)構(gòu),就必然是在body或者h(yuǎn)tml上面加背景圖片,這樣不能堅固頭尾
3. 如果兼顧頭尾,則必然還是要修改html結(jié)構(gòu),必須在所有需要變色的板塊外面加上一個100%寬的盒子
好了,綜合分析,背景圖片貌似不能完美解決我的問題.沒關(guān)系,我CSS很強(qiáng)大.猛然間我想到了一個牛逼的CSS屬性box-shadow.
box-shadow投影法
首先,看下我們現(xiàn)有的html結(jié)構(gòu)
- <div class="home">
- <section class="floor"></section>
- <section class="floor"></section>
- <section class="floor"></section>
- <section class="floor"></section>
- <section class="floor"></section>
- </div>
默認(rèn)css如下
- .home {width: 1200px;margin: 0 auto;}
- .floor {padding: 20px 0;height: 500px;width: 1200px;}
其他不想干的內(nèi)容就不寫了,主要就是這些參數(shù).
我的解決方案就是,利用box-shadow屬性,向左和向右分別加上相當(dāng)于自身寬度的灰色投影,并且給自己加上灰色背景,這樣就實現(xiàn)了整體的變色.代碼如下:
- .home {width: 1200px;margin: 0 auto;}
- .floor {
- padding: 20px 0;height: 500px;width: 1200px;
- box-shadow: 1200px 0 #fafafa,-1200px 0 #fafafa;
- background: #fafafa;
- }
如上,果不其然,實現(xiàn)了灰色背景的平鋪.但是,所有的盒子都有了這個平鋪的灰色背景.我們需要實現(xiàn)的是間隔變色,而不是全部變成灰色的背景.
怎么辦?難道我需要去給.floor再加上一個樣式????
不需要,強(qiáng)大的css再一次雄起了!!
我把代碼改成了如下:
- .home {width: 1200px;margin: 0 auto;}
- .floor {padding: 20px 0;height: 500px;width: 1200px;}
- .floor:nth-child(2n){
- box-shadow: 1200px 0 #fafafa,-1200px 0 #fafafa;
- background: #fafafa;
- }
OK,完美實現(xiàn)效果.
思考
這個不是100%的平鋪的,而是寬度是有限的.這樣,在足夠高的分辨率下面,可能會產(chǎn)生問題哦.
但是,以我的例子來說,1200*3 = 3600 這樣的寬度,足夠勝任目前99.999%的顯示器了.剩下部分用4K的土豪,我相信也不會在這樣高分辨率的顯示器上全屏看網(wǎng)頁.所以,這樣寫是沒有問題的呀!!
但是,我們是講求完美的么.哪怕是百萬份之一的人會這樣做,也不能露怯呀.但是,我們的box-shadow是萬能的呀…我們再來改一下代碼:
- .home {width: 1200px;margin: 0 auto;}
- .floor {padding: 20px 0;height: 500px;width: 1200px;}
- .floor:nth-child(2n){
- box-shadow: 1200px 0 #fafafa,2400px 0 #fafafa,-1200px 0 #fafafa,-2400px 0 #fafafa;
- background: #fafafa;
- }
改成這樣之后,就是 1200*5 = 6000 這樣的寬度,足夠再戰(zhàn)10年~~~
小結(jié)
CSS,真強(qiáng)大!!
本文由FungLeo原創(chuàng)
首發(fā)地址:http://blog.csdn.net/FungLeo/article/details/51661222
相關(guān)文章
- CSS3的box-shadow用來制作多重邊框真的比較給力,這也是本文CSS3實現(xiàn)多重邊框的方法總結(jié)的重點(diǎn),不過在此之前我們還是先來看一下兼容性較好的傳統(tǒng)方式:2016-05-31
詳解CSS3的box-shadow屬性制作邊框陰影效果的方法
這篇文章主要介紹了CSS3的box-shadow屬性制作邊框陰影效果的方法,box-shadow屬性還是十分強(qiáng)大的,能設(shè)定陰影的水平或垂直位置,以及陰影的顏色和尺寸等,需要的朋友可以參考下2016-05-10Photoshop投影與CSS中box-shadow的轉(zhuǎn)換
box-shadow是給元素塊添加周邊陰影效果,本文給大家介紹Photoshop投影與CSS中box-shadow的轉(zhuǎn)換,對css中box shadow相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-11-27- 這篇文章主要介紹了CSS3中box-shadow的用法,改方法即是作一個盒裝區(qū)域的陰影效果,需要的朋友可以參考下2015-07-15
- 這篇文章主要介紹了CSS3屬性box-shadow使用指南,需要的朋友可以參考下2014-12-09
CSS偽元素 :before, :after, box-shadow應(yīng)用
利用CSS偽元素 :before 和 :after 可以在文檔前后插入內(nèi)容而不改變文檔原有結(jié)構(gòu),下面有個不錯的示例,大家可以參考下2014-03-04- 在ie下模擬css3中的box-shadow(陰影)可以使用ie的Shadow(陰影)濾鏡來實現(xiàn),需要注意的是該濾鏡必須配合background屬性一起使用,否則該濾鏡失效2013-09-11
CSS3新屬性transition-property transform box-shadow實例學(xué)習(xí)
本文將為大家介紹下CSS3新屬性transition-property transform box-shadow的使用,感興趣的朋友可以參考下哈,希望對你學(xué)習(xí)css3有所幫助2013-06-06css實現(xiàn)跨瀏覽器的box-shadow盒陰影效果告別圖片實現(xiàn)類似效果(2)
前面的文章雖然實現(xiàn)IE下的盒陰影效果也是使用的濾鏡,但是使用的是shadow濾鏡,這種濾鏡的效果很牽強(qiáng),效果過渡不自然.而本文實現(xiàn)的IE下的盒陰影效果就相對非常自然,而且2013-01-08CSS3基礎(chǔ)(RGBa、text-shadow、box-shadow、border-radius)
本文介紹CSS 3部分新屬性基礎(chǔ),包括RGBa、text-shadow、box-shadow、border-radius。這些屬性通常用來增強(qiáng)網(wǎng)頁布局和美譽(yù)度。(譯者注:在支持CSS3的瀏覽器如Firefox、Safa2012-11-13