You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bootstrap实现图标与输入框的横向对齐?

登录页图标与输入框横向对齐问题修复

问题背景

开发Web应用登录页面时,期望用户名、密码图标与对应输入框横向并排显示,此前该效果正常,但目前无法恢复对齐状态,尝试使用inline样式后破坏了原有布局。相关代码如下:

原CSS代码

* {
  box-sizing: box-sizing: border-box;
  ;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  background-color: #435165;
  height: 80vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

.login {
  background-color: #ffffff;
  box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.3);
  margin: 1px auto;
  width: 360px;
  height: min-content;
  padding: 5px;
  border-radius: 12px;
}

.login h1 {
  text-align: center;
  color: #5b6574;
  font-size: 24px;
  padding: 20px 0 20px 0;
  border-bottom: 1px solid #dee0e4;
}

.login form {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding-top: 20px;
}

.login form label {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  background-color: #3274d6;
  color: #ffffff;
}

.login form input[type="password"],
.login form input[type="text"] {
  width: 310px;
  height: 50px;
  border: 1px solid #dee0e4;
  margin-bottom: 5px;
  padding: 0 15px;
}

.login form input[type="submit"] {
  width: 100%;
  padding: 15px;
  margin-top: 20px;
  background-color: #3274d6;
  border: 0;
  cursor: pointer;
  font-weight: bold;
  color: #ffffff;
  transition: background-color 0.2s;
}

.login form input[type="submit"]:hover {
  background-color: #2868c7;
  transition: background-color 0.2s;
}

原HTML代码

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>

<!-- <link rel="stylesheet" href="style.css"> -->

<div class="login">
  <h1 class="text-center">Login</h1>

  <form action="authenticate.php" method="post">
    <div class="form-group was-validated">
      <label class="form-label" for="username">
        <i class="fas fa-user"></i>
      </label>
      <input class="form-control" type="text" name="username" placeholder="Username" id="username" required>
    </div>
    
    <div class="form-group was-validated">
      <label class="form-label" for="password">
        <i class="fas fa-lock"></i>
      </label>
      <input class="form-control" type="password" id="password" required>
    </div>
    
    <input class="btn btn-success w-100" type="submit" value="Enter">
  </form>
</div>

问题原因分析

  1. CSS语法错误:全局选择器*中的box-sizing属性重复声明(box-sizing: box-sizing: border-box;),导致该属性失效,干扰元素盒模型计算。
  2. Bootstrap样式冲突:引入的Bootstrap中,.form-label默认是块级元素,会独占一行,直接导致图标与输入框无法横向排列;同时.form-control自带的宽度、内边距样式与自定义input规则冲突,破坏布局。
  3. 表单容器布局缺失:.login form虽用了flex布局,但内部.form-group未设置横向排列规则,label和input默认垂直分布。

修复方案

1. 修正CSS语法错误

将全局选择器的box-sizing改为正确单一声明:

* {
  box-sizing: border-box;
  /* 其他属性保持不变 */
}

2. 为表单组添加横向布局

给.form-group设置flex布局,强制内部元素横向排列:

.login form .form-group {
  display: flex;
  width: 100%;
  margin-bottom: 5px;
}

3. 覆盖Bootstrap冲突样式

调整label和input的样式,消除Bootstrap默认规则的影响,同时优化视觉效果:

.login form .form-label {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  background-color: #3274d6;
  color: #ffffff;
  border: 1px solid #dee0e4;
  border-right: none; /* 与输入框边框合并,避免重复线条 */
  border-radius: 4px 0 0 4px;
}

.login form .form-control {
  width: calc(100% - 50px);
  height: 50px;
  border: 1px solid #dee0e4;
  border-radius: 0 4px 4px 0;
  padding: 0 15px;
  margin-bottom: 0;
}

4. 移除冗余验证类(可选)

如果不需要Bootstrap的实时验证样式,可移除.was-validated类,进一步减少样式冲突。

修改后的完整代码

CSS代码

* {
  box-sizing: border-box;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  background-color: #435165;
  height: 80vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

.login {
  background-color: #ffffff;
  box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.3);
  margin: 1px auto;
  width: 360px;
  height: min-content;
  padding: 5px;
  border-radius: 12px;
}

.login h1 {
  text-align: center;
  color: #5b6574;
  font-size: 24px;
  padding: 20px 0 20px 0;
  border-bottom: 1px solid #dee0e4;
}

.login form {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding-top: 20px;
}

.login form .form-group {
  display: flex;
  width: 100%;
  margin-bottom: 5px;
}

.login form .form-label {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  background-color: #3274d6;
  color: #ffffff;
  border: 1px solid #dee0e4;
  border-right: none;
  border-radius: 4px 0 0 4px;
}

.login form .form-control {
  width: calc(100% - 50px);
  height: 50px;
  border: 1px solid #dee0e4;
  border-radius: 0 4px 4px 0;
  padding: 0 15px;
  margin-bottom: 0;
}

.login form input[type="submit"] {
  width: 100%;
  padding: 15px;
  margin-top: 20px;
  background-color: #3274d6;
  border: 0;
  cursor: pointer;
  font-weight: bold;
  color: #ffffff;
  transition: background-color 0.2s;
}

.login form input[type="submit"]:hover {
  background-color: #2868c7;
  transition: background-color 0.2s;
}

HTML代码

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>

<link rel="stylesheet" href="style.css">

<div class="login">
  <h1 class="text-center">Login</h1>

  <form action="authenticate.php" method="post">
    <div class="form-group">
      <label class="form-label" for="username">
        <i class="fas fa-user"></i>
      </label>
      <input class="form-control" type="text" name="username" placeholder="Username" id="username" required>
    </div>
    
    <div class="form-group">
      <label class="form-label" for="password">
        <i class="fas fa-lock"></i>
      </label>
      <input class="form-control" type="password" id="password" required>
    </div>
    
    <input class="btn btn-success w-100" type="submit" value="Enter">
  </form>
</div>

内容的提问来源于stack exchange,提问作者kucb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:06:27