使用 bootstrap 5 不会出现密码字段中的眼睛

ger*_*der 7 html css font-awesome-5 bootstrap-5

使用 Bootstrap v5 和 FontAwesome v5 时,我无法让眼球出现在表单的右侧。相反,它将密码字段拉到比用户名字段更靠右的位置,并且眼睛不会显示。

<div class="input-group mb-3">
   <span class="input-group-text"><i class="fas fa-lock"></i></span>
   <input class="form-control" id="username" name="username" placeholder="Username" value="">
</div>

<div class="input-group mb-3">
   <span class="input-group-text"><i class="fas fa-lock"></i></span>
   <input class="form-control" id="password" name="password" placeholder="Password" value="">
   <span class="input-group-text"><i class="far fa-eye-slash" id="togglePassword"></i></span>
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript

const togglePassword = document.querySelector("#togglePassword");
const password = document.querySelector("#password");

togglePassword.addEventListener("click", function () {
   
// toggle the type attribute
const type = password.getAttribute("type") === "password" ? "text" : "password";
password.setAttribute("type", type);

// toggle the eye icon
this.classList.toggle('fa-eye');
});
Run Code Online (Sandbox Code Playgroud)

Rif*_*yas 8

当图标与输入重叠时,它会位于输入标签下方。要解决此问题,您需要将<i>标记设置为更高的z-index值。尝试z-index: 100使其即使在单击输入时也显示在顶部。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/css/fontawesome.min.css" integrity="sha384-jLKHWM3JRmfMU0A5x5AkjWkw/EYfGUAGagvnfryNV3F9VqM98XiIH7VBGVoxVSc7" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
<div class="input-group mb-3">
   <span class="input-group-text"><i class="fas fa-lock"></i></span>
   <input class="form-control" id="password" name="password" placeholder="Password" value="">
   <i class="far fa-eye" id="togglePassword" 
   style="cursor: pointer; margin-left: -30px; z-index: 100;"></i>
</div>
Run Code Online (Sandbox Code Playgroud)

编辑:如果您希望密码字段和用户名字段具有相同的宽度,您可以尝试将图标包裹在 内input-group-text并删除样式margin-left: -30px; z-index: 100;,因为input-group-text与输入字段重叠。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/css/fontawesome.min.css" integrity="sha384-jLKHWM3JRmfMU0A5x5AkjWkw/EYfGUAGagvnfryNV3F9VqM98XiIH7VBGVoxVSc7" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">

<div class="input-group mb-3">
  <span class="input-group-text"><i class="fas fa-lock"></i></span>
  <input class="form-control" id="username" name="username" placeholder="Username" value="">
</div>

<div class="input-group mb-3">
  <span class="input-group-text"><i class="fas fa-lock"></i></span>
  <input class="form-control" id="password" name="password" placeholder="Password" value="">
  <span class="input-group-text">
    <i class="far fa-eye" id="togglePassword" 
   style="cursor: pointer"></i>
   </span>
</div>
Run Code Online (Sandbox Code Playgroud)

编辑 2:在 JavaScript 代码中,您使用 隐藏眼睛图标this.classList.toggle('fa-eye')。当该类在元素fa-eye中可用时,此函数会删除该类,而当该类不可用时,该函数会添加该类。classListtogglePassword

我假设您想显示隐藏密码图标, 当用户当前采用文本格式时,该图标可能是该eye-slash图标。所以你可以添加

this.classList.toggle('fa-eye-slash');
Run Code Online (Sandbox Code Playgroud)

如下

const togglePassword = document.querySelector("#togglePassword");
const password = document.querySelector("#password");

togglePassword.addEventListener("click", function () {
   
  // toggle the type attribute
  const type = password.getAttribute("type") === "password" ? "text" : "password";
  password.setAttribute("type", type);
  // toggle the eye icon
  this.classList.toggle('fa-eye');
  this.classList.toggle('fa-eye-slash');
});
Run Code Online (Sandbox Code Playgroud)
this.classList.toggle('fa-eye-slash');
Run Code Online (Sandbox Code Playgroud)