HTTP1.1 下的 CSS Sprites
HTTP1.1 自身的管道化并不完善。浏览器实际通过为同一域名下的资源同时建立多个 TCP 连接,来实现并行传输,并且限制了最大连接数
通过手动或者工程化的方式,将将小图片合并成大图,即 Sprites图(又称精灵图,雪碧图)。可以将多个对小图的请求,合并为对单张大图的请求,通过background-position定位在文档显示
优点:
缺点:
<svg>
<symbol id="svg1"><!-- SVG① --></symbol>
<symbol id="svg2"><!-- SVG② --></symbol>
<symbol id="svg3"><!-- SVG③ --></symbol>
</svg>
<svg>
<use xlink:href="#svg1"></use>
</svg>
SVG 具有无锯齿放大,容易修改尺寸好颜色等优点
SVG Sprites 可以作为不考虑 IE8- 时,CSS Sprites替代
但开发者仍然需要 手工 或 工程化方式,合成 SVG Sprites
HTTP2.0 支持多路复用
HTTP2.0 下,一个 TCP 会话上可以进行任意数量的HTTP请求
理论上,所有图片资源几乎可以并行下载
CSS Sprites 最初要解决的问题,已经不复存在
基于 TCP 本身的局限性(丢包时,整个会话都要重传),考虑网络的不稳定
实际体验中,CSS Sprites 对比 HTTP2.0,通常仍会有轻微的速度提升
是否使用 CSS Sprites,或者升级到 SVG Sprites 可以结合维护复杂度代入具体项目决定
IE 兼容性问题
PC 时代,Trident 内核的 IE 在 5.5 - 8 时占据主导地位
答案:使用 progid:DXImageTransform.Microsoft.AlphaImageLoader 滤镜重复加载 PNG
答案:设置浮动元素display: inline
答案:
position: absolute;
top: expression(((t = document.documentElement.scrollTop) ? t : document.body.scrollTop) + 'px');
答案:img { border: none }
测试
微软甚至专门提供了一套90天激活的 win7 镜像
标准属性不被支持,或者实现不同
答案:IE 兼容模式默认 box-sizing: border-box 而不是 box-sizing: content-box,可以统一声明为 前者,或者用 CSS hacks 设置值对 IE 兼容模式生效的宽高或边距
答案:
opacity: .8;
filter: alpha(opacity = 80);
filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 80);
答案:IE6+ 支持behavior,可以设置或检索对象的 DHTML 行为。引入 css3pie 其用这个属性让 IE 支持部分 CSS3 新特性
答案:用 IE 也支持的标准属性值cursor:pointer替代
CSS3 新特性兼容性问题
CSS3 起,标准被模块化,每个模块相对独立。浏览器可能会将处于 非推荐 的阶段属性实验性实现,或者某个处于 候选推荐 阶段的标准又被否决。导致不同浏览器,以及同一浏览器的不同版本,对于新特性的实现差异。
解决:
工作量大,开发阶段冗余代码多
同一属性,有无私有前缀,后面接收的属性值类型、顺序等可能不同
部分私有前缀,需要加到属性值,而不是属性名上
移动端兼容问题
主要是 iOS 和 Android 下移动浏览器兼容以及使用 Webview 开发的 APP 兼容问题
注意:以下这些问题只会在特定版本的系统下出现
答案:给溢出滚动元素设置 -webkit-overflow-scrolling:touch
答案:给按钮设置 opacity: 1
答案:给元素怒设置 cursor:pointer
答案:隐藏语音输入按钮 input::-webkit-input-speech-button { display: none }
想要让 APP 用户获得体验更一致,减少兼容性问题:
Emmet 能够提高 HTML 和 CSS 的书写效率,我们只需键入缩写,代码提示就会帮助我们找到相应属性名或属性值
IDE 如 VsCode 集成了 Emmemt,文本编辑器 Sublime Notepad++ VIM 等都有相应插件可以安装
IDE 如 VsCode 支持鼠标悬停属性名 或 属性值,查看说明
点击其中的链接,可以直达 MDN 对应文档
MDN,里面有属性的用法,在浏览器实现的说明及对应规范的链接
Can I use,里面有属性在各个运行环境的兼容性情况,移动端版本数据相当丰富
重新手打一遍遗忘的属性和属性名,注释搜索中发现的信息或链接,在后续重构中思考最佳实践,这样能收获更多
思考你在项目中遇到过哪些问题,你是否如何解决的
搜索,查文档、查规范是比请教他人更快速的问题解决途径
Bad:同一问题,同一属性,每次都要搜索
Good:高频的属性用法,尽量记住
Bad:反复复制粘贴代码
Good:找出代码中真正解决问题的部分,自己敲一遍
Great:明白问题的原因和解决问题的思路
思考项目有哪些可以改进的地方,你是如何改进的,成果怎样
效率:是否可以使用工具、脚本,将原有 CSS及相关的图片编译、压缩、上传、部署 等流程化、自动化
规范:是否可以改进 CSS 文件、规则的组织形式,是否可以参考或者根据业务,拟定一套利于团队协作的开发规范,并通过工程化的方式推广规范(比如,在Commit前,对CSS代码进行规范性校验和自动更正)
回顾一次你做的技术分享,你通过哪些渠道获取了权威的信息,是否手写代码验证了这些信息,是否有通过 脑图、动画、PPT 等提高信息分享的效率 - 回顾一次你与同事或同学的争论,你是如何证明自己观点是正确的,是拿出了权威的资料,请权威的人帮你说服,还是通过实际测试后,用数据说话
CSS 最近有哪些新鲜事,可以新的草案,新的工具,新的方法论等,简单分享你的观点
项目中所用的技术栈,最近更新的内容是什么,比过去改进了什么,解决了什么问题,怎样解决的?
你可以根据上面的提纲自由发挥,每个问题举 1 个例子即可,避免长篇大论,不要谈太多感受,重点体现方法,结果,涉及的知识点到为止
阅读量:1856
点赞量:0
收藏量:0