浏览器中遮罩层镂空效果的多种实现方法
? ? ? 前端開發中我們有時候會做到頁面遮罩層鏤空的效果,那什么是頁面遮罩層鏤空效果,我們先來看一看下圖的這個效果。下圖是我昨天在實際工作中完成的頁面效果:
? ? ??做這個效果的時候有以下注意的地方:
? ? ??1、兼容IE7及以上瀏覽器;
? ? ??2、該頁面背景是隨時變化的;
? ? ??3、目標區域大小不固定;
? ? ??4、常規瀏覽器要實現圓角效果。
? ? ??由于以前還沒有做過類似效果,所以經驗比較欠缺。接到任務,我想的第一種方法是截一張圖放在一個黑色透明的遮罩層上面來模擬鏤空效果,但是不滿足上面的第2、第3條要求。放棄這種想法,我又想到用SVG來實現,但是又不滿足上面的第一條要求。最后我利用CSS的邊框屬性結合JS實現了上面的方法,并滿足了所有要求,具體方法見下面的方法三。
? ? ??我把能實現頁面遮罩層鏤空效果的幾種方法都列出來吧,目前我掌握了其中四種。
? ? ??我就以下面這個簡單的效果為例做展示:
? ? ??無遮罩層層的時候:↓↓↓
? ? ??
? ? ? 有鏤空遮罩層的時候(鏤空區域為頭像和名字):↓↓↓
? ? ??【 方法一:截圖模擬實現 】
? ? ??原理:先截一張相同位置的圖片,創建一個遮罩層,然后把圖片定位在相應的位置上。
? ? ??優點:原理簡單;兼容性好,可以兼容到IE6、IE7;可以同時實現鏤空多個。
? ? ??缺點:此方法只適合靜止頁面,不適合可以滾動的頁面。也不適合頁面內容會發生變換的頁面。
? ? ??代碼如下:
<div class="class1"><img src="images/000.jpg" alt=""/></div> .class1{position: absolute;width:100%;height:100%;top: 0;left: 0;background-color: #000;opacity: 0.6;filter:alpha(opacity=60);} .class1 img{position: absolute;top:260px;left: 208px;}
? ? ??原理:利用CSS3的陰影屬性。
? ? ??優點:實現方便;適合任何頁面,不會受頁面的限制。
? ? ??缺點:兼容不太好,只能兼容到IE9。
? ? ??代碼如下:
<div class="class2"></div> .class2{position: absolute;width:170px;height:190px;top: 260px;left: 208px;box-shadow: rgba(0,0,0,.6) 0 0 0 1366px;}
? ? ??【 方法三: CSS邊框屬性實現 ?】
? ? ??原理:利用邊框屬性。先將一個空盒子定位在目標區域,然后在其四周用邊框填充。
? ? ??優點:實現方便,兼容性好,可以兼容到IE6、IE7;適合任何頁面,不會受頁面的限制。
? ? ??缺點:要做兼容實現過程則相對復雜。
? ? ??代碼如下:
<div class="class3"></div> .class3{position: absolute;width:170px;height:190px;top: 0;left: 0;border-left-width:208px;border-left-style: solid;border-left-color:rgba(0,0,0,.6);border-right-width:970px;border-right-style: solid;border-right-color:rgba(0,0,0,.6);border-top-width:260px;border-top-style: solid;border-top-color:rgba(0,0,0,.6);border-bottom-width:253px;border-bottom-style: solid;border-bottom-color:rgba(0,0,0,.6); }
? ? ??【 方法四: SVG或者canvas ?】
? ? ??原理:利用SVG或者canvas的繪圖功能。
? ? ??優點:可以同時鏤空多個。
? ? ??缺點:兼容性不好,實現過程相對復雜。
? ? ??我以SVG為例,代碼如下:
<svg style="position: absolute;" width="1366" height="700"><defs><mask id="myMask"><rect x="0" y="0" width="100%" height="100%" style="stroke:none; fill: #ccc"></rect><rect id="circle1" width="170" height="190" x='208' y="260" style="fill: #000" /></mask></defs><rect x="0" y="0" width="100%" height="100%" style="stroke: none; fill: rgba(0, 0, 0, 0.6); mask: url(#myMask)"></rect> </svg>
? ? ??以上四種方法實現的最后效果在主流瀏覽器中效果都是一致的,如下:
? ? ??當然,這只是例子,要運用到項目中去,還有很多工作要做,比如鏤空的位置我們應該根據目標來自動獲取,大小也是根據目標來設置,用邊框的方法要兼容IE7、8則還需加一層才能實現。
? ? ??今天就更新到這里,因時間倉促,資質有限,文中表述僅代表個人觀點,如果有更好的方法,歡迎分享。
總結
以上是生活随笔為你收集整理的浏览器中遮罩层镂空效果的多种实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: italic与oblique的区别
- 下一篇: JavaScript中call()和ap