Как установить цвет текста, введенного в поле ввода FormKit в Vue.js с использованием Tailwind CSS?

Вопрос или проблема

Я работаю над проектом на Vue.js, где я использую FormKit для управления формами и Tailwind CSS для стилизации. Однако я столкнулся с проблемой: текст, вводимый в поле, появляется того же цвета, что и текст подсказки, который имеет светлый оттенок, в то время как я хотел бы, чтобы введённый текст был темнее.

Вот фрагмент кода, в котором я настраиваю своё поле ввода:

<script setup lang="ts">
import LogoAgilis from '@icons/LogoAgilis.vue'
import { reactive } from 'vue'
import router from '~/router'
import { useAuthStore } from '~/stores/auth'

const authStore = useAuthStore()

const credentials = reactive({
  email: '',
  password: '',
})

const { execute: login, isFetching: isLoadingLogin } = authStore.login(credentials)

function handleSubmit() {
  login()
    .then(() => {
      router.push('/organizations')
    })
}
</script>

<template>
  <div class="bg-white p-8 shadow rounded-lg w-80">
    <form
      class="space-y-4"
      @submit.prevent="handleSubmit"
    >
      <div class="flex justify-center items-center gap-1">
        <LogoAgilis
          :size="48"
          fill="#8d00ec"
        />
      </div>

      <div>
        <label
          for="email"
          class="block text-sm font-medium leading-6 text-neutral-800"
        >
          Электронная почта
        </label>
        <div class="mt-2">
          <InputEmail
            v-model="credentials.email"
            name="email"
            validation="required"
            placeholder="[email protected]"
            class="block w-full rounded-md indent-2 border-0 py-1.5 text-neutral-800 shadow-sm ring-1 ring-inset ring-neutral-300 placeholder:text-neutral-400 focus:outline-2 focus:outline-inset focus:outline-electric-violet-600 sm:text-sm sm:leading-6"
            :inputProps="{ class: 'text-neutral-900' }"
          />
        </div>
      </div>

      <div>
        <label
          for="password"
          class="block text-sm font-medium leading-6 text-neutral-800"
        >
          Пароль
        </label>
        <div class="mt-2">
          <InputPassword
            v-model="credentials.password"
            name="password"
            validation="required"
            class="block w-full rounded-md indent-2 border-0 py-1.5 text-neutral-800 shadow-sm ring-1 ring-inset ring-neutral-300 placeholder:text-neutral-400 focus:outline-2 focus:outline-inset focus:outline-electric-violet-600 sm:text-sm sm:leading-6"
          />
        </div>
        <RouterLink
          to="/recover"
          class="font-medium text-sm text-electric-violet-600 hover:text-electric-violet-500"
        >
          Забыли пароль?
        </RouterLink>
      </div>

      <div>
        <button
          :disabled="isLoadingLogin"
          type="submit"
          class="flex w-full justify-center rounded-md bg-electric-violet-500 px-3 py-1.5 text-sm font-medium leading-6 text-white shadow-sm hover:bg-electric-violet-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-electric-violet-600"
        >
          Войти
        </button>
      </div>
    </form>

    <p class="mt-6 text-center text-sm text-neutral-600 font-medium">
      Новый пользователь?
      <RouterLink
        to="/register"
        class="font-semibold mx-1 leading-6 text-electric-violet-600 hover:text-electric-violet-500"
      >
        Зарегистрироваться
      </RouterLink>
    </p>
  </div>
</template>

В настоящее время я использую следующие настройки для FormKit:

import { pt } from '@formkit/i18n';
import { defaultConfig } from '@formkit/vue';
import { rootClasses } from './formkit.theme';

export default defaultConfig({
  locales: { pt },
  locale: 'pt',
  config: {
    rootClasses,
  },
});

Что я уже попробовал:

  1. Добавить различные классы цвета к полю ввода, например text-neutral-900, но это не дало эффекта.
  2. Проверить элемент в браузере, чтобы узнать, какие стили применяются, но я не смог найти причину, почему цвет текста, который я ввёл, такой же, как цвет подсказки.

Как я могу гарантировать, что цвет текста, вводимого в поле FormKit, отличается от цвета подсказки? Есть ли способ правильно задать этот цвет, используя Tailwind CSS в сочетании с FormKit? Есть ли предложения о том, как настроить стили полей ввода FormKit?

Заранее спасибо за любую помощь

Ответ или решение

Для решения вашей проблемы с установкой цвета текста, введенного в поле ввода FormKit в проекте Vue.js с использованием Tailwind CSS, необходимо удостовериться, что необходимые стили правильно применяются к элементам. Ниже приведены шаги, которые помогут вам достичь желаемого результата.

Шаг 1: Убедитесь, что стили применяются правильно

Вы уже добавили класс text-neutral-900 к полям ввода, однако, если эффект не наблюдается, это может быть связано с тем, что стили FormKit перекрывают ваши стили. Чтобы это исправить, можно воспользоваться !important, чтобы убедиться, что ваши стили имеют более высокий приоритет:

<InputEmail
    v-model="credentials.email"
    name="email"
    validation="required"
    placeholder="[email protected]"
    class="block w-full rounded-md indent-2 border-0 py-1.5 text-neutral-800 shadow-sm ring-1 ring-inset ring-neutral-300 placeholder:text-neutral-400 focus:outline-2 focus:outline-inset focus:outline-electric-violet-600 sm:text-sm sm:leading-6"
    :inputProps="{ class: 'text-neutral-900 !important' }"
/>

Шаг 2: Использование встроенных стилей в формах

Если просто добавление класса с приоритетом не сработало, вы можете также настроить дополнительные стили через пропсы inputProps, чтобы конкретно настроить цвета:

<InputEmail
    v-model="credentials.email"
    name="email"
    validation="required"
    placeholder="[email protected]"
    :inputProps="{ 
        class: 'text-neutral-900', 
        style: 'color: #111827;' // Здесь вы можете использовать любой цвет
    }"
/>

Шаг 3: Глобальная настройка стилей

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

import { pt } from '@formkit/i18n';
import { defaultConfig } from '@formkit/vue';
import { rootClasses } from './formkit.theme';

export default defaultConfig({
  locales: { pt },
  locale: 'pt',
  config: {
    rootClasses,
    inputs: {
      text: {
        class: 'text-neutral-900',  // Устанавливаем цвет текста по умолчанию
        style: 'color: #111827;' // Можно также использовать стиль
      },
    },
  },
});

Шаг 4: Использование Tailwind классов в стилизации

Tailwind CSS позволяет гибко настраивать стили на основе классов. Убедитесь, что вы добавили все необходимые стили для состояния фокуса и размещения элементов, чтобы они соответствовали вашему дизайну.

Также обратите внимание на то, что некоторые классы, такие как placeholder:text-neutral-400, могли бы влиять на видимость текста. Убедитесь, что они применяются корректно и не мешают чтению вводимого текста.

Вывод

В результате выполнения всех вышеуказанных шагов вы должны быть в состоянии настроить цвет текста, введенного в FormKit, таким образом, чтобы он отличался от цвета placeholder. Поскольку вы используете Tailwind CSS, у вас есть много возможностей для дальнейшей настройке оформления, чтобы ваша форма выглядела именно так, как вы планируете.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться. Успехов в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...