杜草原de踩坑记录


  • 首页

  • 归档

镂空蒙版层的几种实现

发表于 2017-09-08

蒙版层是网页上常用的一种效果,一般用于显示模态弹出层时屏蔽对下层的操作。实现很easy,一般 background: rgba(0,0,0,0.7); 就可以了。

但还有一种使用场景,像“使用引导”这类,就不能简单用半透明背景色来处理。这种情况下,需要对蒙版进行“镂空”的处理。

有粗暴处理的方法,就是用一张对应页面区域的截图进行定位,但这只适合下层的页面部分为纯静态内容,如果是动态处理的内容,那就不合适了。

之前总结过一些处理的思路,还做了demo。可是忘记了保存在什么地方(哭死,论有规律存档的重要性)。。。只能重新总结,这次应该不会再丢失吧。

1、图片实现

图片实现也有两种思路。

第一种:超大的尺寸半透明背景上抠了洞的图片。这种方法并不推荐。除非是可预见屏幕尺寸并不大的情况下。

第二种:将蒙版层分成5块,上下左右都直接用background-color处理,中间的区块用一张合适大小的抠洞半透明图片。这种方法比前一种要好,但要在html结构上增加5个div的结构,对于有强迫症的csser来说,实在有点难受。

2、通过 border 实现

这其实算是逆向思维,将 border 设置为半透明颜色、尺寸超大,div本身没有背景色,稍微调整下位置就能实现得很好。通过 border-radius 还可以实现矩形、圆形、椭圆形的镂空。

在张鑫旭的博客上又看到一个更好的实现,不是设置 border ,而是使用 outline。好处是不会增加元素尺寸和改变布局,只需要设一个非常非常大的宽度值就可以了。(参考 jquery.guide.js新版上线操作向导镂空提示jQuery插件 « 张鑫旭-鑫空间-鑫生活 )

某些浏览器对outline支持不好,可以用box-shadow替代实现。

3、通过 background 的渐变实现

通过设置 linear-gradient 和 radial-gradient ,用半透明-透明的渐变色来实现背景的镂空。这个方法思路很清晰,就是太麻烦了,要去计算一大堆尺寸和坐标。

4、clip-path 属性

待补充。

参考 Clippy — CSS clip-path maker

5、mask 属性

待补充。

参考 mask - CSS | MDN

6、svg 实现

待补充。

ie8下文本节点与属性节点不能增加自定义属性

发表于 2017-08-25

之前与 @张海峰 一起实现了一个HTML模板功能,不使用innerhtml,只替换对应的模板字符串。

实现原理是为遍历筛选出包含模板字符串的文本节点与属性节点,将原始模板保存在当前节点的一个自定义属性(例如_template)中。此后进行替换时,取当前节点的_template属性值进行计算。

在高版本浏览器中,运行很好,但在ie7/8下就坑了。ie7/8并不支持为text node与attribute node增加自定义属性,只支持element node增加自定义属性。

于是单独对ie7/8进行处理。

  1. 当包含模板字符串的node为text时,document.createComment()创建一个注释节点保存模板内容, insertBefore当前textNode。
  2. 当node为attribute时,为当前的element增加一个自定义属性(例如data-tpl-attrName),属性值为当前attributeNode的值。

ios下弹性滚动的bug

发表于 2017-08-25

在ios的UIWebView下,overflow:auto; 的元素的滚动很生硬,有时候会用 -webkit-overflow-scrolling:touch; 来实现类似原生的弹性滚动。

原理大约是UIWebView会对设置了 -webkit-overflow-scrolling:touch; 的对象,创建一个UIWebOverflowScrollView来实现类似原生的渲染。

一般情况下没什么问题,但在某些时候,元素在内容滚动时会卡住,并带着整个页面一起移动了。

暂时没有找到好的解决方法,只能先把弹性滚动干掉了。

参考 iOS 与 惯性滚动

IE7/8获取不到不支持的css属性值

发表于 2017-08-17

原本是想实现在IE7/8下能兼容rem单位的polyfill,结果不小心踩到几个坑。特记录如下

1、IE7下,可以用style.getAttribute(“width”)来获取到不支持的属性值;但IE8下不可以;

2、不支持的属性的属性值,如background-size,是可以直接获取到的;

3、IE7/8下,<style>标签的innerHTML,只有在页面加载后的极短时间,能获取原始值;获取到的是浏览器处理过的值,不支持的属性值都被干掉了。

12
杜草原

杜草原

踩坑不要紧,关键是能爬出来

14 日志
2 标签
© 2019 杜草原
由 Hexo 强力驱动
主题 - NexT.Muse