解決 Tailwind CSS 如何使用尺寸進行響應設計遇到的 Bug

阅读时长 6 分钟读完

Tailwind CSS 是一款非常流行的前端 CSS 框架,它使用类似于提供样式的类名来快速而轻松地进行页面设计。其中一个很方便的特性是使用相对大小来进行响应设计。但是,当我们在使用尺寸响应设计时,可能会遇到一些 Bug。

在本篇文章中,我们将讨论如何解决 Tailwind CSS 在使用尺寸进行响应设计时所遇到的 Bug。

问题描述

在 Tailwind CSS 中,我们可以使用类似于以下格式的类来定义相对大小:

其中,w-{size} 表示在所有屏幕大小下都使用该尺寸,而 sm:w-{size}-smxl:w-{size}-xl 则表示在相应的屏幕大小下使用不同的尺寸。

例如:

上述代码表示,该 div 元素在不同屏幕大小下的宽度分别为:

  • 所有屏幕大小下都是父元素宽度的一半;
  • 屏幕宽度大于等于 640px 时为父元素宽度的四分之一;
  • 屏幕宽度大于等于 768px 时为父元素宽度的六分之一;
  • 屏幕宽度大于等于 1024px 时为父元素宽度的八分之一;
  • 屏幕宽度大于等于 1280px 时为父元素宽度的十分之一。

然而,在使用尺寸进行响应设计时,我们可能会遇到以下的问题。

问题展示

让我们来看两个具体的问题。

问题 1

首先,我们定义了一个具有 w-1/2 sm:w-1/4 md:w-1/6 lg:w-1/8 xl:w-1/10 类的 div 元素,并将其包含在一个 max-w-xl 的容器内。

我们希望该 div 元素在屏幕宽度大于等于 1280px 时占据父元素宽度的十分之一。

但是,当我们在屏幕宽度大于等于 1280px 时查看该元素时,会发现它实际上只占据了父元素宽度的八分之一!下图展示了该问题的效果:

问题 2

其次,我们定义了一个具有 w-1/2 sm:w-3/4 md:w-5/6 lg:w-7/8 xl:w-9/10 类的 div 元素,并将其包含在一个 max-w-xl 的容器内。

我们希望该 div 元素在屏幕宽度大于等于 640px 时占据父元素宽度的三分之二。

然而,当我们在屏幕宽度大于等于 640px 时查看该元素时,会发现它实际上占据了父元素宽度的四分之三!下图展示了该问题的效果:

解决方案

那么,如何解决 Tailwind CSS 使用尺寸进行响应设计时所遇到的问题呢?

答案是,修改尺寸使用的断点。

在 Tailwind CSS 中,我们可以使用 theme.screens 属性来定义我们希望使用的屏幕大小。这个属性是一个对象,其中的键表示我们希望定义的屏幕大小,而相应的值表示断点阈值。

例如,我们可以使用以下代码来定义 smmdlgxl 屏幕大小:

-- -------------------- ---- -------
-------------- - -
  ------ -
    -------- -
      --- --------
      --- --------
      --- ---------
      --- ---------
    --
  --
  -- ---
--

上述代码表示,我们希望 sm 屏幕大小的最小宽度为 640px,而 mdlgxl 屏幕大小的最小宽度分别为 768px、1024px 和 1280px。

然而,在默认情况下,Tailwind CSS 会使用以下屏幕大小:

-- -------------------- ---- -------
-------------- - -
  ------ -
    -------- -
      --- --------
      --- --------
      --- ---------
      --- ---------
      ------ ---------
    --
  --
  -- ---
--

可以看到,除了上述定义的 smmdlgxl 屏幕大小外,还有一个名为 2xl 的屏幕大小。这个屏幕大小的最小宽度是 1536px。

这就是导致问题的原因:在默认情况下,Tailwind CSS 会在屏幕宽度大于等于 1280px 时开始使用 2xl 屏幕大小,而这个屏幕大小的最小宽度是 1536px。

因此,当我们希望在屏幕宽度大于等于 1280px 时使用十分之一的宽度时,实际上它会在 xl 屏幕大小的 80% 和 2xl 屏幕大小的 10% 之间进行插值。这就是为什么我们会看到它实际上只占据了父元素宽度的八分之一。

类似地,在屏幕宽度大于等于 640px 时,它实际上会在 sm 屏幕大小的 50% 和 md 屏幕大小的 66.6667% 之间进行插值,因此它会占据父元素宽度的四分之三。

要解决这些问题,我们只需要将 theme.screens 属性中 2xl 屏幕大小的断点阈值设为 1280px,即:

-- -------------------- ---- -------
-------------- - -
  ------ -
    -------- -
      --- --------
      --- --------
      --- ---------
      --- ---------
      ------ ---------
    --
  --
  -- ---
--

这样一来,当屏幕宽度大于等于 1280px 时,Tailwind CSS 将会使用 xl 屏幕大小进行计算,并成功地将该 div 元素的宽度设置为父元素宽度的十分之一。

同样地,我们也可以将 theme.screens 属性中 md 屏幕大小的断点阈值设为 640px,以解决第二个问题。

结论

在本篇文章中,我们讨论了在使用 Tailwind CSS 的尺寸进行响应设计时可能遇到的两个问题,并提出了通过修改断点阈值来解决这些问题的方法。

总的来说,尺寸是一种非常方便的响应设计工具,但在使用它时,请务必记得注意断点阈值!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677507d56d66e0f9aaf31c3f

纠错
反馈