浏览器浏览器兼容
css中的兼容性问题
浏览器特性支持
了解浏览器支持情况
https://caniuse.com/
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference
https://tympanus.net/codrops/css_reference/
https://www.quirksmode.org/css/
你需要兼容哪些浏览器?
根据用户群体决定
了解浏览器市场份额
浏览器不支持时怎么办?
如果低版本浏览器没有这个特性可以接受吗?
可以使用效果稍差一些的替代方案吗?
可以使用一些替代方案吗?
可以使用JavaScript 让浏览器支持吗?
更换实现方式?
不同浏览器使用不同的样式
.container{
display:flex
}
@supports(display: grid) {
.container {
display: grid;
grid-template: repeat(4, 1fr) / 50px 100px;
}
}
浏览器hack原理- 层叠
p {
lihe-height:2;
line-height:3;
}
p {
display: table;
display:flex;
}
只在IE下生效
只在IE6下生效
只在IE6以上版本生效
只在IE8上不生效
非IE浏览器生效
浏览器的怪癖
internet Explorer 6
/* IE6 不支持两个类选择器直接组合 */
.unused-clsss.selector{
/* IE6 only CSS */
}
.container {
height: 100px;
/* 只有IE6 会忽略 */
_height: 200px;
}
internet Explorer 7
.container {
height : 100px;
/* 只有IE6 和7 会忽略 */
*height: 200px;
}
internet Explorer 8
/* IE6-8 不支持 :root 选择器 */
:root .selector {
/* IE6-8 Style */
}
.selector {
color: #fff;
/* IE6-8 会忽略\9 */
color: #fff\9
}
.tip {
background:blue;
background:red\9;
*background:black;
_background:orange;
}
CSS2 选择器兼容性
主要兼容性问题在IE6-7 上
IE6 不支持多个类直接组合
IE 不支持父子,兄弟选择器
IE6 不支持属性选择器
IE6-7 不支持伪元素
IE6 不支持某些伪类
IE6-7 不支持 :foucs 伪类
IE6 不支持 :first-child 伪类
CSS3 选择器兼容性
CSS2 属性
问题主要集中在IE6上 ,一部分IE7 也不支持
IE6 不支持 min/max-width/height
div {
min-height: 500px;
_height : 500px;
}
<div>
<div class='container'>
<div class='strut'>div>
div>
div>
<style>
.container {
min-width: 500px;
}
/* IE6 */
.container .strut {
height:1px;
width: 500px;
}
style>
IE6 不支持position :fixed
html, body {
height: 100%;
}
.go-top {
position: fixed;
_position:absolute;
botton: 0;
right: 0;
}
IE6-7不支持块级元素 inline-block
.selector {
display: inline-block;
*display:line:
*zoom :1 // 触发BFC
}
IE6-7 不支持 display:table
CSS3 属性
IE8 不支持
opacity
rgba hsl hsla
alpha 可以通过增加额外元素 并设置透明度实现
rem vh vw calc
IE9 不支持
media query
浏览器前缀
.example {
-webkit-transform: translate(100px, 0);
-ms-transform: translate(100px, 0);
transform: translate(100px, 0)
}
Transform in IE
.selector {
-webkit-transform : rotate(40deg) scale(2,0)
-ms-transform : rotate(40deg) scale(2,0)
transform : rotate(40deg) scale(2,0)
filter:progid: DXimageTransform.Microsoft.Matrix(
sizingMethod = 'auto expand',
M11 = 1.5322222333,M12 = -1.2332333444,
M21 = 1.2322222333,M23 = 1.5322222333
)
}
Transition
.example {
-webkit-transfomr: translate(100px, 0);
-ms-transform: translate(100px, 0);
transform: translate(100px, 0);
-webkit-transition: -webkit-transform .5s ease;
transition: -webkit-transform .5s ease;
transition: transform .5s ease;
}
http://autoprefixer.github.io/ 自动添加前缀
Animation
语义化的html5标签
<style>
article, mian, nav, aside, section, header, footer, figure, figcaption {
display: block;
}
style>
浏览器Bug
IE6 下半透明 png 显示不正常
.selector{
background : url(/path/to/img.png) no-repeat;
_background: none;
/* 图片URL 必须是完整路径 */
_filter:progid: DXImageTransform.Microsoft.AlphaImageLoader(
src='/path/to/img.png',
sizing'crop'
)
}
IE6 浮动双边距
.selector{
float:left;
/* IE6 下显示20px */
margin-left:10px;
}
.selector{
float:left;
margin-left:10px;
_display: inline
}
hasLayout
IE 模式
浏览器模式Browser Mode
兼容模式相当于使用IE7 的引擎
文本模式
切换文档模式,即渲染引擎和JavaScript 引擎
控制IE模式(<=10)
DocType 有无控制是否进入怪异模式
/* 使用IE7 渲染模式 */
http-equiv='X-UA-Compatible' content='IE=7'>
/* 使用最新引擎 */
http-equiv='X-ua-compatible' content='IE=edge'>
测试兼容性
Polyfill