使用 Tailwind 和 React 实现响应式 Tab 导航

阅读时长 11 分钟读完

前言

Tab 导航通常是网页中常用的交互形式,用于按分类或功能组织网页内容。在响应式设计中,Tab 导航的显示及交互适配不同的设备分辨率成为挑战。使用 Tailwind 和 React 可以快速解决响应式 Tab 导航的问题。

Tailwind 初探

Tailwind 是一种 CSS 框架,一种样式系统。Tailwind 的特点是选择器基于类名,编写起来同一样式可以通过不同的类名来获得。这种方式被货比三家网站称之为“utility-first”风格。

例如,添加一个按钮的样式可能会写成这样:

其中,属性 bg-blue-500 表示背景颜色为蓝色,属性 hover:bg-blue-700 表示按钮鼠标悬停状态背景颜色为深色蓝。

React 组件介绍

在使用 React 开发时,可以将 UI 描述成一系列相互嵌套的组件。每个组件都渲染成一个 HTML 元素。

一个 Tabs 组件可以使用 state 保存当前选定的 Tab,然后渲染 Tab 导航栏。

-- -------------------- ---- -------
-------- ------ -------- ----------- -------- -- -
  ----- ----------- ------------- - ---------------------------
  ------ -
    --
      ---- ------------------- ------- ------
        ---- ---------------------
          ---- ----------------- ------
            ----------------------------- -- ------ -------- -- -- -
              -------
                -----------------
                --------------
                  --------- --- -----------
                    - --------- -------- -------- ---------
                    - ----------- ------------- --------------------
                - --------- ----------- ---- ------
                ----------- -- --------------------------
              -
                ----------------
              ---------
            ---
          ------
        ------
        ---- -----------------
          ---------------------------------------
            -- ------ -------- -- -- ----------- --- ----------
          --
        ------
      ------
    ---
  --
-
展开代码

Tabs 组件接受 defaultTab 和 children 两个属性,其中 defaultTab 表示初始选中的 Tab 标签,children 是一组 Tab 组件。

每个 Tab 组件渲染成 HTML 元素,通过 title 和 id 属性标识 Tab 标签。

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

-------- ----- -
  ------ -
    ----- ------------
      ---- ------ ---------- ---
        ---------- -- --- -----
      ------
      ---- ------ ---------- ---
        ---------- -- --- -----
      ------
      ---- ------ ---------- ---
        ---------- -- --- -----
      ------
    -------
  --
-
展开代码

响应式设计

使用 Tailwind 的 @media 标记可以方便地针对不同分辨率进行样式设计。例如,为分辨率大于 768px 的情况下 Tab 导航栏的样式设置。

-- -------------------- ---- -------
-------- ------ -------- ----------- -------- -- -
  -- ---
  ------ -
    --
      ---- ------------------- ------- ------
        ---- ------------------- -----------
          -------
            ---------------- --------
            -----------------
            ----------------- -- ---------------------------------
          -
            ----------------------------- -- ------ -------- -- -- -
              ------- ----------------- --------------------
                ----------------
              ---------
            ---
          ---------
        ------
        ---- ----------------- ----------
          ---- ---------------------
            ---- ----------------- ------
              ----------------------------- -- ------ -------- -- -- -
                -------
                  -----------------
                  --------------
                    --------- --- -----------
                      - --------- -------- -------- ---------
                      - ----------- ------------- --------------------
                  - --------- ----------- ---- ------
                  ----------- -- --------------------------
                -
                  ----------------
                ---------
              ---
            ------
          ------
        ------
        ---- -----------------
          ---------------------------------------
            -- ------ -------- -- -- ----------- --- ----------
          --
        ------
      ------
    ---
  --
-
展开代码

其中,md:hidden 表示在分辨率大于 768px 时隐藏 border-b 块,选用下拉菜单方式展示 Tab 导航。

示例代码

完整示例代码:

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

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

-------- ----- -
  ------ -
    ----- ------------
      ---- ------ ---------- ---
        ---------- -- --- -----
      ------
      ---- ------ ---------- ---
        ---------- -- --- -----
      ------
      ---- ------ ---------- ---
        ---------- -- --- -----
      ------
    -------
  --
-
展开代码

总结

本文介绍了如何使用 Tailwind 和 React 开发响应式 Tab 导航。Tailwind 在实现样式上非常方便,而 React 在构建组件时提供了良好的复用性和可维护性。通过结合两者,能够快速有效地实现大量的网页 UI 组件。

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

纠错
反馈

纠错反馈