昨天在家看電視時,退出的時候發現了一個彈窗效果,整個背景模糊,以爲這樣的效果好炫,要比純色加透明度高大上好多,連續試了幾個界面,最終肯定效果由css實現的,因而今天一大早來到公司便趕忙搜索了一下,雖然兼容性奇差,可是一個css屬性就能夠搞定。瞬間感受本身知道的真是太少了~~css
首先回憶一下彈窗的實現,通常咱們分爲兩層,彈出窗口層(popus)和遮罩層(mask),一般狀況下我習慣就這兩元素所有設成fixed定位,具體和absolute區別一試便知。對於mask層自不用多少,咱們以下給他設置屬性,讓他鋪滿整個屏幕。css3
.mask{position:fixed;top:0px;bottom:0px;left:0px;right:0px;background-color:#000;opacity:0.6;filter:alpha(opacity=60)}
popus層則要稍微麻煩點兒,這裏咱們有兩種實現方法
1.已知大小的彈窗,以下,主要經過top,left與負的margin來實現。web
.popus{width:300px;height:200px;position:fixed;left:50%;top:50%;margin-left:-150px;margin-top:-100px;background-color:#000}
2.未知彈窗大小,則經過js獲取彈窗層的width與height,而後在進行如上設置,在此很少述。
3.在支持css3的狀況下,咱們不須要知道彈窗的寬高,即可進行以下設置瀏覽器
.popus{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%)}
主要經過translate屬性來設置,偏移的值百分比是相對於自己的寬高,所以從原理上來講跟第一種寫法有殊途同歸之妙,不過使用卻更方便。ide
言歸正傳,下面咱們迴歸到正題,即讓元素實現ps中高斯模糊的效果。
這裏引出一個css屬性:filter,注意這裏的filter並非ie中的filter,filter有不少值,感興趣的能夠點擊這裏,做者講的很是詳細。咱們今天只講其中的一個blur,首先看下面的預覽圖動畫
ps:目前來講該屬性只支持webkit瀏覽器,因此咱們直接使用了css3屬性,效果也須要在webkit瀏覽器中查看this
是否是很神奇,其中起做用的代碼就這一行 -webkit-filter:blur(8px) ,後面的像素值即表明模糊程度,固然在平常項目中,咱們還能夠加一些動畫,使頁面更加的生動,本案例完整代碼以下:spa
<div class='bg'> <img src='bg.jpg' /> </div> <div class='popus'> 效果是否是要好過純色加透明呢 <div> <div class='left btn '>確實不錯</div> <div class='right btn'>也就那樣</div> </div> </div>
css:code
*{padding:0px;margin:0px} img{width:100%;margin:0px auto;display:block} .bg.blur{-webkit-filter:blur(8px)} .popus{width:400px;color:#000;;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);font-family:"微軟雅黑";padding:20px 0px;font-weight:bold;background-color:rgba(255,255,255,0.6);border-radius:18px;text-align:center;padding:30px 0px;box-shadow:0px 0px 10px rgba(0,0,0,0.4);display:none} .popus div{width:220px;margin:10px auto} .popus div.btn{width:80px;padding:5px 10px;color:#000} .left{float:left;border:1px solid #000} .popus div.btn.right{float:right;color:#666}
js:orm
$('.bg').on('click',function(){ console.log(98) $(this).addClass('blur'); $('.popus').show(); }) $('.btn').on('click',function(){ $('.bg').removeClass('blur'); $('.popus').hide(); })
這樣是否是就完了?很明顯不是,看控制檯
當咱們彈出窗口外,確定要禁止掉咱們其餘層的點擊事件,可是咱們發現目前咱們雖然將其餘層模糊化了,可是並無禁止掉相應的事件,固然解決辦法也很簡單,咱們能夠加一層沒有背景顏色的遮罩層,覆蓋在頁面上,這樣咱們每次點擊做用在遮罩層上,天然不會觸發底層的事件了。
點擊這裏查看效果 http://runjs.cn/detail/nrlmmnbg