Tailwind CSS 如何在 React 中设置 href 链接的样式?

Tailwind CSS how to style a href links in React?

出于某种原因,tailwind 似乎删除了 http links 的“蓝色”和“下划线”部分。

如何恢复此功能?

例如,在我的 React 代码中,我有:

return (
  <a href={v.url}>{v.alias}</a>
);

但是这个 link 显示起来像普通字体,并且没有下划线。也没有让浏览器记住或悬停在 link.

上的不同颜色的概念

Tailwind 的 Preflight 功能将删除大多数元素的所有浏览器默认样式,为您提供一个干净的基础,使 cross-browser 样式更加一致。

您需要re-add您想要的样式,例如:

className="underline text-blue-600 hover:text-blue-800 visited:text-purple-600"

或:

a {
   @apply underline text-blue-600 hover:text-blue-800 visited:text-purple-600
}

正如 Luke 正确解释的那样,Tailwind 的 Preflight 删除了所有浏览器默认设置。您必须自己添加样式:

className="underline text-blue-600 hover:text-blue-800 visited:text-purple-600"

但是,您不能在没有一些配置的情况下将 visited:text-purple-600 一起使用(至少对于 Tailwind 2。我不熟悉旧版本)。您还需要将以下内容添加到项目根目录下的 Tailwind 配置中:

// tailwind.config.js
module.exports = {
  // ...
  variants: {
    extend: {
      textColor: ['visited'],
    }
  },
}

这样,Tailwind 将使所有带有 visited: 的 类 可用于所有文本颜色 类。

You can learn more about enabling extra variants in the Tailwind docs.

所以其他答案正确地指出预检 and/or 基础将重置组件,但您也可以使用 @layer and @apply 指令将 classes 批量应用于元素.

@layer 给你一个桶来放东西,目前 Tailwind 中可用的是基础、组件和实用程序。

例如,如果您想将所有链接设置为蓝色和下划线,您可以执行以下操作:

@layer base {
  a {
    @apply text-blue underline
  }
}

链接的示例展示了如何对元素进行分组,以制作一致的样式按钮的元class。

@layer components {
  .btn-blue {
    @apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded;
  }
}

如果您正在使用 @apply,请注意状态(如悬停)不能像传递给 class 一样直接添加。

a {
   @apply underline text-blue-600 hover:text-blue-800 visited:text-purple-600
}

需要将它们分解并匹配到 css 状态,如下所示:

a {
   @apply underline text-blue-600
}
a:hover {
   @apply text-blue-800
}
a:visited {
   @apply text-purple-600
}

我不同意这里的其他人建议重新添加默认锚标记样式作为解决方案。您可以这样做,但是使用普通锚标记的一个烦恼是当您将按钮包装在锚标记中时,样式级联到按钮上的文本中,这非常烦人。

相反,我建议创建您自己的实用程序 class 来应用这些样式,而不是更改所有 <a> 标签的样式。例如:

.hyperlink {
  @apply text-blue-600 underline
}

.hyperlink:visited {
  @apply text-purple-600
}

现在,在需要时明确地使用 class 而不是无论如何都应用它。

<a class="hyperlink" href="/foo/bar">Text link</a>
<a href="foo/bar"><button>Style-Free Button!</button></a>