使用 bootstrap 5 密码字段中的眼睛不会出现
Eye in password field does not appear using 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>
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');
});
尝试将 z-index:2;
添加到您的图标。
为了防止在输入字段获得焦点时隐藏眼睛图标,您需要添加以下 css 代码:-
<style>
#password:focus ~ .far-fa-eye{
margin-left: -30px !important;
cursor: pointer !important;
z-index: 5 !important;
}
</style>
此外,请与我们分享您的用户名字段的视觉效果或代码,以便我们更好地理解您的意思。
PS:我希望尽可能避免内联 css。在调试大型 css 代码时,内联 css 可能会很麻烦。
当图标与输入重叠时,它位于输入标签下方。要解决此问题,您需要将 <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>
编辑:如果您希望密码字段和用户名字段的宽度相同,您可以尝试将图标包裹在 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>
编辑 2: 在您的 JavaScript 代码中,您使用 this.classList.toggle('fa-eye')
隐藏了眼睛图标。此函数在togglePassword
元素的classList
中有classfa-eye
时去掉,没有时加上上面的class
我假设您希望在用户当前处于文本格式时显示可能是 eye-slash
icon 的隐藏密码图标。所以你可以添加
this.classList.toggle('fa-eye-slash');
如下
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');
});
<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>
实施 Jquery 3.6.0 与 Bootstrap 5
HTML
<div class="mb-3">
<label class="form-label">Password</label>
<div class="input-group mb-3">
<input class="form-control password" id="password" class="block mt-1 w-full" type="password" name="password" required />
<span class="input-group-text">
<i class="far fa-eye-slash" id="togglePassword"
style="cursor: pointer"></i>
</span>
</div>
</div>
JS
$(".togglePassword").click(function (e) {
e.preventDefault();
var type = $(this).parent().parent().find(".password").attr("type");
console.log(type);
if(type == "password"){
$(this).removeClass("fa-eye-slash");
$(this).addClass("fa-eye");
$(this).parent().parent().find(".password").attr("type","text");
}else if(type == "text"){
$(this).removeClass("fa-eye");
$(this).addClass("fa-eye-slash");
$(this).parent().parent().find(".password").attr("type","password");
}});
使用羽毛图标的示例 Jquery 3.3 Bootstrap 5
feather.replace({ 'aria-hidden': 'true' });
$(".togglePassword").click(function (e) {
e.preventDefault();
var type = $(this).parent().parent().find(".password").attr("type");
console.log(type);
if(type == "password"){
$("svg.feather.feather-eye").replaceWith(feather.icons["eye-off"].toSvg());
$(this).parent().parent().find(".password").attr("type","text");
}else if(type == "text"){
$("svg.feather.feather-eye-off").replaceWith(feather.icons["eye"].toSvg());
$(this).parent().parent().find(".password").attr("type","password");
}
});
<html>
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons@4.28.0/dist/feather.min.js" integrity="sha384-uO3SXW5IuS1ZpFPKugNNWqTZRRglnUJK6UAZ/gxOX80nxEkN9NcGZTftn6RzhGWE" crossorigin="anonymous"></script>
</head>
<body>
<div class="p-3 mb-3">
<label class="form-label">Password</label>
<div class="input-group mb-3">
<input class="form-control password" id="password" class="block mt-1 w-full" type="password" name="password" value="secret!" required />
<span class="input-group-text togglePassword" id="">
<i data-feather="eye" style="cursor: pointer"></i>
</span>
</div>
</div>
</body>
当使用 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>
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');
});
尝试将 z-index:2;
添加到您的图标。
为了防止在输入字段获得焦点时隐藏眼睛图标,您需要添加以下 css 代码:-
<style>
#password:focus ~ .far-fa-eye{
margin-left: -30px !important;
cursor: pointer !important;
z-index: 5 !important;
}
</style>
此外,请与我们分享您的用户名字段的视觉效果或代码,以便我们更好地理解您的意思。
PS:我希望尽可能避免内联 css。在调试大型 css 代码时,内联 css 可能会很麻烦。
当图标与输入重叠时,它位于输入标签下方。要解决此问题,您需要将 <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>
编辑:如果您希望密码字段和用户名字段的宽度相同,您可以尝试将图标包裹在 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>
编辑 2: 在您的 JavaScript 代码中,您使用 this.classList.toggle('fa-eye')
隐藏了眼睛图标。此函数在togglePassword
元素的classList
中有classfa-eye
时去掉,没有时加上上面的class
我假设您希望在用户当前处于文本格式时显示可能是 eye-slash
icon 的隐藏密码图标。所以你可以添加
this.classList.toggle('fa-eye-slash');
如下
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');
});
<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>
实施 Jquery 3.6.0 与 Bootstrap 5
HTML
<div class="mb-3">
<label class="form-label">Password</label>
<div class="input-group mb-3">
<input class="form-control password" id="password" class="block mt-1 w-full" type="password" name="password" required />
<span class="input-group-text">
<i class="far fa-eye-slash" id="togglePassword"
style="cursor: pointer"></i>
</span>
</div>
</div>
JS
$(".togglePassword").click(function (e) {
e.preventDefault();
var type = $(this).parent().parent().find(".password").attr("type");
console.log(type);
if(type == "password"){
$(this).removeClass("fa-eye-slash");
$(this).addClass("fa-eye");
$(this).parent().parent().find(".password").attr("type","text");
}else if(type == "text"){
$(this).removeClass("fa-eye");
$(this).addClass("fa-eye-slash");
$(this).parent().parent().find(".password").attr("type","password");
}});
使用羽毛图标的示例 Jquery 3.3 Bootstrap 5
feather.replace({ 'aria-hidden': 'true' });
$(".togglePassword").click(function (e) {
e.preventDefault();
var type = $(this).parent().parent().find(".password").attr("type");
console.log(type);
if(type == "password"){
$("svg.feather.feather-eye").replaceWith(feather.icons["eye-off"].toSvg());
$(this).parent().parent().find(".password").attr("type","text");
}else if(type == "text"){
$("svg.feather.feather-eye-off").replaceWith(feather.icons["eye"].toSvg());
$(this).parent().parent().find(".password").attr("type","password");
}
});
<html>
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons@4.28.0/dist/feather.min.js" integrity="sha384-uO3SXW5IuS1ZpFPKugNNWqTZRRglnUJK6UAZ/gxOX80nxEkN9NcGZTftn6RzhGWE" crossorigin="anonymous"></script>
</head>
<body>
<div class="p-3 mb-3">
<label class="form-label">Password</label>
<div class="input-group mb-3">
<input class="form-control password" id="password" class="block mt-1 w-full" type="password" name="password" value="secret!" required />
<span class="input-group-text togglePassword" id="">
<i data-feather="eye" style="cursor: pointer"></i>
</span>
</div>
</div>
</body>