内联块元素后的意外边距

时间:2015-02-01 04:02:55

标签: html css margin

我有以下代码:http://jsfiddle.net/yxxhj33x/

如您所见,我有.links元素,后跟input[type='text']元素。不幸的是,输入上方有一个余量,当我添加时不会消失:

.links {
  display: inline-block;
  border: 1px solid black;
  width: 100%;
  font-size: 0;
  white-space: nowrap;
  overflow-x: auto;
}

.links a {
  background: #FFF;
  display: inline-block;
  min-width: 100px;
  width: 25%;
  text-align: center;
  border-right: 1px black solid;
  height: 50px;
  font-size: 16px;
}
<div class='links'>
    <a href='#'>Blah</a>
    <a href='#'>Blah</a>
    <a href='#'>Blah</a>
    <a href='#'>Blah</a>
</div>
<input type='text'>

input[type='text'] {
  margin: 0;
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

除了removing the space between inline elements之外,您还需要更改vertical-align元素上.links属性的值。值得指出的是默认值为baseline。如果在内联元素上设置为baseline,则会有reserved space for letters such as f, j, p and q(这些字母比其他字母更低(或更高),因此保留空格)。

Updated Example

.links {
    display: inline-block;
    border: 1px solid black;
    width: 100%;
    font-size: 0;
    white-space: nowrap;
    overflow-x: auto;
    vertical-align: bottom;   /* Added.. */
}
.links a {
    box-sizing: border-box;   /* Added.. */
}

值得指出的是,a元素的宽度并未加起来100%(因为边框未包含在元素的宽度计算中)。要删除scollbar,请将box-sizing: border-box添加到锚元素。


作为旁注,由于您在父100%元素上设置了.links的宽度,因此它实际上不需要display inline-block }。您应该将其设为block级元素(省略display: inline-block,因为默认情况下它已经是divblock级别。这样做,您实际上不再需要添加vertical-align: bottom,因为block级别元素不尊重此属性。

Example Here

.links {
    border: 1px solid black;
    font-size: 0;
    white-space: nowrap;
    overflow-x: auto;
}
.links a {
    box-sizing: border-box;
}