碰上问题 —— 分析问题 —— 解决问题。
浏览器兼容问题就这么出现的,今天就碰上一个IE8的问题。内容增加后,容器却不撑开。下面来看看详细的吧。
碰上问题:
问题: 有A,B,C三个容器,其中A设置了display:inline-block,A容器包含B容器,B容器包含C容器。此时C容器的高度增加时(脚本动态为C增加内容),A容器的高度居然不变? 问题如下图,A容器下面的内容被覆盖了。
先看demo代码:
css部分
1
2
3
4
5
6
7
8
9
10
11
12
|
.box { width : 300px ; padding : 10px ; display : inline- block ; background : #ABC6DD ; } .data { display : none ; } .data a { display : block ; } |
html部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< div id = "inline_block_box" class = "box" > < div id = "child_box" > < input type = "button" id = "btn_loader" value = "加载数据" /> < h1 > Monring, 不一样的早晨,不一样的前端 </ h1 > < div id = "data_box" class = "data" > </ div > </ div > </ div > < p > Monring, 不一样的早晨,不一样的前端 </ p > |
Javascript部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
window.onload = function () { var data = document.getElementById( ‘data_box‘ ); data.style.display = ‘none‘ ; var btnLoader = document.getElementById( ‘btn_loader‘ ); btnLoader.onclick = function () { if ( this .value == ‘加载数据‘ ) { this .value = ‘隐藏数据‘ ; data.style.display = ‘block‘ ; } else { this .value = ‘加载数据‘ ; data.style.display = ‘none‘ ; } } } |
分析问题:
在点击加载数据后,我们看到了错误的显示页面。
此时,我们打开IE8的调试器,然后选中inline_block_box。再随便取消掉它的一个样式,发现它又能正常显示了。
分析:这里的问题就是,我们在加载内容的时候,IE8没有对inline_block_box进行重绘。
解决问题:
得到问题的根源解决问题就好办了。加行代码触发浏览器重绘就是了。看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
window.onload = function () { var data = document.getElementById( ‘data_box‘ ); var box = document.getElementById( ‘inline_block_box‘ ); var btnLoader = document.getElementById( ‘btn_loader‘ ); btnLoader.onclick = function () { if ( this .value == ‘加载数据‘ ) { this .value = ‘隐藏数据‘ ; data.style.display = ‘block‘ ; box.style.visibility = "visible" ; } else { this .value = ‘加载数据‘ ; data.style.display = ‘none‘ ; box.style.visibility = "inherit" ; } } } |
我们下面代码来进行重新inline_block_box元素。
box.style.visibility = "visible";
box.style.visibility = "inherit";
当然,我们也可以使用其他的方式来触发重绘。当然我们这个重绘只需要针对IE8的操作,我们也可以加入浏览器检测代码哦。
原网页:http://www.monring.com/front_end/ie8-inline-block.html