使用inline-block
元素时,whitespace
这些元素之间始终存在问题(该空间大约为4px宽)。
因此,您的两个divs
都具有50%的宽度,加上whitespace
(〜4px)的宽度大于100%,因此会损坏。您的问题的示例:
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div>
<div class="right">bar</div>
有几种方法可以解决此问题:
1.这些元素之间没有空格
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div><div class="right">bar</div>
2.使用HTML注释
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div><div class="right">bar</div>
3.将父级设置font-size
为0
,然后为inline-block
元素添加一些值
body{
margin: 0;
}
.parent{
font-size: 0;
}
.parent > div{
display: inline-block;
width: 50%;
font-size: 16px;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="parent">
<div class="left">foo</div>
<div class="right">bar</div>
</div>
4.在它们之间使用负边距(不理想)
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
margin-right: -4px;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div>
<div class="right">bar</div>
5.落角
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div
><div class="right">bar</div>
<hr>
<div class="left">foo</div><div class="right">
bar</div>
6.跳过某些HTML关闭标记(感谢@thirtydot作为参考)
body{
margin: 0;
}
ul{
margin: 0;
padding: 0;
}
li{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<ul>
<li class="left">foo
<li class="right">bar
</ul>
参考文献:
- 争取CSS技巧上的内联块元素之间的空间
- 删除内联块元素之间的空白by David Walsh
- 如何删除内联块元素之间的空间?
正如@MarcosPérezGude 所说的,最好的方法是使用rem
,并font-size
在html
标签上添加一些默认值(例如HTML5Boilerplate)。例:
html{
font-size: 1em;
}
.ib-parent{
font-size: 0;
}
.ib-child{
display: inline-block;
font-size: 1rem;
}
更新:快到2018年了,请使用flexbox甚至更好的CSS网格布局。