碰上问题 —— 分析问题 —— 解决问题。
浏览器兼容问题就这么出现的,今天就碰上一个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