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

如何在密码input输入框内部放置密码显示/隐藏切换图标

密码输入框内置显隐切换图标CSS实现方案

完全可以通过纯CSS实现该效果,不需要嵌套input元素。你原有的密码切换逻辑、Font Awesome图标调用的写法已经可以正常运行,只需要补充少量定位样式,调整元素布局即可,完全符合HTML语法规范。

核心实现逻辑

  • 给包裹密码输入框、切换checkbox、图标label的父元素设置相对定位,作为内部定位元素的位置参照
  • 给密码输入框增加足够的右侧内边距,避免输入的密码文本被内置图标遮挡
  • 隐藏实际用于触发状态切换的checkbox(你原有代码已经写了display: none,这部分无需修改)
  • 给绑定checkbox的图标label设置绝对定位,移动到输入框内部右侧位置即可——点击label会自动触发关联checkbox的选中/取消选中,原有JS逻辑不需要改动。

完整可运行代码

JavaScript

原有切换逻辑无需调整:

function showPassword() {
  var x = document.getElementById("password_current");
  x.type = x.type === "password" ? "text" : "password";
}

CSS

在你原有样式基础上补充布局定位相关代码即可:

/* 原有切换图标样式保留 */
#togglePw { display: none; }
#togglePw + label:before { content: "\f06e"; }
#togglePw:checked + label:before { content: "\f070"; }

/* 新增布局样式 */
/* 父容器设置相对定位 */
.pw-container {
  position: relative;
  width: fit-content;
}
/* 密码输入框预留图标位置 */
.field-settings {
  box-sizing: border-box;
  height: 38px;
  width: 240px;
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 0 40px 0 12px;
  font-size: 14px;
}
/* 图标定位到输入框内部右侧 */
.pw-container .fa {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  cursor: pointer;
  color: #666;
  user-select: none;
}

HTML

只需要给外层包裹元素加上对应类名即可,不需要嵌套input:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css">

<p class="pw-container">
  <label class="t2" for="password_current"></label>
  <input type="password" class="field-settings" name="password" id="password_current" autocomplete="off"/>
  <input type="checkbox" id="togglePw" onclick="showPassword()"/> 
  <label for="togglePw" class="fa"></label>
</p>

可调参数说明

  • 调整.field-settings的padding-right数值,可以控制输入文字和右侧图标的间距
  • 调整.pw-container .fa的right数值,可以控制图标距离输入框右边缘的距离
  • 可以给图标加hover状态样式,优化交互体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:06:22