HTML 输入对齐

标签 html css

忙于一个涉及按钮的游戏。关于我偶然发现的问题有 2 个问题。

代码:

input {
  background-color: #e7e7e7;
  border: solid;
  border-width: 1px;
  text-align: center;
  height: 50px;
  width: 50px;
  padding: 0px;
  margin: 0px;
}
<html>
  <head>
  </head>
  <body>

    <input type="button"  value="foo">
    <input type="button"  value="">
    <input type="button"  value="">
      <br/>
    <input type="button"  value="">
    <input type="button"  value="">
    <input type="button"  value="">
      <br/>
    <input type="button"  value="">
    <input type="button"  value="">
    <input type="button"  value="">

  </body>
</html>

问题:

  1. 当我在按钮中输入一个值时,为什么按钮不对齐?开发工具还说它仍然是相同的大小(50px 50px)那么为什么它改变了位置?

  2. 如何设置 CSS 样式,使按钮之间的距离为零(换句话说:按钮的边界接触)。我已经尝试设置 html/body/input 的填充/边距,但这些似乎都不起作用。

最佳答案

为什么带有文字的按钮会被按下?

所以这里有点作用。默认情况下,文本和内联元素与基线 垂直对齐。基线是由元素的 line-height 确定的值,尽管没有 line-height 的元素将确定一个“合理的”值[1] - 在空元素的情况下,这将为 0。但是,当您添加文本时,该元素将被赋予 line-height 并向下移动该量。 [2]

一个简单的解决方案是通过应用 vertical-align: top 强制输入以相同的对齐方式呈现,无论文本与否。


为什么按钮之间有空格?

内联 元素(和 inline-block 元素,如您的输入)将自然地并排对齐,但它们的行为类似于文本[3] 。就像您在 HTML 中的两个字母之间放置一个换行符一样,inline 元素之间的换行符会在它们之间添加一个空格。

假设,如果您将所有输入放在一行中(没有空格),它将解决您的问题:

<input type="button" value="these" /><input type="button" value="are" /><input type="button" value="touching" />

<br><br>

<input type="button" value="these" />
<input type="button" value="are" />
<input type="button" value="not" />

虽然我不建议使用该方法 - 它仅用于演示目的。


那么解决方案是什么?

好吧,你有一些选择。选择您认为最适合您的一项。

解决方案 1: 将输入包装在容器中并对其应用 font-size: 0。空格仍会存在,但 font-size: 0 确保它们不可见。

input {
  background-color: #e7e7e7;
  border: solid;
  border-width: 1px;
  text-align: center;
  height: 50px;
  width: 50px;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
  font-size: 12px;
}

.container {
font-size: 0;
}
<div class="container">
  <input type="button" value="foo">
  <input type="button" value="">
  <input type="button" value="">
  <br/>
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
  <br/>
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
</div>

解决方案 2:绕过 inline 元素的琐碎性并利用 display: blockfloat .

input {
  background-color: #e7e7e7;
  border: solid;
  border-width: 1px;
  text-align: center;
  height: 50px;
  width: 50px;
  padding: 0px;
  margin: 0px;
  font-size: 12px;
  float: left;
  display: block;
}

.row {display: block;}

.row::after {
  display: block;
  content: '';
  clear: both;
}
<div class="row">
  <input type="button" value="foo">
  <input type="button" value="">
  <input type="button" value="">
</div>
<div class="row">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
</div>
<div class="row">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
</div>

解决方案 3:使用更现代的方法,例如 flexbox .

input {
  background-color: #e7e7e7;
  border: solid;
  border-width: 1px;
  text-align: center;
  height: 50px;
  width: 50px;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
  font-size: 12px;
}

.container {
  display: flex;
  flex-wrap: wrap;
  width: 150px;
}
<div class="container">
  <input type="button" value="foo">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
  <input type="button" value="">
</div>


来源

1:"normal: Tells user agents to set the computed value to a "reasonable" value"

2:"For inline non-replaced elements, the box used for alignment is the box whose height is the 'line-height'.

3:"Inline-level elements generate inline-level boxes, which are boxes that participate in an inline formatting context."

关于HTML 输入对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456683/

相关文章:

JavaScript 冲突导致页面无法正确显示

javascript - 如何使文本框值更改对 jQuery 功能产生影响

html - 表格 td 边框可见和不可见同一行

javascript - 用javascript点击图片

javascript - jQuery/JS 将 onClick 按钮值添加到行中

html - 导航到#id 时,元素隐藏在固定位置标题下

javascript - 隐藏值低于特定值的类别 Highcharts

HTML/CSS : Horizontal bar/design on sites like jQuery

jquery - 我想在页面调整大小时将一个 div 移动到容器下方,我该怎么做?

css - 如何设置选择标签的选项元素的样式?