本文推荐 PC 端阅读~
本文版权归 “公众号 | 前端一万小时” 全部,未经受权,请勿转载!
复制代码
css_16
复制代码
1. 渐进加强和优雅降级分别是什么意思?
2. 什么是 CSS Hack?在哪一个网站查看标签(属性)的浏览器兼容状况?
3. IE六、7 的 Hack 写法是?
4. 尽量多的列举浏览器兼容的处理范例?
5. CSS Reset 是什么?CSS 预编译器是什么?后编译器(PostCSS)是什么?
6. CSS Reset 和 Normalize.css 有什么区别?
7. 尽量多的写出浏览器兼容性问题?
8. 如何让 Chrome 浏览器显示小于 12px 的文字?
9. CSS 预处理器的比较:Less、Sass?
10. 常见兼容性问题?
复制代码
前言: 什么是浏览器兼容问题?同一份代码,有的浏览器效果正常,有的不正常。其实最主要就是对 IE 浏览器的兼容问题。能够大体分为:
A 级兼容(Chrome、Firefox、IE9+):要保证在最新浏览器上完美实现设计稿;
B 级兼容(IE8):能用且差异不大;
C 级兼容(IE7 如下):能用。css
首先以最大程度完善设计稿为基础,再考虑兼容性,不能盲目为了兼容问题而弃用方便简洁的新方法(如 HTML五、CSS3);固然也不能用过新的技术方法使得兼容性过于低、实用性差。html
针对低版本浏览器进行构建页面,保证最基本的功能,而后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。前端
一开始就构建完整的功能,而后再针对低版本浏览器进行兼容。html5
(现阶段的前端工做,90% 都不须要去管 IE8 如下的兼容问题,工做重心最主要仍是集中在 JS 。对于浏览器兼容不须要花太多精力,理解相关的解决思路就行了。)浏览器
Bootstrap (>=IE8)
jQuery 1.~ (>=IE6), jQuery 2.~ (>=IE9)
Vue (>=IE9)
...
复制代码
根据兼容需求选择兼容工具(html5shiv.js、Respond.js、CSS Reset、Normalize.css、Modernizr);安全
PostCSS ;bash
一些老的技术手段,如:条件注释(处理 IE 的方式)、 CSS Hack、JS 能力检测作一些修补。框架
条件注释(conditional comment)是 HTML 源码中被 IE 有条件解释的语句。条件注释可被用来向 IE 提供及隐藏代码。工具
项目 | 范例 | 说明 |
---|---|---|
! | [if !IE] | 非 IE |
lt | [if lt IE 5.5] | 小于 IE 5.5 |
lte | [if lte IE 6] | 小于等于 IE6 |
gt | [if gt IE 5] | 大于 IE5 |
gte | [if gte IE 7] | 大于等于 IE7 |
\ | [if (IE 6)(IE 7)] | IE6 或者 IE7 |
例:动画
<!--[if IE 6]> <p>You are using Internet Explorer 6.</p> <![endif]-->
<!--[if !IE]><!-->
<script>alert(1);</script>
<!--<![endif]-->
<!--[if IE 8]> <link href="ie8only.css" rel="stylesheet"> <![endif]-->
复制代码
⚠️使用了条件注释的页面在 Windows Internet Explorer 9 中可正常工做,但在 Internet Explorer 10 中没法正常工做, IE10 再也不支持条件注释。
(用一些奇怪的手段达到兼容的方式!)
因为不一样厂商的浏览器,好比 Internet Explorer、Safari、Mozilla Firefox、Chrome 等,或者是同一厂商的浏览器的不一样版本,如 IE6 和 IE7,对 CSS 的解析认识不彻底同样,所以会致使生成的页面效果不同,得不到咱们所须要的页面效果。
这个时候咱们就须要针对不一样的浏览器去写不一样的 CSS,让它能在不一样的浏览器中也能获得咱们想要的页面效果。
常见 Hack 写法:
(💡 browserhacks.com 查 Hack 的写法)
.box {
color: red;
_color: blue; /*IE6 下它生效*/
*color: pink; /*IE六、7 下它生效*/
color: yellow\9; /*IE/Edge 6-8 下它生效*/
}
<!–-[if IE 7]>
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]–->
复制代码
属性名 | 兼容性 |
---|---|
inline-block | >=IE8 |
min-width/min-height | >=IE8 |
::before, ::after | >=IE8 |
div:hover | >=IE7 |
inline-block | >=IE8 |
background-size | >=IE9 |
圆角 | >=IE9 |
阴影 | >=IE9 |
动画/渐变 | >=IE10 |
(💡 caniuse.com 查 CSS 属性兼容)
.clearfix:after {
content: "";
display: block;
clear: both;
}
.clearfix {
*zoom: 1; /* 仅对 IE六、7 有效 */
}
复制代码
.target{
display: inline-block;
*display: inline;
*zoom: 1;
}
复制代码
<!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]-->
复制代码
<!DOCTYPE html>
<!--[if IEMobile 7 ]> <html dir="ltr" lang="en-US"class="no-js iem7"> <![endif]-->
<!--[if lt IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8 ]> <html dir="ltr" lang="en-US" class="no-js ie8 oldie"> <![endif]-->
<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html dir="ltr" lang="en-US" class="no-js"><!--<![endif]-->
复制代码
条件注释(conditional comment)是于 HTML 源码中被IE有条件解释的语句。条件注释可被用来向 IE 提供及隐藏代码。
条件注释最初于微软的 Internet Explorer 5 浏览器中出现,而且直至 Internet Explorer 9 均支持。微软已宣布于 IE10 中止支持。
针对 IE 浏览器编写不一样的 CSS 的让 IE 可以正常渲染的过程。
使用 JS 的语法检测浏览器支持的属性,以便展现效果。
用于解决 IE9 如下版本浏览器对 HTML5 新增标签不识别,并致使 CSS 不起做用的问题。因此咱们在使用过程当中,想要让低版本的浏览器,即 IE9 如下的浏览器支持,那么这款 html5shiv.js 是一个很是好的选择!
Respond.js 是一个小脚本,用于为 IE6-8 以及其它不支持 CSS3 媒体查询功能的浏览器提供媒体查询的 min-width 和 max-width 特性,实现响应式网页设计。
将浏览器的默认样式所有去掉,更准确说就是经过从新定义标签样式,“覆盖”浏览器的 CSS 默认属性。
Normalize.css 只是一个很小的 CSS 文件,但它在默认的 HTML 元素样式上提供了跨浏览器的高度一致性。相比于传统的 CSS Reset,Normalize.css 是一种现代的、为 HTML5 准备的优质替代方案。Normalize.css 是一个能够定制的 CSS 文件,它让不一样的浏览器在渲染网页元素的时候形式更统一。
🚀它能够:
Modernizr 是一个 JavaScript 库,用于检测用户浏览器的 HTML5 与 CSS3 特性。
Modernizr 使你能够方便地为各类状况编写 JavaScript 和 CSS,不管浏览器是否支持这些特性。这是处理渐进加强的完美方案。
Modernizr 会在页面加载后当即检测特性,而后建立一个包含检测结果的 JavaScript 对象,同时在 HTML 元素加入方便你调整 CSS 的 class 名。
(🏆⚠️如下知识点咱们会在“前端综合”里边专门用一篇文章来说解,目前咱们先熟悉相关概念,没必要深究!)
它提供了一种方式用 JavaScript 代码来处理 CSS。它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tree,AST),再交由插件来进行处理。插件基于 CSS 代码的 AST 所能进行的操做是多种多样的,好比能够支持变量和混入(mixin),增长浏览器相关的声明前缀,或是把使用未来的 CSS 规范的样式规则转译(transpile)成当前的 CSS 规范支持的格式。
💡简单来讲: 它能够被理解为一个平台,可让一些插件在上面跑,它提供了一个解析器,能够将 CSS 解析成抽象语法树,经过 PostCSS 这个平台,咱们可以开发一些插件来处理 CSS。热门插件如 Autoprefixer ,它能够帮咱们处理兼容问题,只需正常写 CSS,Autoprefixer 能够帮咱们自动生成兼容性代码。
💡与 PostCSS 相关的知识点:“CSS 预编译器”——预编译器的做用是加强了 CSS 语法,让咱们能够在 CSS 中使用变量、循环、嵌套等功能,主要表明是 Less、Sass 、Stylus,它们本质上就是一种编译器。
后记: 对于浏览器兼容咱们主要仍是理解这个处理思路,熟悉一些范例,而后在实际写页面的过程当中有选择的去复用便可。
祝好,qdywxs ♥ you!