一、问题
当我们写出两个方块盒子时,系统知道div是块级元素,会独占一行,所以这是我们就需要让块级元素变成行级块元素(使用两个display;inline-block;),但此时又会引发一个新的问题:元素放到一起会中间产生一段空白。
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>练习</title>
<style>
.content{
width:400px;
height:200px;
border:2px solid black;
}
.left{
width:100px;
height: 100px;
background:#0ff;
display:inline-block;
}
.right{
width:100px;
height:100px;
background:#f0f;
display:inline-block;
}
</style>
</head>
<body>
<div class="content">
<div class="left">
左
</div>
<div class="right">
右
</div>
</div>
</body>
</html>
效果图;
产生空白的原因:
元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据CSS中white-space属性的处理方式(默认是normal,合并多余空白),原来 HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block的元素之间就出现了空隙。
二、解决方法
1、 将子元素标签的结束符和下一个标签的开始符写在同一行或把所有子标签写在同一行
<div class="content">
<div class="left">
左
</div><div class="right">
右
</div>
</div>
2、父元素中设置font-size: 0,在子元素上重置正确的font-size
.content{
width:400px;
height:200px;
border:2px solid black;
font-size:0;
}
.left{
width:100px;
height: 100px;
background:#0ff;
display:inline-block;
font-size:14px;
}
.right{
width:100px;
height:100px;
background:#f0f;
display:inline-block;
font-size:14px;
}
3、 为子元素设置float:left;(所有的子元素)
.left{
float:left;
width:100px;
height: 100px;
background:#0ff;
display:inline-block;
}
.right{
width:100px;
height:100px;
background:#f0f;
display:inline-block;
float:left;
}
三、注意点:
1、padding-bottom究竟是相对于谁的?
答案是相对于 父元素的width值。
那么对于这个outwrapper的用意就很好理解了。CSS呈流式布局,div默认宽度填满,即100%大小,给outwrapper设置margin: 0 10px;相当于让左右分别减少了10px。
2、父元素相对定位,那绝对定位下的子元素宽高若设为百分比,是相对谁而言的?
相对于父元素的(content + padding)值, 注意不含border
3、延伸:如果子元素不是绝对定位,那宽高设为百分比是相对于父元素的宽高,标准盒模型下是content, IE盒模型是content+padding+border。