css-vars-ponyfill在ie环境下怎么用

  介绍

小编给大家分享一下css-vars-ponyfill在ie环境下怎么用,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

<强> css-vars-ponyfill

通过css变量来实现网页换肤的过程中,会出现兼容性问题。

 css-vars-ponyfill在ie环境下怎么用“>,</p> <p>为了解决即qq,百度浏览器等兼容性问题,引入css-vars-ponyfill,但是在ie浏览器下,css-vars-ponyfill的在nextjs下表现不佳,主要缺陷是由于页面是服务端渲染,因此用户在看到界面后,动态主题色等样式不能很快渲染好,而是有一个过渡的时间(css-vars-ponyfill仅支持客户端),颜色会存在明显替换的过程用户体验差。通过阅读源码可以看的到,cssVars需要等到浏览器contentLoaded之后,才会触发,否则一直监听dom的数据内容事件,这就导致了体验上的问题。</p> <p> <强>解决方案</强> </p> <p> <强> 1。解析速度</强> </p> <p>通过把直接去除<代码>文档。readyState !==& # 39;加载# 39;</代码>这样的限制条件使得浏览器在解析到,然后更改css-vars-ponyfill的引入方式(旧的引入方式是在nextjs中的mainjs中引入模块,然后直接调用cssVars(),这样在调用到ponyfill的脚本前还会解析其他不相关的块,为了更快的解析css变量,需要手动选择插入位置),更改之后的css-vars-ponyfill通过找到css变量的位置(nextjs通过将不同组件下的风格,统一打包在标题里面),然后将更改后的ponyfill插入到风格之后进行调用,这一步选择在服务端渲染的<强> <em> _document。tsx </em> </>强文件中更改。</p> <p> <强> 2。解析稳定性</强> </p> <p>通过手动更改文件解析位置,以及对源码的条件触发机制进行相关更改,首页颜色渲染速度有了一定提升。但是仍存在一个问题,即通过路由跳转的界面,如果有新风格的块,插入时不能进行有效的css变量解析(已尝试配置cssVars的选项打开MutationObserver)。</p> <p>因此,解决方案是通过判断UA,来让ie等浏览器下所有的路由通过一个标签跳转,触发css-ponyfill的重新解析执行。</p> <pre类= export  function 浏览器(),{   const 才能;UA =window.navigator.userAgent   if 才能;(UA.includes (“qqbrowser")), return “qqbrowser"   if 才能;(UA.includes (“baidu")), return “baidu"   if 才能;(UA.includes (“Opera")), return “Opera"   if 才能;(UA.includes (“Edge")), return “Edge"   if 才能;(UA.includes (“MSIE"), | |, (UA.includes (“Trident"),,,, UA.includes(“房车:11.0“)))   ,,,return “IE"   if 才能;(UA.includes (“Firefox")), return “Firefox"   if 才能;(UA.includes (“Chrome")), return “Chrome"   if 才能;(UA.includes (“Safari")), return “Safari"   } type  CommonLinkProps =, {   ,,,孩子们:ReactElement   ,,,href:字符串   ,,,目标?:字符串   ,,,outerLink ?:布尔   ,,,的风格?:未知   }   export  default  function  CustomLink(道具:CommonLinkProps), {   const 才能,{,孩子,href,,目标,,,,outerLink,, styles =, emptyStyles },=,道具   (isIE const 才能;,,setIE],=, useState(假)   const 才能;cloneEl =, (c:, ReactElement,,道具?:,有的话),=比;   ,,,React.cloneElement (c,, {, href: as  ? ?, href,,目标,,……props })   useEffect才能((),=祝辞,{   ,,,if  ([“IE",,“qqbrowser",,“baidu"]其中(浏览器())),{   ,,,,,setIE(真正的)   ,,,}   ,,},[])   function 才能;renderLink (), {   ,,,if  (Children.only(孩子).type ===,“a"), {   ,,,,,const  node =, cloneEl (children  as  ReactElement)   ,,,,,return 节点   ,,,},{else    ,,,,,let  fn:,(),=祝辞,void  |, null =零   ,,,,,if  (outerLink), {   ,,,,,,,fn =,(),=祝辞,{   ,,,,,,,,,window.open (as  ? ?, href)   ,,,,,,,}   ,,,,,},{else    ,,,,,,,fn =,(),=祝辞,{   ,,,,,,,,,window.location.href =, as  ? ? href   ,,,,,,,}   ,,,,,}   ,,,,,const  node =, cloneEl (children  as  ReactElement,, {   ,,,,,,,onClick:,(),=祝辞,{   ,,,,,,,,,fn ()   ,,,,,,,},   ,,,,,})   ,,,,,return 节点   ,,,}   ,,}      return 才能;   ,,,& lt;比;   ,,,,,{! href  ?, (   null   null   null   null   null   null   null   null   null   null

css-vars-ponyfill在ie环境下怎么用