兼容、bfc

常用浏览器

1.主流浏览器:Internet Explorer、 Safari、Mozilla Firefox、 Google Chrome、Opera

2.最早浏览器:网景领航者

五大浏览器内核

内核 浏览器*

Trident: IE、Maxthon(遨游)、腾讯 、Theworld世界之窗、360浏览器 只能应用于windows,不开源

Gecko: Mozilla Firefox (火狐)是开源的,它的最大优势是跨平台

Webkit : 代表作品Safari、Chrome , 是一个开源项目。

Presto : Opera(欧朋)公认的渲染速度最快的引擎

Blink 由Google和Opera Software开发的浏览器排版引擎,2013年4月发布

CSS Bug、CSS Hack和Filter

1.CSS Bug CSS样式在各浏览器中解析不一致的情况 在浏览器中不能正确显示的问题

2.CSS Hack 兼容CSS在不同浏览器中正确显示的技巧方法 补丁

3.Filter 表示过滤器 Filter是一种用来过滤不同浏览器的Hack类型

IE兼容性问题

(1).图片有边框(ie8-) 解决办法: img{border:0 none;}

(2)div>img,img下方会存在间隙 描述:在div中插入图片时,图片会将div下方撑大大约三像素。
​ 解决办法:
img{display:block;}
div{font-size:0;}

(3)ie6以下,会错误地将浮动元素的浮向边margin加倍显示。
​ 解决: {display:inline;}

(4) ie7-,存在默认高度16px。
​ 解决办法:
{font-size:0;}
{overflow:hidden;}

(5)表单元素行高不一致问题(基线对齐的问题)
​ 解决办法:
{vertical-align: middle;}
{float:left;}

(6)表单元素样式在各浏览器渲染效果不一
​ 解决办法:给input清除默认样式{display:block;border: 0 none;padding:0;},

​ 给input外层嵌套标签,设置input需要的样式

(7)浮动元素50%+50%>100% (ie6-)
​ 解决办法: 若两个元素都左浮动,给元素添加{clear:right;}清除反向浮动

(8)ie8及以下浏览器才支持cursor:hand; (鼠标指针)
​ 解决办法: {cursor:pointer;}

(9)透明度
opactity:val; val取值为0-1,越大越不透明。
filter:alpha(opacity=val) val取值为0-100,整十数,越大越不透明。

(10).margin塌陷:

父元素与第一个子元素存在上间距,若给第一个子元素加margin-top,会错误地渲染成父元素的margin-top。
解决办法:
​ (1)子元素或者父元素浮动
(2)给父元素加overflow:hidden;
(3)给父元素加border-top
(4)将子元素的margin-top当作父元素的padding-top

(11).margin合并当两个块级元素竖直排列时,上一个元素的margin-bottom与下一个元素的margin-top会发生合并,它们之间的margin取两者之间较大的值。

(12).ie8只支持单冒号写法
(13).总属性(border、background)的多个属性值之间要用空格隔开
(14).ul>li(float)>a(宽高)(float–>ie6)
​ ul>li(float)>a(高度)(float–>ie6)>span(padding)(假如span也设置成了display:block;也要float)
(15).页面最外层设置最小宽度(版心容器宽度)
兼容ie6:_width:expression(document.body.clientWidth < 1190 ? “1190px” : “auto”);

BFC

BFC(Block formatting context)直译为“块级格式化上下文” 独立的渲染区域,只有Block-level box(块)参与,规定内部如何布局,与外部毫不相干。

BFC的布局规则

1、内部的Box会在垂直方向,一个接一个地放置。

2、Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻块会发生margin重叠

3、每个元素的margin box的左边, 与包含块border box的左边相接触

盒模型=content+padding+border+margin。Width指的是content的宽,height=content的高。

4、BFC的区域不会与float box重叠。(应用场景:清除浮动的第二种方式、自适应两栏布局)

5、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素

(应用场景:防止margin合并,对独立的bfc里面的子元素操作不会影响到外部元素)

6、计算BFC的高度时,里面的浮动元素也参与计算(应用场景:清除浮动的第一种方式)

触发BFC

根元素html

float属性不为none

position为absolute(有定位的父元素或者html)或fixed(可视窗口)

display为inline-block, table-cell, table-caption, flex, inline-flex(css3)

overflow不为visible(overflow:hidden;)

应用:自适应两栏布局

方法一:

左边定宽加浮动,右边margin-left留出左边的宽(因为浮动的元素会脱离标准流,第二个元素会跑上来占据第一个元素的位置,而块级元素的宽度刚好是100%,当设置了margin-left为第一个元素的宽度,它的宽度会自动调整为页面剩余部分的宽度)

​ .dv1{width: 200px;height:600px;background-color: red;float: left;}
.dv2{margin-left:200px;height: 600px;background: blue;}*/

方法二:
左边定宽加浮动,右边不定宽加overflow:hidden
原理:bfc的区域不会与浮动块重叠

防止margin重叠

属于同一个bfc的两个相邻块会发生margin重叠

给第二个p添加一个盒子并添加overflow:hidden;

清除内部浮动

计算BFC的高度时,里面的浮动元素也参与计算