跨浏览器按钮之间的间距不一致?

Inconsistent spacing between buttons across browsers?

Razor 语法

<div class="input-group">
    <span class="input-group-addon">Delivery Date <span class="tip" title="@deliveryDateTooltip">?</span></span>
    @Html.TextBox("DeliveryDate", Model.DeliveryDate.ToShortDateString(), "{0:MM/dd/yyyy}", new { @class = "datefield form-control", @data_key = "delivery-date", @data_original = Model.DeliveryDate.ToShortDateString(), @style = "width: 250px; max-width: 250px;" })
    @Html.TextBox("DayOfWeek", Model.DeliveryDate.DayOfWeek.ToString(), "{0}", new { @class = "dowfield form-control", @data_key = "delivery-date", @readonly = "readonly", @style = "width: 132px; max-width: 132px;" })
    <button name="Clear" type="reset" class="btn btn-info" title="Clear the filter critera." data-monitor="ClearButton" style="border-radius: 0;">Clear</button>
    <button name="Filter" type="submit" class="btn btn-primary btn-default" title="Load the order according to the filter criteria." data-monitor="LoadButton" style="border-radius: 0;@(isIE ? "margin-left: -4px;" : "")">Load</button>
</div>

Chrome

Chrome 看起来非常好并且表现完全符合我的预期。

Edge 和 Internet Explorer 11

IE 和 Edge 似乎有这个不可见的边距(未在检查器中显示)。

问题是当我在检查器中查看按钮时,它们没有边距。但是,在 filter/load 按钮上设置 margin-left: -4px; 可以解决这个问题;因此,上面的@(isIE ? "margin-left: -4px;" : "")

问题

  1. 我不想添加仅适用于 IE 和 Edge 的特殊 CSS 规则。
  2. 加载按钮的右侧与其上方的元素并没有完全对齐(它在 -4px 和 -5px 之间)。

问题

是否有一些 CSS 规则我可以​​应用 always 不会破坏 chrome 中的视觉效果,但会在 IE 和 Edge 中修复?

我添加了一个 JSFiddle here 来显示它。如果你在 chrome 中打开它看起来是正确的,如果你在 IE 或 Edge 中打开它它的按钮之间有一个间隙。我该如何以 非例外 方式解决此问题?

我不知道这是最好的解决方案,但我相信我已经找到了。

.input-group {
  font-size: 0px;
}

.input-group > span,
.input-group > input,
.input-group > button {
  font-size: 14px;
}

这似乎消除了按钮之间的间隙而不影响 chrome(在 chrome 上看起来仍然相同)。

指出它可能与 bootstrap 相关的贴纸让我在 google 上找到了 this page,这让我得到了这个结果。

JSFiddle 的答案。

差距的原因是由于那些元素的"display" 属性。当两个元素设置为 "inline" 或 "inline-block",并且在 HTML 中它们之间至少有一个空白字符时,它不会像 "block" 那样被省略] 元素。目的是您可以在文本正文中插入 span 或其他内联元素,并尊重周围的空白。

就是说,您希望并排使用 "inline-block" 个元素并且不存在这种间隙的情况并不少见。有3种解法。

1) 将父元素的"letter spacing"设置为负值,然后对子元素设置回正常。在你的 fiddle 中是:

div {
  letter-spacing:-100px;
}
div * {
  letter-spacing:normal;
}

2) 消除标记中的空格,使标签相互接触。它可能看起来很丑,但这样可以解决问题。

3) 使用不同的方式来设置元素的样式。例如,使用 "display: block" 和 "float: left",或使用 flexbox 作为提到的另一个答案。