You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中用Tailwind CSS实现侧边抽屉过渡并正确定位开关

解决方案

核心修改思路

  • 将开关按钮移至粉色主菜单容器内,利用Flex布局固定在右上角
  • 调整抽屉的定位逻辑,使其与主菜单宽度联动,避免固定值导致的错位
  • 优化交互逻辑,区分抽屉内容区和关闭按钮的点击行为

修改后的代码

import { useState } from 'react';

const album = ["Album1", "Album2", "Album3"];
export const Menu = () => {
  const [open, setOpen] = useState(false);

  // 阻止抽屉内容区点击冒泡,避免误触关闭
  const handleDrawerClick = (e) => {
    e.stopPropagation();
  };

  return (
    <div className="flex flex-col w-64 bg-pink-200 p-3"> {/* 给主菜单设置固定宽度与粉色背景 */}
      {/* 顶部标题栏:包含标题和关闭按钮 */}
      <div className="flex justify-between items-center mb-4">
        <h2 className="text-lg font-medium text-gray-900">Album</h2>
        {open && (
          <button 
            onClick={() => setOpen(false)}
            className="text-gray-700 hover:text-gray-900"
          >
            ✕
          </button>
        )}
      </div>

      <div className="flex-1">
        <div className="flex flex-col space-y-3 py-3">
          {album.map((name) => (
            <button
              key={name}
              id={name}
              className="flex items-center space-x-2 p-2 hover:bg-pink-100 rounded"
              onClick={() => setOpen(true)}
            >
              <span>{name}</span>
            </button>
          ))}
        </div>
      </div>

      {/* 抽屉面板 */}
      <aside
        onClick={() => setOpen(false)}
        className={`fixed top-0 left-0 w-72 bg-blue-400 h-full overflow-auto transition-all duration-1000 z-30 transform
          ${open ? 'translate-x-[16rem]' : '-translate-x-full'}`} // 16rem对应主菜单w-64的宽度,确保对齐
      >
        <div onClick={handleDrawerClick} className="p-4">
          hello
          {/* 抽屉内部内容,点击此处不会触发关闭 */}
        </div>
      </aside>
    </div>
  );
};

关键修改说明

  1. 主菜单容器:添加固定宽度w-64和粉色背景bg-pink-200,明确粉色列范围,同时为抽屉定位提供精准参考
  2. 开关按钮:嵌入粉色列的标题栏右侧,仅在抽屉打开时显示,完全处于粉色列区域内
  3. 抽屉定位:使用与主菜单宽度匹配的translate-x-[16rem]代替固定值,确保抽屉打开后刚好对齐粉色列右侧,不会错位
  4. 交互优化:给抽屉内容区添加冒泡阻止逻辑,避免点击抽屉内部内容时误触发关闭

内容的提问来源于stack exchange,提问作者DaveDave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:45:46