AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79575054
Accepted
Paul Martinez
Paul Martinez
Asked: 2025-04-15 19:46:12 +0800 CST2025-04-15 19:46:12 +0800 CST 2025-04-15 19:46:12 +0800 CST

Fonte @font-face personalizada ignorada pelo Tailwind CSS v4 com Vite e React

  • 772

Estou tentando usar uma fonte personalizada (RetroGaming.ttf) no meu projeto React usando Vite e Tailwind CSS v4, mas a fonte não está sendo aplicada. A @font-faceregra parece ser ignorada, e a classe Tailwind gerada não inclui a fonte personalizada em sua font-familypropriedade.

Pilha de tecnologia

  • Estrutura: React (^19.0.0)
  • Ferramenta de construção: Vite (^6.2.0)
  • Estilo: Tailwind CSS (^4.1.3)
  • Processamento CSS: PostCSS (^8.5.3) com autoprefixere@tailwindcss/postcss
  • Arquivo de fonte: [RetroGaming.ttf]

Meta

Defina RetroGamingFontvia @font-facee aplique-o usando uma classe de utilitário Tailwind font-custom-retro.

Problema

  1. A fonte personalizada não é renderizada; os elementos usam a fonte reserva.
  2. O pacote CSS de produção ( dist/assets/) não possui a @font-faceregra .
  3. A classe gerada .font-custom-retroinclui apenas a fonte de fallback ( sans-serif), não RetroGamingFont.
  4. As ferramentas de desenvolvimento do navegador não mostram nenhum erro 404 para [/fonts/RetroGaming.ttf]
  5. O problema persiste, esteja @font-faceele em src/index.cssou diretamente em index.html.

Configuração

tailwind.config.js

/** @type {import('tailwindcss').Config} */
export default {
  content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
  theme: {
    extend: {
      fontFamily: {
        'custom-retro': ['RetroGamingFont', 'sans-serif'], // Font definition with fallback
      },
    },
  },
  plugins: [],
}

postcss.config.js

export default {
  plugins: {
    '@tailwindcss/postcss': {}, // Required for v4
    autoprefixer: {},
  },
}

src/index.css (Atualmente vazio em relação a @font-face)

@import "tailwindcss"; /* Tailwind v4 import, placed first */
    
/* @font-face moved to index.html for testing */

index.html (Estado atual)

<!-- Inside <head> -->
<style>
  @font-face {
    font-family: 'RetroGamingFont';
    src: url('/fonts/RetroGaming.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
  }
</style>

Uso em CompatibilityForm.jsx

<h2 className="text-2xl font-custom-retro text-pink-400">...</h2>
<label className="font-custom-retro text-indigo-200">...</label>

O que eu tentei

Configuração correta do Tailwind v4:

  • Usando @import "tailwindcss";emsrc/index.css
  • Usando @tailwindcss/postcssplugin, sem @tailwindcss/viteplugin.

@font-faceColocação:

  • Testado em src/index.css(depois @import) e diretamente na index.html <style>tag.

Nenhuma das duas funcionou.

Verificação do caminho do arquivo:

  • Confirmado public/fonts/RetroGaming.ttfque existe e /fonts/RetroGaming.ttfo caminho está correto para ativos públicos.

Nome da fonte:

  • Simplificado para RetroGamingFont(sem espaços).

Inspeção de ferramentas de desenvolvimento:

  • A classe verificada .font-custom-retroé aplicada, mas o cálculo font-familyusa o fallback.
  • Nenhum erro de rede para o arquivo de fonte.

Pergunta

Por que o Tailwind CSS v4 / PostCSS / Vite não está processando ou reconhecendo a @font-faceregra corretamente, impedindo que a fonte personalizada seja incluída na font-familydefinição da classe de utilitário? Existe alguma etapa de configuração específica para fontes personalizadas com Tailwind v4 e Vite que eu esteja esquecendo?

css
  • 2 2 respostas
  • 39 Views

2 respostas

  • Voted
  1. Best Answer
    rozsazoltan
    2025-04-15T20:13:24+08:002025-04-15T20:13:24+08:00

    Configuração CSS-first (recomendado)

    A partir do TailwindCSS v4, o uso de tailwind.config.js foi descontinuado. Em vez disso, foi introduzida uma abordagem de configuração CSS-first. Na configuração CSS-first, você pode personalizar suas configurações usando a @themediretiva . Vários namespaces estão disponíveis para essa finalidade.

    Nota : Neste caso, o tailwind.config.jsarquivo pode ser excluído.

    • @themediretiva - Documentação do TailwindCSS v4
    • Namespaces de variáveis ​​de tema - Documentação do TailwindCSS v4
    • Quais são as principais mudanças do TailwindCSS v4? - StackOverflow
    • Nova opção de configuração CSS-first na v4 - StackOverflow
    • Como usar temas personalizados no TailwindCSS v4 - StackOverflow

    Com o --font-*namespace, você pode declarar fontes.

    /* Still, I'll show an example using a font that's available online. */
    @import url('https://fonts.cdnfonts.com/css/playground');
    
    /* Note: The font won't work here due to the absence of an online TTF file. */
    @font-face {
      font-family: 'RetroGamingFont';
      src: url('/fonts/RetroGaming.ttf') format('truetype');
      font-weight: normal;
      font-style: normal;
    }
    <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
    <style type="text/tailwindcss">
    @import 'tailwindcss';
    
    @theme {
      --font-retro: 'RetroGamingFont', sans-serif;
      --font-playground: 'Playground', monospace;
      --color-clifford: #da373d;
    }
    </style>
    
    <h1 class="font-retro text-clifford text-3xl font-bold underline">
      Hello world with Retro!
    </h1>
    
    <h1 class="font-playground text-clifford text-3xl font-bold underline">
      Hello world with Playground!
    </h1>

    Configuração baseada em JavaScript legado

    Como alternativa, você ainda pode usar tailwind.config.jsvia a @configdiretiva.

    • @configdiretiva - Documentação do TailwindCSS v4
    • TailwindCSS v4 é compatível com versões anteriores da v3 - StackOverflow

    ./src/index.css

    @import 'tailwindcss';
    
    @config './../tailwind.config.js';
    
    @font-face {
      font-family: 'RetroGamingFont';
      src: url('/fonts/RetroGaming.ttf') format('truetype');
      font-weight: normal;
      font-style: normal;
    }
    

    tailwind.config.js

    /** @type {import('tailwindcss').Config} */
    export default {
      theme: {
        extend: {
          fontFamily: {
            'retro': ['RetroGamingFont', 'sans-serif'],
          },
        },
      },
      plugins: [],
    }
    

    Observação : neste caso, não há necessidade de declarar contentpropriedade. O TailwindCSS v4 vem com detecção automática de origem.

    • Detecção automática de fonte do TailwindCSS v4 - StackOverflow
    • 1
  2. Melvin Kosisochukwu
    2025-04-15T20:06:49+08:002025-04-15T20:06:49+08:00

    O tailwind v4 não usa estilos da configuração, você precisará criar seus estilos diretamente no seu arquivo css e criar uma variável.

    @theme {
      --font-poppins: "Poppins", sans-serif;
    }
    

    Você pode usar a fonte em seu HTML:

    <p class="font-poppins">Hello world</p>
    
    • 0

relate perguntas

  • Prettier/VS Code adicionando um espaço antes de !important no CSS, causando quebra no WordPress

  • Como enviar parâmetros dinâmicos do arquivo react tsx para css

  • Grade CSS: agrupar e ajustar ao conteúdo

  • É possível alinhar gradientes entre elementos?

  • Bordas arredondadas com Box Shadow - Tailwind CSS

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve