家好,今天跟大家分享的是下拉菜單旋轉漸出特效的實現方法,下面我們看下效果圖:
效果圖
特效分析:當鼠標滑過主導航選項時,下拉菜單由上至下依次旋轉漸出,當鼠標移開時由下至上依次旋轉消失。
步驟一:構建HTML
所有菜單項均由無序列表生成,為了方便這里只給首頁和關于我們添加了下拉菜單,其他的根據個人需要自己酌情添加即可。
步驟二:樣式設置
1、基本樣式初始化
基本樣式
2、通用樣式設置:“list-style: none”去掉無序列表默認樣式,將所有的列表項(li)設置相同的寬高,行高"line-height"與高度相同實現文本垂直居中,display設為block并向左浮動,背景顏色給一個比較明亮的紅色(個人喜好),鼠標滑過是背景變暗。
通用樣式
3、超鏈接樣式設置:去掉超鏈接默認樣式,字體顏色設為白色,鼠標滑過時字體顏色變暗。
4、下拉菜單初始化樣式:為所有的下拉菜單項添加一個1像素實線白色的頂部邊框“border-top:1px solid #fffff”,不透明度opacity設為0效果為完全透明,并延Y軸旋轉90°,鼠標劃過時恢復(后面設置),最后添加過渡效果transition,不透明度過渡時間為0.4s ,位置變換0.5s。
5、下拉菜單旋轉效果:當鼠標滑過主導航時,下拉菜單列表項的不同明度由0變為1,位置由初始化時的旋轉90°恢復到原始位置,配合上面設置的過渡屬性實現動態旋轉效果。
這里補充一點,有些像我一樣的小白開始可能不明白".menu > li"的意思,它是CSS子元素選擇器的用法,在該教程中選擇的則是主導航列表 .menu 中的 li ,而不包含下拉列表 .submenu 中的 li ,因為從HTML結構中可以看出下拉列表中的 li 應該算是主導航列表 .menu 孫子輩的。
6、效果完善:如果截至到第五步你刷新頁面會發現,鼠標滑過主導行時所有的下拉列表項是同時旋轉而出的,并不是像效果圖中那樣逐個依次漸出,這里我們只需分別給每個下拉列表選項的過渡效果設置一下延遲即可:
做事做全套,鼠標移開時下拉列表逐個消失的效果別忘了
最后為了讓旋轉顯得更立體一點我們只需在添加這樣一條樣式即可:作用在于定義3D元素距視圖的距離,從而影響其子元素的透視效果,如果不明白試著修改一下它的值看看效果。
大功告成,現在再刷新一下頁面看看吧。
更多CSS特效歡迎關注小編或 @窗外樓 指出不足。
.
少白屏,我們常使用的有ssr,loading(卸載vue掛載的例如app dom id節點內,渲染后會覆蓋),組件內骨架屏,另外還有cdn,cache,lazyload(圖片、模塊)等,下面這篇文章雖然發表較早,但分析的較為全面,大家可以一起研讀學習一番
隨著移動設備性能不斷增強,web 頁面的性能體驗逐漸變得可以接受,又因為 web 開發模式的諸多好處(跨平臺,動態更新,減體積,無限擴展),APP 客戶端里出現越來越多內嵌 web 頁面(為了配上當前流行的說法,以下把所有網頁都稱為 H5 頁面,雖然可能跟 H5 沒關系),很多 APP 把一些功能模塊改成用 H5 實現。
雖然說 H5 頁面性能變好了,但如果沒針對性地做一些優化,體驗還是很糟糕的,主要兩部分體驗:
本文先不討論第二點,只討論第一點,怎樣減少白屏時間。對 APP 里的一些使用 H5 實現的功能模塊,怎樣加快它們的啟動速度,讓它們啟動的體驗接近原生。
為什么打開一個 H5 頁面會有一長段白屏時間?因為它做了很多事情,大概是:
初始化 webview -> 請求頁面 -> 下載數據 -> 解析HTML -> 請求 js/css 資源
-> dom 渲染 -> 解析 JS 執行
-> JS 請求數據 -> 解析渲染 -> 下載渲染圖片
一些簡單的頁面可能沒有 JS 請求數據 這一步,但大部分功能模塊應該是有的,根據當前用戶信息,JS 向后臺請求相關數據再渲染,是常規開發方式。
一般頁面在 dom 渲染后能顯示雛形,在這之前用戶看到的都是白屏,等到下載渲染圖片后整個頁面才完整顯示,首屏秒開優化就是要減少這個過程的耗時。
上述打開一個頁面的過程有很多優化點,包括前端和客戶端,常規的前端和后端的性能優化在桌面時代已經有最佳實踐,主要的是:
其中對首屏啟動速度影響最大的就是網絡請求,所以優化的重點就是緩存,這里著重說一下前端對請求的緩存策略。我們再細分一下,分成 HTML 的緩存,JS/CSS/image 資源的緩存,以及 json 數據的緩存。
HTML 和 JS/CSS/image 資源都屬于靜態文件,HTTP 本身提供了緩存協議,瀏覽器實現了這些協議,可以做到靜態文件的緩存,具體可以參考這里(https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching ),總的來說,就是兩種緩存:
前端能做的最大限度的緩存策略是:HTML 文件每次都向服務器詢問是否有更新,JS/CSS/Image資源文件則不請求更新,直接使用本地緩存。那 JS/CSS 資源文件如何更新?常見做法是在在構建過程中給每個資源文件一個版本號或hash值,若資源文件有更新,版本號和 hash 值變化,這個資源請求的 URL 就變化了,同時對應的 HTML 頁面更新,變成請求新的資源URL,資源也就更新了。
json 數據的緩存可以用 localStorage 緩存請求下來的數據,可以在首次顯示時先用本地數據,再請求更新,這都由前端 JS 控制。
這些緩存策略可以實現 JS/CSS 等資源文件以及用戶數據的緩存的全緩存,可以做到每次都直接使用本地緩存數據,不用等待網絡請求。但 HTML 文件的緩存做不到,對于 HTML 文件,如果把 Expires / max-age 時間設長了,長時間只使用本地緩存,那更新就不及時,如果設短了,每次打開頁面都要發網絡請求詢問是否有更新,再確定是否使用本地資源,一般前端在這里的策略是每次都請求,這在弱網情況下用戶感受到的白屏時間仍然會很長。所以 HTML 文件的“緩存”和跟“更新”間存在矛盾。
接著輪到客戶端出場了,桌面時代受限于瀏覽器,H5 頁面無法做更多的優化,現在 H5 頁面是內嵌在客戶端 APP 上,客戶端有更多的權限,于是客戶端上可以超出瀏覽器的范圍,做更多的優化。
先接著緩存說,在客戶端有更自由的緩存策略,客戶端可以攔截 H5 頁面的所有請求,由自己管理緩存,針對上述 HTML 文件的“緩存”和“更新”之間的矛盾,我們可以用這樣的策略解決:
這樣看起來已經比較完美了,HTML 文件在用客戶端的策略緩存,其余資源和數據沿用上述前端的緩存方式,這樣一個 H5 頁面第二次訪問從 HTML 到 JS/CSS/Image 資源,再到數據,都可以直接從本地讀取,無需等待網絡請求,同時又能保持盡可能的實時更新,解決了緩存問題,大大提升 H5 頁面首屏啟動速度。
上述方案似乎已完整解決緩存問題,但實際上還有很多問題:
這些問題在客戶端上都是可以被解決的,只不過有點麻煩,簡單描述下:
上面的解決方案實現起來十分繁瑣,原因就是各個 HTML 和資源文件很多很分散,管理困難,有個較好的方案可以解決這些問題,就是離線包。
既然很多問題都是文件分散管理困難引起,而我們這里的使用場景是使用 H5 開發功能模塊,那很容易想到把一個個功能模塊的所有相關頁面和資源打包下發,這個壓縮包可以稱為功能模塊的離線包。使用離線包的方案,可以相對較簡單地解決上述幾個問題:
到這里,對于使用 H5 開發功能模塊,離線包是一個挺不錯的方案了,簡單復述一下離線包的方案:
離線包方案在緩存上已經做得差不多了,還可以再配上一些細節優化:
每個包都會使用相同的 JS 框架和 CSS 全局樣式,這些資源重復在每一個離線包出現太浪費,可以做一個公共資源包提供這些全局文件。
無論是 iOS 還是 Android,本地 webview 初始化都要不少時間,可以預先初始化好 webview。這里分兩種預加載:
可以參考美團點評的這篇文章(https://tech.meituan.com/WebViewPerf.html )。
理想情況下離線包的方案第一次打開時所有 HTML/JS/CSS 都使用本地緩存,無需等待網絡請求,但頁面上的用戶數據還是需要實時拉,這里可以做個優化,在 webview 初始化的同時并行去請求數據,webview 初始化是需要一些時間的,這段時間沒有任何網絡請求,在這個時機并行請求可以節省不少時間。
具體實現上,首先可以在配置表注明某個離線包需要預加載的 URL,客戶端在 webview 初始化同時發起請求,請求由一個管理器管理,請求完成時緩存結果,然后 webview 在初始化完畢后開始請求剛才預加載的 URL,客戶端攔截到請求,轉接到剛才提到的請求管理器,若預加載已完成就直接返回內容,若未完成則等待。
如果用戶訪問某個離線包模塊時,這個離線包還沒有下載,或配置表檢測到已有新版本但本地是舊版本的情況如何處理?幾種方案:
第三種 Fallback 的方式還帶來兜底的好處,在一些意外情況離線包出錯的時候可以直接訪問線上版本,功能不受影響,此外像公共資源包更新不及時導致版本沒有對應上時也可以直接訪問線上版本,是個不錯的兜底方案。
上述幾種方案策略也可以混著使用,看業務需求。
網路和存儲接口如果使用 webkit 的 ajax 和 localStorage 會有不少限制,難以優化,可以在客戶端提供這些接口給 JS,客戶端可以在網絡請求上做像 DNS 預解析/IP直連/長連接/并行請求等更細致的優化,存儲也使用客戶端接口也能做讀寫并發/用戶隔離等針對性優化。
早期 web 頁面里,JS 只是負責交互,所有內容都是直接在 HTML 里,到現代 H5 頁面,很多內容已經依賴 JS 邏輯去決定渲染什么,例如等待 JS 請求 JSON 數據,再拼接成 HTML 生成 DOM 渲染到頁面上,于是頁面的渲染展現就要等待這一整個過程,這里有一個耗時,減少這里的耗時也是白屏優化的范圍之內。
優化方法可以是人為減少 JS 渲染邏輯,也可以是更徹底地,回歸到原始,所有內容都由服務端返回的 HTML 決定,無需等待 JS 邏輯,稱之為服務端渲染。是否做這種優化視業務情況而定,畢竟這種會帶來開發模式變化/流量增大/服務端開銷增大這些負面影響。手Q的部分頁面就是使用服務端渲染的方式,稱為動態直出,見文章:70%以上業務由H5開發,手機QQ Hybrid 的架構如何優化演進?
從前端優化,到客戶端緩存,到離線包,到更多的細節優化,做到上述這些點,H5 頁面在啟動上差不多可以媲美原生的體驗了。
總結起來,大體優化思路就是:緩存/預加載/并行,緩存一切網絡請求,盡量在用戶打開之前就加載好所有內容,能并行做的事不串行做。這里有些優化手段需要做好一整套工具和流程支持,需要跟開發效率權衡,視實際需求優化。
另外上述討論的是針對功能模塊類的 H5 頁面秒開的優化方案,客戶端 APP 上除了功能模塊,其他一些像營銷活動/外部接入的 H5 頁面可能有些優化點就不適用,還需要視實際情況和需求而定。另外微信小程序就是屬于功能模塊的類別,差不多是這個套路。
這里討論了 H5 頁面首屏啟動時間的優化,上述優化過后,基本上耗時只剩 webview 本身的啟動/渲染機制問題了,這個問題跟后續的響應流暢度的問題一起屬于另一個優化范圍,就是類 RN / Weex 這樣的方案,有機會再探討。
如果您覺得我們的內容還不錯,就請轉發到朋友圈,和小伙伴一起分享吧~
原始發表:https://cloud.tencent.com/developer/article/1071723
果說做SEO的沒有遇到過首頁降權問題,那么說明他不是一個合格的SEOER。
所以首頁被降權這事,我也沒逃過。
那么先來看下網站降權后有哪些表現?通常情況下,我們認為首頁降權后會出現這幾種情況:
1、site+域名,搜不到首頁。
2、輸入品牌名,搜不到首頁。
3、收錄斷崖式下跌,或者干脆不收錄。
4、流量急劇下降,掉關鍵詞嚴重。
5、網址欄輸入網址,搜索結果只有一條或者干脆沒有。
…
我的網站出現了1234條,所以降權蠻嚴重的,那么出現這些情況原因在哪里呢?
1、網站首頁關鍵詞堆砌。
2、內頁比首頁權重高。
3、友鏈中的網站被降權遭受牽連。
4、首頁鏈接過多,沒有做nofollow。
5、文章太垃圾,外鏈太垃圾,總之整個網站都是一個垃圾
…
我是怎么解決首頁被降權問題呢?其實,我壓根不知道是不是解決好了,因為這個問題一直困擾我很久。因為出現以上1234條的時候,網站已經是這個鬼樣子了。我只能做以下分析:
首先,文章不收錄,應該跟蜘蛛有關系,所以我每天都記錄了下蜘蛛爬取,發現蜘蛛只會爬不存在的目錄,正兒八經的文件一個都沒爬,再加上我每天都老老實實做了主動提交、自動提交、sitemap提交、熊掌號提交,其中惡心人的是,熊掌號提交多少條,就有多少條沒有收錄,更奇葩的是,有一天,我提交8條,居然顯示沒收錄9條,希望百度搜索的客服出來說一說,到底是怎么個意思?提交8條,怎么出來了個9條,你多出來的一條,是送給我的嗎?
反正我是搞不明白怎么回事,通過幾天的觀察發現,蜘蛛來的非常少,我又去站長平臺去看看,無意間去做了robots檢測,發現都無法檢測到,但是通過打開文件能打開,同時做了抓取診斷,發現都是失敗,失敗原因是socket錯誤,(服務器或防火墻的問題)好吧,我壓根不理解百度說的什么意思。
但我大約估計跟蜘蛛有關系,所以去外鏈平臺做了點外鏈引蜘蛛,想著一夜之間蜘蛛就能過來,哈哈,結果晚上真的做夢外鏈做了1000條,接著呢?第二天我激動的想看下到底改變沒有,結果讓我大失所望,離奇的是,媽的,那些外鏈沒有一個收錄,有毛用?
蜘蛛的問題,我是沒轍了。索性請教了同行,同行說什么的都有,內容不行、標題不行、布局不行、域名不行、首頁鏈接過多等等。只有真正體驗一次請教,你就明白,SEO這行業,吹水和有實力差別在哪?
然后,我對網站做了以下幾處改動:
1、改了標題,目前這個標題還有人說是個垃圾標題
2、首頁除了”首頁”,全部做了nofollow。
3、每一篇文章全部做了指向首頁的鏈接。(用代碼)
4、去手工發外鏈、持續了3天。
5、首頁導航做了改版,增加了版塊。
6、提交百度反饋。
然后今天搜索,讓人不可思議的一幕出現了。居然site的結果,首頁出現了。
我分析了日志,蜘蛛IP多為220.181.108.*,123.125.71.*。什么情況后續會持續跟進,但搜品牌詞依舊是沒有顯示。
根據這次的恢復權重完整過程,我總結出我的網站能恢復這樣,應該是123456綜合的因素,或許標題改不改都無所謂,但最重要的是提交反饋這個步驟,我個人認為應該是手工發外鏈和內容變動和文章頁集權到首頁、提交反饋導致的,其他的都是干擾因素。
另外,中間提到的百度抓取問題,經測試如果http是不會出現此類情況,但https就會部分出現,但時好時壞,所以,這不知道到底是百度的鍋,還是自己的鍋,總之,過程是慘不忍睹。
好好珍惜,做好網站,遠離降權。
文章轉載運營正經說,原文鏈接:https://www.yyzjs.cn/987.html
*請認真填寫需求信息,我們會在24小時內與您取得聯系。