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

MDB Bootstrap输入框标签回位问题技术求助

MDB Bootstrap输入框标签回退问题修复

问题描述

使用MDB Bootstrap注册表单时,输入框填写内容后,标签(label)会回到初始位置,无法保持在输入框上方的上浮状态。

问题原因

MDB的form-outline组件依赖其官方JavaScript库监听输入框状态变化,自动为组件添加/移除状态类以维持标签的上浮效果。如果未正确引入MDB的JS文件,或者JS未完成初始化,就会出现标签回退的问题。

解决方案

方案1:引入MDB官方JavaScript库

确保在HTML文档底部引入MDB的JavaScript文件(建议使用本地文件或官方合法资源):

<script type="text/javascript" src="mdb.min.js"></script>

引入后,MDB的JS会自动监听输入框状态,维持标签的上浮效果。

方案2:手动实现标签状态控制(不依赖MDB JS)

如果不想依赖MDB的JS库,可以通过原生JavaScript结合CSS实现效果:

  1. 添加自定义CSS规则,定义标签上浮后的样式:
.form-outline.filled .form-label {
  top: -10px;
  left: 1rem;
  font-size: 0.8rem;
  color: #4f4f4f;
}
  1. 添加JavaScript代码,监听输入框的输入和失焦事件,动态控制状态类:
<script>
  document.querySelectorAll('.form-outline input').forEach(input => {
    toggleLabelState(input);
    input.addEventListener('input', () => toggleLabelState(input));
    input.addEventListener('blur', () => toggleLabelState(input));
  });

  function toggleLabelState(input) {
    const parentOutline = input.closest('.form-outline');
    parentOutline.classList.toggle('filled', input.value.trim() !== '');
  }
</script>
  1. 修改后的完整表单代码示例:
<!-- Section: Design Block -->
<section class="background-radial-gradient overflow-hidden">
  <style>
    .background-radial-gradient {
      background-color: hsl(218, 41%, 15%);
      background-image: radial-gradient(650px circle at 0% 0%,
          hsl(218, 41%, 35%) 15%,
          hsl(218, 41%, 30%) 35%,
          hsl(218, 41%, 20%) 75%,
          hsl(218, 41%, 19%) 80%,
          transparent 100%),
        radial-gradient(1250px circle at 100% 100%,
          hsl(218, 41%, 45%) 15%,
          hsl(218, 41%, 30%) 35%,
          hsl(218, 41%, 20%) 75%,
          hsl(218, 41%, 19%) 80%,
          transparent 100%);
    }

    #radius-shape-1 {
      height: 220px;
      width: 220px;
      top: -60px;
      left: -130px;
      background: radial-gradient(#44006b, #ad1fff);
      overflow: hidden;
    }

    #radius-shape-2 {
      border-radius: 38% 62% 63% 37% / 70% 33% 67% 30%;
      bottom: -60px;
      right: -110px;
      width: 300px;
      height: 300px;
      background: radial-gradient(#44006b, #ad1fff);
      overflow: hidden;
    }

    .bg-glass {
      background-color: hsla(0, 0%, 100%, 0.9) !important;
      backdrop-filter: saturate(200%) blur(25px);
    }

    /* 自定义标签上浮样式 */
    .form-outline.filled .form-label {
      top: -10px;
      left: 1rem;
      font-size: 0.8rem;
      color: #4f4f4f;
    }
  </style>

  <div class="container px-4 py-5 px-md-5 text-center text-lg-start my-5">
    <div class="row gx-lg-5 align-items-center mb-5">
      <div class="col-lg-6 mb-5 mb-lg-0" style="z-index: 10">
        <h1 class="my-5 display-5 fw-bold ls-tight" style="color: hsl(218, 81%, 95%)">
          The best offer <br />
          <span style="color: hsl(218, 81%, 75%)">for your business</span>
        </h1>
        <p class="mb-4 opacity-70" style="color: hsl(218, 81%, 85%)">
          Lorem ipsum dolor, sit amet consectetur adipisicing elit.
          Temporibus, expedita iusto veniam atque, magni tempora mollitia
          dolorum consequatur nulla, neque debitis eos reprehenderit quasi
          ab ipsum nisi dolorem modi. Quos?
        </p>
      </div>

      <div class="col-lg-6 mb-5 mb-lg-0 position-relative">
        <div id="radius-shape-1" class="position-absolute rounded-circle shadow-5-strong"></div>
        <div id="radius-shape-2" class="position-absolute shadow-5-strong"></div>

        <div class="card bg-glass">
          <div class="card-body px-4 py-5 px-md-5">
            <form>
              <!-- 2 column grid layout with text inputs for the first and last names -->
              <div class="row">
                <div class="col-md-6 mb-4">
                  <div class="form-outline">
                    <input type="text" id="form3Example1" class="form-control" />
                    <label class="form-label" for="form3Example1">First name</label>
                  </div>
                </div>
                <div class="col-md-6 mb-4">
                  <div class="form-outline">
                    <input type="text" id="form3Example2" class="form-control" />
                    <label class="form-label" for="form3Example2">Last name</label>
                  </div>
                </div>
              </div>

              <!-- Email input -->
              <div class="form-outline mb-4">
                <input type="email" id="form3Example3" class="form-control" />
                <label class="form-label" for="form3Example3">Email address</label>
              </div>

              <!-- Password input -->
              <div class="form-outline mb-4">
                <input type="password" id="form3Example4" class="form-control" />
                <label class="form-label" for="form3Example4">Password</label>
              </div>

              <!-- Checkbox -->
              <div class="form-check d-flex justify-content-center mb-4">
                <input class="form-check-input me-2" type="checkbox" value="" id="form2Example33" checked />
                <label class="form-check-label" for="form2Example33">
                  Subscribe to our newsletter
                </label>
              </div>

              <!-- Submit button -->
              <button type="submit" class="btn btn-primary btn-block mb-4">
                Sign up
              </button>

              <!-- Register buttons -->
              <div class="text-center">
                <p>or sign up with:</p>
                <button type="button" class="btn btn-link btn-floating mx-1">
                  <i class="fab fa-facebook-f"></i>
                </button>

                <button type="button" class="btn btn-link btn-floating mx-1">
                  <i class="fab fa-google"></i>
                </button>

                <button type="button" class="btn btn-link btn-floating mx-1">
                  <i class="fab fa-twitter"></i>
                </button>

                <button type="button" class="btn btn-link btn-floating mx-1">
                  <i class="fab fa-github"></i>
                </button>
              </div>
            </form>
          </div>
        </div>
      </div>
    </div>
  </div>
  <!-- 手动控制标签状态的JS -->
  <script>
    document.querySelectorAll('.form-outline input').forEach(input => {
      toggleLabelState(input);
      input.addEventListener('input', () => toggleLabelState(input));
      input.addEventListener('blur', () => toggleLabelState(input));
    });

    function toggleLabelState(input) {
      const parentOutline = input.closest('.form-outline');
      parentOutline.classList.toggle('filled', input.value.trim() !== '');
    }
  </script>
</section>
<!-- Section: Design Block -->

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:04:51