Как стабилизировать плавающие метки в React с помощью Tailwind CSS?

Я пытаюсь создать регистрационную форму, используя React и Tailwind CSS. Когда я фокусируюсь на форме ввода, метка скользит вверх. Пока здесь нет проблем. Однако, когда я фокусируюсь на другом вводе, метка ввода, на котором я ранее сосредоточился, становится заполнителем. То есть метка, которая только что переместилась вверх, возвращается на свое место. Мои коды следующие:

<div className = "relative mb-4">
              <input
                type = "text"
                id = "username"
                name = "username"
                value = {formData.username}
                onChange = {handleChangeEvent}
                className = "peer p-3 h-10 w-full border-b-2 border-gray-300 text-gray-900 placeholder-transparent focus-within:outline-none focus-within:border-rose-600"
                placeholder = ""
                required
              />
              <label
                htmlFor = "username"
                className = {`absolute left-1 top-2 transition-all text-gray-400 ${formData.username.length > 0 ? 'text-md' : 'text-base'
                  } ${formData.username.length > 0 ? 'text-gray-400' : ''
                  } peer-focus-within:left-0 peer-focus-within:-top-6 peer-focus-within:text-gray-700 peer-focus-within:text-md peer-focus-within:text-bold`}
              >
                Username
              </label>
            </div>

Скриншоты

Как стабилизировать плавающие метки в React с помощью Tailwind CSS?

Как стабилизировать плавающие метки в React с помощью Tailwind CSS?

Как стабилизировать плавающие метки в React с помощью Tailwind CSS?

Как стабилизировать плавающие метки в React с помощью Tailwind CSS?

Проблема хорошо видна на четвертом скриншоте. Как я могу решить эту проблему? Заранее спасибо!

Я попытался выполнить некоторые проверки, используя строки шаблона и тернарный оператор, но так и не смог решить эту проблему.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Извините, если я неправильно понял вашу проблему, но, похоже, вы хотите, чтобы метка перестала менять свою позицию после того, как пользователь будет готов. В настоящее время ваш эффект от изменения его положения описан в

peer-focus-within:-top-6

Но проблема возникает, когда фокус уходит. После этого фокус внутри правила не применяется, и преобладает исходный стиль.

Есть несколько способов справиться с этим. Я бы посоветовал вам упростить логику стиля, чтобы следовать длине имени пользователя следующим образом:

  className = {`absolute transition-all ${formData.username.length === 0 ? 'left-1 top-2 text-gray-400 peer-focus-within:left-0 peer-focus-within:-top-6 peer-focus-within:text-gray-700 peer-focus-within:text-md peer-focus-within:text-bold' : 'left-0 -top-6 text-gray-700 text-md text-bold'}`}

Имя класса навсегда изменится на одно и то же после изменения перехода, поэтому оно не изменится обратно

Другие вопросы по теме