前言
这个东西呢不管看起来,听起来都很高大上哈.鄙人比较懒,知道有这么个东西,却一直没去研究.感叹技术日新月异,有时候觉得自己掉队好远了.这不项目中便遇到了使用这家伙的情况.这次需要做一个音乐类app,需要有毛玻璃的高大上效果.这个效果在众多音乐app中非常常见,也确实非常漂亮.但在网页端见得比较少.大概是兼容性和性能问题吧(强烈吐槽性能).也没办法,有需求就得想办法去实现是不是,不过最讨厌跟那群UE,PM撕逼.如果对她们说这个东西很麻烦,不好实现.然后她们一副哥哥你一定可以的!!花痴表情强行绑架了我.哎,谁让我是程序员呢. 其实吧我自己也挺想去实现这个东西的。默默的给自己打了一针鸡血便投入无尽的搜寻,学习中.
css3-filter
搜索一番,找到这个属性filter:blur(5px)。赶快去实现一把。
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 5 <title></title> 6 <style> 7 .d1{ 8 background-image:url('./lp.png'); 9 background-size:cover;10 -webkit-filter:blur(10px);11 filter:blur(10px);12 width:300px;13 height:300px;14 }15 </style>16 </head>17 <body>18 19 <div class="d1"></div>20 </body>21 </html>
咳咳, 献上一个萌妹子.实在找不到图片了.O(∩_∩)O哈哈~
blur的效果就是虚化图片.值越大虚化得越厉害.
瞬间高大上了有木有!!
....
....
....
然而事情并没有这么简单.滤镜算法是对图片的像素点做处理,也就是说你需要设置一张背景图.当前元素设置滤镜属性后,元素里面的内容也会被影响.就拿上面的例子来说,如果元素里面有文字的话,那么文字也看不见了.聪明的你肯定会想到再叠一层不就完了嘛.事实情况也确实如此(这不是废话么...)让我们来看下
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><title></title><style>.wrap{ position:relative; width:300px; height:300px; line-height:300px; text-align:center;}.d1{ background-image:url('./lp.png'); background-size:cover; -webkit-filter:blur(10px); filter:blur(10px); position: absolute; top:0; left:0; width:100%; height:100%; z-index:-1;}</style></head><body> <div class="wrap"> <div class="d1"></div> <div class="content">我爱你老婆</div> </div></body></html>View Code
完美!
.....
.....
.....
然而事情并没有这么简单!
歌词多是用白色字体,毛玻璃还是太亮了,容易混淆. 嘿嘿,其实也简单,再加上一点背景透明度就好啦.
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><title></title><style>.wrap{ position:relative; width:300px; height:300px;}.d1{ background-image:url('./lp.png'); background-size:cover; -webkit-filter:blur(10px); filter:blur(10px); position: absolute; top:0; left:0; width:100%; height:100%; z-index:-1;}.content{ width:100%; height:100%; line-height:300px; color:#fff; text-align:center; background-color:rgba(0,0,0,0.3);}</style></head><body> <div class="wrap"> <div class="d1"></div> <div class="content">我爱你老婆</div> </div></body></html>View Code
看这下是不是好多啦. 恩比较有玻璃质感了.其实吧,还有个坑爹的问题, 加了滤镜blur的元素就变成透明的了 ,虽然有背景图也还是透明的.所以在需要毛玻璃覆盖底层的情况下,得再叠一层,添加一个背景色.
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><title></title><style>.wrap{ position:relative; width:300px; height:300px;}.filter{ background-image:url('./lp.png'); background-size:cover; -webkit-filter:blur(10px); filter:blur(10px); position: absolute; top:0; left:0; width:100%; height:100%; z-index:-1;}.filter-bg{ position:absolute; top:0; left:0; width:100%; height:100%; background-color:#333; z-index:-2;}.content{ width:100%; height:100%; line-height:300px; color:#fff; text-align:center; background-color:rgba(0,0,0,0.3);}</style></head><body> <div class="wrap"> <div class="filter-bg"></div> <div class="filter"></div> <div class="content">我爱你老婆</div> </div></body></html>View Code
咱们可以隐约的发现, 在图片的四周模糊效果不是很好,这种情况在blur的值越大的时候越明显 ,趋势是模糊区域向图像中颜色明显的地方靠近,边缘地方就显得透明,甚至貌似没有模糊.建议blur的值设置在30以下.
似乎问题就这么解决了!!
真的解决了?!
真的?
svg-
我兴奋的,天真的以为事情就这么完了,然而当我附上动画后,让毛玻璃动起来时,整个人都崩溃了. fuck! 哥才买的6s玫瑰金,卡得跟屎一样.当然补充下前提条件,是在播放音乐的时候拖动页面,页面元素数量一般.但不至于播放个音乐拖垮了整个页面性能吧.二愣子的我拖着电脑就去找pm了,你看,就是你要做这种效果,卡得跟方便面一样一条一条的.搞不定,砍需求!
pm碍于我愤怒的表情,打起了太极.你先冷静冷静.什么事儿都好商量.你要不喝点儿饮料?
我当然接受了(你们不要用异样的眼光看着我). 喝着饮料平静了下心情,这事儿吧总得解决.和pm鬼扯了半天还是觉得要保留这个效果,不然做了那么久就白费了.况且一个好的工程师(注意我没有用程序员!)就得迎难而上啊,创造力和解决问题的能力才是工程师们的价值所在.首先还是得定位问题,为了确定是filter属性的锅,我把滤镜层给删掉,卧槽丝滑般流畅.看来这属性真是性能堪忧啊.那怎么办呢,我最终还是抱向了google的大腿.一番搜索,果然不负众望.原来除了css3之外,svg和canvas也是可以实现滤镜效果的.我试了下svg,效果真是好得出奇.很流畅.将我们刚才的filter层替换为svg实现
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" baseProfile="full"> <defs> <filter id="blur"> <feGaussianBlur stdDeviation="10" /> </filter> </defs> <image xlink:href="./mm.jpg" x="0" y="0" height="200" width="200" filter="url(#blur)"/></svg>View Code
最终效果不卡.我猜测应该是实现机制不同,svg添加上滤镜后就会把它当成一个图片来处理,不会重复消耗cpu计算.而css3的filter属性应该是在滚动的时候会动态计算,在做一些比较复杂的效果时候,卡顿就很明显.
使用svg的滤镜依然会使得svg层变得透明,在不希望透明的时候记得添加一层背景色.
兼容性对比
咱们再来对比一下兼容性,可见svg稍好,在安卓上都是4.4才支持.
两种方式的其他滤镜方法没用过,似乎也不太常用,也不多说了,网上都能查到.
总结
- css3滤镜方便,性能不好,适合做静止的简单效果
- svg滤镜性能好,适合做多层运动
- css3滤镜需要添加背景图,svg滤镜背景可以是画出来的
- css3和svg的高斯模糊滤镜都会使得该层变得透明
- 高斯模糊在图片的边缘效果不太好,可以放大图片width=105%
- 兼容性二者差不多,svg稍好
参考资料:
- css3滤镜canvas,svg,IE解决方案

self-closingtagsinhtmlandxmlaretagsthatclosethem hexptneedneedingAseparateClosingTag,SightifyingmarkupStrupupStrupureAndenHancingCodingsigy.1)shemesessientInsentialInxmlforelementswithcontentsswithcontent content content content content content content content content contentcontent,確保wellwell-formedDocuments.2)Inhtmlible5,inhtmlibut forfix

要構建一個功能強大且用戶體驗良好的網站,僅靠HTML是不夠的,還需要以下技術:JavaScript賦予網頁動態和交互性,通過操作DOM實現實時變化。 CSS負責網頁的樣式和佈局,提升美觀度和用戶體驗。現代框架和庫如React、Vue.js和Angular,提高開發效率和代碼組織結構。

布爾屬性是HTML中的特殊屬性,不需要值即可激活。 1.布爾屬性通過存在與否控制元素行為,如disabled禁用輸入框。 2.它們的工作原理是瀏覽器解析時根據屬性的存在改變元素行為。 3.基本用法是直接添加屬性,高級用法可通過JavaScript動態控制。 4.常見錯誤是誤以為需要設置值,正確寫法應簡潔。 5.最佳實踐是保持代碼簡潔,合理使用布爾屬性以優化網頁性能和用戶體驗。

HTML代碼可以通過在線驗證器、集成工具和自動化流程來確保其清潔度。 1)使用W3CMarkupValidationService在線驗證HTML代碼。 2)在VisualStudioCode中安裝並配置HTMLHint擴展進行實時驗證。 3)利用HTMLTidy在構建流程中自動驗證和清理HTML文件。

HTML、CSS和JavaScript是構建現代網頁的核心技術:1.HTML定義網頁結構,2.CSS負責網頁外觀,3.JavaScript提供網頁動態和交互性,它們共同作用,打造出用戶體驗良好的網站。

HTML的功能是定義網頁的結構和內容,其目的在於提供一種標準化的方式來展示信息。 1)HTML通過標籤和屬性組織網頁的各個部分,如標題和段落。 2)它支持內容與表現分離,提升維護效率。 3)HTML具有可擴展性,允許自定義標籤增強SEO。

HTML的未來趨勢是語義化和Web組件,CSS的未來趨勢是CSS-in-JS和CSSHoudini,JavaScript的未來趨勢是WebAssembly和Serverless。 1.HTML的語義化提高可訪問性和SEO效果,Web組件提升開發效率但需注意瀏覽器兼容性。 2.CSS-in-JS增強樣式管理靈活性但可能增大文件體積,CSSHoudini允許直接操作CSS渲染。 3.WebAssembly優化瀏覽器應用性能但學習曲線陡,Serverless簡化開發但需優化冷啟動問題。

HTML、CSS和JavaScript在Web開發中的作用分別是:1.HTML定義網頁結構,2.CSS控製網頁樣式,3.JavaScript添加動態行為。它們共同構建了現代網站的框架、美觀和交互性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),