我如何在普通 css 中修复此浮动标签?

How do i fix this floating label in plain css?

项目在这里 -> https://play.tailwindcss.com/udQSLuVwHa

当我在 InputField 内部单击时(不要直接单击用户名标签),标签会正确收缩。 如果我点击 inputField(使其失去焦点),Label 会再次变大。 现在,如果我在 InputField 中输入一些文本,并使其失去焦点,用户名标签不应缩小,而是保持在顶部。

我已经注释掉了应该起作用的 CSS。我的 CSS 有问题吧?而不是顺风?

尝试 select label 当它的兄弟 input 没有显示 input:not(:placeholder-shown) + label 的占位符时,这是您使用新 select 的样式或:

.outline:focus-within label,
input:not(:placeholder-shown) + label {
  background-color: white;
  transform: scale(0.75) translateY(-1rem);
  z-index: 0;
  margin-left: 0.75rem;
  padding-left: 0.25rem;
  padding-right: 0.25rem;
  padding-top: 0px;
  padding-bottom: 0px;
}

Saeed 的回答是一个很好的 CSS 解决方案。

如果您想在 JavaScript 中解决此问题,您可以执行以下操作:

(请注意,当您 运行 代码片段时样式看起来会有所不同,因为顺风不存在)

inputUsername = document.getElementById('inputUsername');
labelUsername = document.getElementById('labelUsername');

inputUsername.onfocus = () => {
    labelUsername.classList.add('outline');
}

inputUsername.onblur = () => {
    if (inputUsername.value.length == 0){
        labelUsername.classList.remove('outline');
    }
}
.outline {
    background-color: white;
    transform: scale(0.75) translateY(-1rem);
    z-index: 0;
    margin-left: 0.75rem;
    padding-left: 0.25rem;
    padding-right: 0.25rem;
    padding-top: 0px;
    padding-bottom: 0px;
  }
<div class="outline relative border-2 focus-within:border-blue-500">
    <input id="inputUsername" class="bg-red-700 block p-4 w-full text-lg appearance-none bg-transparent" placeholder=" " type="text" />
    <label id="labelUsername" for="username" class="absolute top-0 text-lg bg-white p-4 -z-1 duration-300 origin-0">Username</label>
  </div>