O FormKit vem com uma marcação robusta e acessível — mas sem suposições sobre os estilos desejados. O FormKit fornece temas opcionais que você pode usar em seu projeto — ou você pode criar o seu próprio.
A maneira mais fácil de começar a usar os Temas do FormKit (para Tailwind) é acessar diretamente https://themes.formkit.com, personalizar um tema escolhido ao seu gosto e, em seguida, escolher Download theme para receber comandos específicos para executar na raiz do seu projeto.

Alternativamente, você pode usar o cli do FormKit para gerar temas para o seu projeto. Para começar, execute o seguinte comando no mesmo diretório do seu arquivo formkit.config.{ts|js}:
npx formkit theme
Você será guiado na escolha de um tema existente como ponto de partida para o seu projeto. Este comando criará um arquivo formkit.theme.{ts|js} na raiz do seu projeto. Para completar a configuração, você precisará usar as rootClasses deste arquivo de tema no seu formkit.config.{ts|js}:
// formkit.config.ts
import { fr } from '@formkit/i18n'
import { defaultConfig } from '@formkit/vue'
import { rootClasses } from './formkit.theme'
export default defaultConfig({
locales: { fr },
locale: 'fr',
config: {
rootClasses,
},
})
Finalmente, você precisará adicionar o arquivo formkit.theme.{ts|js} à propriedade de conteúdo do seu arquivo de configuração do Tailwind. Isso garantirá que os estilos do tema sejam incluídos no CSS do seu projeto:
// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./app.vue",
"./formkit.theme.ts" // <-- adicione seu arquivo de tema
],
darkMode: 'class',
theme: {
extend: {},
},
plugins: [],
}
Se você executar o comando novamente, será levado para https://themes.formkit.com, onde poderá personalizar o tema escolhido.
# com o arquivo formkit.theme existente na raiz do seu projeto
> npx formkit theme
? Encontrado arquivo de tema local para <themeName>, editar este tema? › (Y/n)
Quer criar seu próprio tema Tailwind? Confira nosso tema inicial — que é altamente comentado — para começar. Você também pode seguir nosso guia, "Criar um tema Tailwind CSS" para acompanhar passo a passo o processo de criação do tema.
Continue lendo para aprender como sobrescrever ainda mais as classes que vêm com o tema FormKit escolhido em níveis globais, de formulário e de entrada.
O FormKit agora oferece temas Tailwind muito mais configuráveis disponíveis em themes.formkit.com. Se você está usando o tema Genesis CSS legado, siga as instruções abaixo — mas incentivamos você a considerar o uso de um dos novos temas FormKit personalizáveis com Tailwind para tornar sua vida muito mais simples.
Eventualmente, o tema Genesis CSS legado será descontinuado e não terá mais suporte para novas entradas Pro.
Para carregar o genesis via CDN, forneça-o à propriedade theme de seu defaultConfig.
...
defaultConfig({
theme: 'genesis' // será carregado do CDN e injetado no cabeçalho do documento
})
...
Para instalar o Genesis, primeiro instale o pacote @formkit/themes.
npm install @formkit/themes
Depois, em seu main.js (onde você inicia o Vue), inclua o theme.css do Genesis (isso supõe que você está usando uma ferramenta de build como Vite, Webpack, Snowpack ou Nuxt):
import '@formkit/themes/genesis'
Para fins de estilização, alguns atributos são automaticamente adicionados e removidos da seção outer de todas as entradas FormKit:
data-type — O tipo de entrada, text, select, checkbox etc.data-multiple — Para entradas que aceitam o atributo multiple, isso será anexado quando a entrada tiver o atributo múltiplo (como a entrada select).data-disabled — Presente quando uma entrada está desabilitada.data-complete — Presente quando a entrada está "completa". Destinado a ser usado para estilizar a entrada quando um usuário terminou de preenchê-la (como um visto verde). Leia sobre context.state.complete para informações sobre quais condições fazem isso ser true.data-invalid — Presente quando a entrada tem regras de validação falhando e as mensagens para as regras falhas estão visíveis.data-errors — Presente quando a entrada tem erros explicitamente definidos.Você pode usar os atributos acima para fornecer facilmente feedback visual em tempo real para os usuários que estão preenchendo seus formulários:
A maioria dos usuários vai querer aplicar seus próprios estilos e classes à marcação fornecida pelo FormKit. O FormKit oferece diversos métodos para aplicar classes ao seu projeto.
As classes podem ser modificadas para todas as seções usando qualquer um dos seguintes métodos (da maior para a menor especificidade):
{section-key}-class. (mais específico)classes.classes.rootClasses. (menos específico)As classes seguem uma hierarquia estrita. Inicialmente, as classes são produzidas pela função rootClasses. Em seguida, podem ser modificadas pela opção de configuração classes, depois pela prop classes e, finalmente, pela prop {section-key}-class. Em cada um desses estágios, as classes podem ser anexadas, redefinidas ou modificadas seletivamente.
Para anexar uma classe, basta retornar a string que você deseja anexar ou fornecer um objeto de classes com valores booleanos — propriedades true serão anexadas:
Classes produzidas por todos os passos anteriores da hierarquia podem ser completamente removidas fornecendo uma classe especial (não renderizada) $reset em formato de string ou objeto:
Classes produzidas por um passo anterior na hierarquia de classes podem ser seletivamente removidas fornecendo um objeto com o valor false para a classe que você deseja remover ou fornecendo um nome de classe para uma prop {section-key}-class que começa com $remove: e corresponde a uma classe existente na lista de classes. Isso inclui a remoção das classes padrão do formkit com prefixo formkit-:
Além dos quatro métodos listados acima, também estão disponíveis substituições mais generalizadas, como a substituição do esquema de um input, usando o gancho de nó classes, ou utilizando slots:
A maneira mais simples de modificar as classes de um elemento dentro de um input do FormKit é através das propriedades {section-key}-class. Para adicionar uma classe a um elemento de seção específico, como label, você simplesmente adiciona a propriedade label-class:
A propriedade classes é semelhante à propriedade de classe da seção-chave, exceto que permite definir classes em todas as seções ao mesmo tempo:
A opção de configuração de classes é semelhante à propriedade classes, exceto que se aplica a todos os inputs aos quais a configuração é aplicada. O sistema de configuração único do FormKit permite que você aplique classes globalmente em seu projeto ou apenas em inputs dentro de um determinado grupo ou formulário:
O FormKit vem com uma função auxiliar chamada generateClasses incluída em @formkit/themes.
A função generateClasses recebe um objeto javascript chaveado pelo tipo de input com valores de um sub-objeto chaveado por ${sectionKey} com valores de strings. Com essa função, você pode rapidamente aplicar listas de classes a seções dentro de inputs baseados no tipo de input fornecido.
Temas fornecidos por https://themes.formkit.com usam a função rootClasses para aplicar suas listas de classes. Sobrescrever a função rootClasses em seu projeto efetivamente desinstalará seu tema Tailwind. Use generateClasses em seu objeto de configuração para aplicar sobrescritas em vez disso.
rootClasses é uma função de configuração responsável
por produzir as classes padrão para cada elemento. Esta função já tem um valor padrão que produz todas as classes padrão (como formkit-outer e formkit-label) que acompanham o FormKit — então, substituir essa única função permite que você substitua facilmente todas as classes iniciais. Isso a torna uma candidata ideal para escrever temas personalizados ao usar frameworks de utilidades como o Tailwind.
A função rootClasses recebe 2 argumentos (respectivamente):
label ou input).A função será chamada uma vez para cada seção e deve retornar um objeto de classes com valores booleanos.
Embora o uso típico de rootClasses seja no nível de configuração global para aplicar
classes em todo o seu projeto - você também pode usá-la com a propriedade config para sobrescrever
um formulário específico ou input dentro do seu projeto com uma lista de classes calculada a partir da lógica
dentro da função fornecida:
Porque rootClasses é uma opção de configuração, você pode aplicá-la por input, por grupo ou globalmente.
Além de modificar classes via configuração ou props em um componente <FormKit>, você pode usar as mesmas técnicas dentro de esquema:
Dentro do esquema, você também pode modificar as classes de um elemento dentro de uma entrada usando as propriedades {section-key}Class. Por exemplo, para adicionar uma classe à seção de rótulo, você pode adicionar a propriedade labelClass:
{
$formkit: 'text',
name: 'email',
// adiciona 'appended-class' à seção "label"
labelClass: 'appended-class'
},
Assim como a propriedade classes em um componente <FormKit>, você pode modificar a lista de classes para qualquer seção de uma entrada com a propriedade classes em um nó de esquema:
{
$formkit: 'text',
name: 'email',
// modifica classes nas seções "outer" e "inner" desta entrada
classes: {
outer: 'new-outer-class',
inner: {
$reset: true, // reseta as classes na seção "inner"
'new-inner-class': true
}
},
},
Uma vez que a configuração é passada para entradas descendentes, você pode alterar classes via configuração em um pai, como um form, list ou um group, e isso afetará todos os descendentes em qualquer profundidade: